2014-09-11 03:21:52 +00:00
|
|
|
from netforce.model import Model, fields, get_model
|
2014-11-25 14:20:30 +00:00
|
|
|
from netforce.utils import get_file_path, get_data_path
|
2015-02-03 07:57:06 +00:00
|
|
|
from netforce.access import get_active_company, get_active_user
|
2015-01-08 08:07:33 +00:00
|
|
|
from netforce.database import get_connection
|
2014-09-11 03:21:52 +00:00
|
|
|
|
|
|
|
class ClinicSetting(Model):
|
|
|
|
_name="clinic.setting"
|
|
|
|
_string="Setting"
|
2014-12-03 11:40:37 +00:00
|
|
|
|
2014-09-11 03:21:52 +00:00
|
|
|
_fields={
|
2014-10-26 08:48:51 +00:00
|
|
|
"var_k": fields.Float("K"),
|
2015-02-27 03:48:57 +00:00
|
|
|
'signature': fields.File("Signature"),
|
2014-11-21 02:39:26 +00:00
|
|
|
'levels': fields.One2Many("clinic.setting.level","setting_id","Levels"),
|
2014-11-26 11:22:17 +00:00
|
|
|
'products': fields.One2Many("clinic.setting.product","setting_id","Products"),
|
2015-01-30 11:15:13 +00:00
|
|
|
'account_products': fields.One2Many("clinic.setting.account.product","setting_id","Account Products"),
|
2015-02-04 05:13:10 +00:00
|
|
|
'shop_products': fields.One2Many("clinic.setting.shop.product","setting_id","Shop Products"),
|
2014-11-27 15:14:31 +00:00
|
|
|
'invoice_policies': fields.One2Many("clinic.setting.policy","setting_id","Invoice Policies"),
|
2014-11-21 16:11:57 +00:00
|
|
|
'cost_per_case': fields.Float("Cost Per Case"),
|
|
|
|
'company_id': fields.Many2One("company", 'Company'),
|
2014-11-27 15:14:31 +00:00
|
|
|
'period_id': fields.Many2One("clinic.period","Period"),
|
2014-12-04 14:08:29 +00:00
|
|
|
'waiting_approval': fields.Boolean("Waiting Approval"), # HD Case
|
|
|
|
'real_time': fields.Boolean("Real Time"), # HD Case
|
|
|
|
'patient_type_id': fields.Many2One("clinic.patient.type","Default Type"), # Import payment
|
2014-12-21 18:00:54 +00:00
|
|
|
'imp_patient_type_id': fields.Many2One("clinic.patient.type","Import UC Type"), # Import payment
|
2014-12-04 14:08:29 +00:00
|
|
|
'find_dlz': fields.Boolean("Find Dialyzer After Confirm Visit"), # Visit
|
2014-12-14 11:15:14 +00:00
|
|
|
'stock_journal_id': fields.Many2One("stock.journal","Default Journal"),
|
2014-12-21 19:43:59 +00:00
|
|
|
'auto_gen': fields.Boolean("Auto Gen"), # HD Case
|
|
|
|
'schd_from': fields.Date("From"),
|
|
|
|
'schd_to': fields.Date("To"),
|
2015-01-16 11:19:49 +00:00
|
|
|
'department_id': fields.Many2One("clinic.department","Department"),
|
|
|
|
'branch_id': fields.Many2One("clinic.branch","Branch"),
|
2015-01-29 15:56:50 +00:00
|
|
|
'shop_categs': fields.Many2Many("product.categ","Categs"),
|
2015-02-04 05:13:10 +00:00
|
|
|
'shop_type_id': fields.Many2One("clinic.patient.type","Patient Type"),
|
2015-02-04 08:51:14 +00:00
|
|
|
"cash_account_id": fields.Many2One("account.account","Cash Account",multi_company=True),
|
|
|
|
"income_account_id": fields.Many2One("account.account","Income Account",multi_company=True),
|
2015-02-04 19:02:44 +00:00
|
|
|
"import_account_id": fields.Many2One("account.account","Import Account",multi_company=True),
|
2015-02-18 08:50:35 +00:00
|
|
|
'helper_categ_id': fields.Many2One("clinic.staff.categ","Helper Category"),
|
|
|
|
'base_salary_day': fields.Float("Base Salary Day"),
|
2014-09-11 03:21:52 +00:00
|
|
|
}
|
2014-10-27 19:01:18 +00:00
|
|
|
|
2014-11-21 16:11:57 +00:00
|
|
|
_defaults={
|
|
|
|
"company_id": lambda *a: get_active_company(),
|
|
|
|
}
|
|
|
|
|
2014-11-25 14:20:30 +00:00
|
|
|
def onchange_line(self,context={}):
|
|
|
|
data=context['data']
|
|
|
|
path=context['path']
|
|
|
|
line=get_data_path(data,path,parent=True)
|
|
|
|
var_a=line['var_a'] or ''
|
|
|
|
var_b=line['var_b'] or ''
|
|
|
|
op=line['op'] or ''
|
|
|
|
line['formular']='%sX%s%s'%(var_a,op,var_b)
|
|
|
|
return data
|
2014-09-11 03:21:52 +00:00
|
|
|
|
2014-11-26 11:22:17 +00:00
|
|
|
def onchange_product(self,context={}):
|
|
|
|
data=context['data']
|
|
|
|
path=context['path']
|
|
|
|
line=get_data_path(data,path,parent=True)
|
|
|
|
product_id=line['product_id']
|
|
|
|
if product_id:
|
|
|
|
prod=get_model("product").browse(product_id)
|
|
|
|
uom=prod.uom_id
|
|
|
|
if not uom:
|
|
|
|
uom=get_model("uom").browse(1)
|
|
|
|
if not uom:
|
|
|
|
raise Exception("Not found uom 'Unit'")
|
|
|
|
line['uom_id']=uom.id
|
|
|
|
line['description']=prod.name
|
2014-11-27 15:14:31 +00:00
|
|
|
price=prod.sale_price or 0.0
|
|
|
|
line['price']=price
|
2014-12-21 02:54:45 +00:00
|
|
|
categ=prod.categ_id
|
|
|
|
if categ:
|
|
|
|
line['product_categ_id']=categ.id
|
2014-12-02 07:08:20 +00:00
|
|
|
qty=1
|
2014-11-27 15:14:31 +00:00
|
|
|
amt=qty*price
|
2014-11-26 11:22:17 +00:00
|
|
|
line['amount']=amt
|
|
|
|
return data
|
|
|
|
|
2015-01-26 11:22:18 +00:00
|
|
|
def onchange_ptype(self,context={}):
|
|
|
|
data=context['data']
|
|
|
|
path=context['path']
|
|
|
|
line=get_data_path(data,path,parent=True)
|
|
|
|
return data
|
|
|
|
|
2014-11-27 15:14:31 +00:00
|
|
|
def onchange_setting_line(self,context={}):
|
|
|
|
data=context['data']
|
|
|
|
path=context['path']
|
|
|
|
line=get_data_path(data,path,parent=True)
|
|
|
|
qty=line['qty'] or 0
|
|
|
|
price=line['price'] or 0
|
|
|
|
amt=qty*price
|
|
|
|
line['amount']=amt
|
|
|
|
return data
|
2014-12-26 02:37:59 +00:00
|
|
|
|
2014-12-21 19:43:59 +00:00
|
|
|
def schd_confirm(self,ids,context={}):
|
|
|
|
obj=self.browse(ids)[0]
|
|
|
|
if not obj.schd_from:
|
|
|
|
raise Exception("No date from")
|
|
|
|
if not obj.schd_to:
|
|
|
|
raise Exception("No date to")
|
|
|
|
dom=[]
|
|
|
|
dom.append(['date', '>=', obj.schd_from])
|
|
|
|
dom.append(['date', '<=', obj.schd_to])
|
|
|
|
for schd in get_model('clinic.schedule').search_browse(dom):
|
|
|
|
schd.confirm()
|
|
|
|
return True
|
2014-12-21 17:24:08 +00:00
|
|
|
|
2014-12-26 02:37:59 +00:00
|
|
|
def run_script(self,ids,context={}):
|
2015-02-25 09:47:20 +00:00
|
|
|
user_id=get_active_user()
|
|
|
|
if user_id !=1:
|
|
|
|
print("Only admin!!")
|
|
|
|
return
|
2015-02-27 16:10:50 +00:00
|
|
|
for citem in get_model("clinic.cycle.item").search_browse([]):
|
|
|
|
for line in citem.lines:
|
|
|
|
nurse=line.nurse_id
|
|
|
|
level=nurse.level_id
|
|
|
|
if not line.level_id:
|
|
|
|
if level:
|
|
|
|
line.write({
|
|
|
|
'level_id': level.id
|
|
|
|
})
|
2015-02-26 06:15:36 +00:00
|
|
|
print("Done!")
|
|
|
|
|
|
|
|
def update_departments(self,ids,context={}):
|
|
|
|
user_id=get_active_user()
|
|
|
|
if user_id !=1:
|
|
|
|
print("Only admin!!")
|
|
|
|
return
|
|
|
|
for st in get_model("clinic.staff").search_browse([]):
|
|
|
|
dpt_ids=set()
|
|
|
|
if st.departmet_id:
|
|
|
|
dpt_ids.update({st.departmet_id.id})
|
|
|
|
if st.type=='doctor':
|
|
|
|
for hdcase in st.hd_case_staffs:
|
|
|
|
dpt_ids.update({hdcase.department_id.id})
|
|
|
|
elif st.type=='nurse':
|
|
|
|
for citem in st.cycle_item_nurses:
|
|
|
|
dpt_ids.update({citem.department_id.id})
|
|
|
|
else:
|
|
|
|
continue
|
|
|
|
#FIXME
|
|
|
|
db=get_connection()
|
|
|
|
for dpt_id in dpt_ids:
|
|
|
|
if not dpt_id:
|
|
|
|
continue
|
|
|
|
sql="insert into m2m_clinic_department_clinic_staff values(%s,%s)"%(st.id, dpt_id)
|
|
|
|
# clinic_staff_id
|
|
|
|
# clinic_department_id
|
|
|
|
db.execute(sql)
|
|
|
|
#st.write({
|
|
|
|
#'departments': {'add': [1]},
|
|
|
|
#})
|
|
|
|
#break
|
|
|
|
print('update dpt %s'%st.name)
|
|
|
|
|
2015-02-25 13:19:50 +00:00
|
|
|
print("Done!")
|
|
|
|
|
|
|
|
def update_staff_contact(self,ids,context={}):
|
|
|
|
user_id=get_active_user()
|
|
|
|
if user_id !=1:
|
|
|
|
print("Only admin!!")
|
|
|
|
return
|
|
|
|
pids=[]
|
|
|
|
for st in get_model("clinic.staff").search_browse([]):
|
|
|
|
code=st.number
|
|
|
|
partner=st.partner_id
|
|
|
|
if partner:
|
|
|
|
partner.write({
|
|
|
|
'code': code,
|
|
|
|
'is_staff': True,
|
|
|
|
})
|
|
|
|
pids.append(partner.id)
|
|
|
|
for pt in get_model("clinic.patient").search_browse([]):
|
|
|
|
code=pt.hn_no or ""
|
|
|
|
partner=pt.partner_id
|
|
|
|
if partner:
|
|
|
|
partner.write({
|
|
|
|
'code': code,
|
|
|
|
'is_patient': True,
|
|
|
|
})
|
|
|
|
pids.append(partner.id)
|
|
|
|
|
|
|
|
for ptype in get_model('clinic.patient.type').search_browse([]):
|
|
|
|
partner=ptype.contact_id
|
|
|
|
if partner:
|
|
|
|
pids.append(partner.id)
|
|
|
|
|
|
|
|
#pids='(%s)'%(','.join([str(x) for x in pids]))
|
|
|
|
db=get_connection()
|
|
|
|
if pids:
|
|
|
|
res=db.query("select id, name from partner where id not in %s", tuple(pids))
|
|
|
|
pids=[r['id'] for r in res]
|
|
|
|
for pt in get_model("partner").browse(pids):
|
|
|
|
pt.write({
|
|
|
|
'active': False,
|
|
|
|
})
|
|
|
|
#for partner in get_model("partner").search_browse([]):
|
|
|
|
#pass
|
|
|
|
|
2015-02-25 09:47:20 +00:00
|
|
|
print("Done!")
|
|
|
|
|
|
|
|
def update_name(self,ids,context={}):
|
2015-02-03 14:09:53 +00:00
|
|
|
user_id=get_active_user()
|
2015-02-03 07:57:06 +00:00
|
|
|
if user_id !=1:
|
|
|
|
print("Only admin!!")
|
|
|
|
return
|
2015-02-25 05:17:58 +00:00
|
|
|
titles=dict([(t.name, t.id) for t in get_model("clinic.name.title").search_browse([])])
|
|
|
|
title_id=None
|
2015-02-25 09:47:20 +00:00
|
|
|
gtitle_id=title_id
|
2015-02-25 05:17:58 +00:00
|
|
|
for name, tid in titles.items():
|
|
|
|
if name=='No Title':
|
|
|
|
gtitle_id=tid
|
|
|
|
for model_name in ('clinic.staff', 'clinic.patient'):
|
|
|
|
for st in get_model(model_name).search_browse([]):
|
|
|
|
name=st.name
|
|
|
|
vals={}
|
|
|
|
if 'นายแพทย์' in name:
|
|
|
|
name=name.replace("นายแพทย์","")
|
|
|
|
tname='นายแพทย์'
|
|
|
|
title_id=titles.get(tname)
|
|
|
|
vals.update({
|
|
|
|
'title_id': title_id,
|
|
|
|
'gender': 'male',
|
|
|
|
})
|
|
|
|
elif 'นพ.' in name:
|
|
|
|
name=name.replace("นพ.","")
|
|
|
|
tname='นพ.'
|
|
|
|
title_id=titles.get(tname)
|
|
|
|
vals.update({
|
|
|
|
'title_id': title_id,
|
|
|
|
'gender': 'male',
|
|
|
|
})
|
|
|
|
elif 'นาย' in name:
|
|
|
|
name=name.replace("นาย","")
|
|
|
|
tname='นาย'
|
|
|
|
title_id=titles.get(tname)
|
|
|
|
vals.update({
|
|
|
|
'title_id': title_id,
|
|
|
|
'gender': 'male',
|
|
|
|
})
|
|
|
|
elif 'พันตำรวจเอก' in name:
|
|
|
|
name=name.replace("พันตำรวจเอก","")
|
|
|
|
tname='พันตำรวจเอก'
|
|
|
|
title_id=titles.get(tname)
|
|
|
|
vals.update({
|
|
|
|
'title_id': title_id,
|
|
|
|
'gender': 'male',
|
|
|
|
})
|
|
|
|
elif 'นางสาว' in name:
|
|
|
|
name=name.replace("นางสาว","")
|
|
|
|
tname='นางสาว'
|
|
|
|
title_id=titles.get(tname)
|
|
|
|
vals.update({
|
|
|
|
'title_id': title_id,
|
|
|
|
'gender': 'female',
|
|
|
|
})
|
|
|
|
elif 'นาง' in name:
|
|
|
|
name=name.replace("นาง","")
|
|
|
|
tname='นาง'
|
|
|
|
title_id=titles.get(tname)
|
|
|
|
vals.update({
|
|
|
|
'title_id': title_id,
|
|
|
|
'gender': 'female',
|
|
|
|
})
|
|
|
|
elif 'น.ส.' in name:
|
|
|
|
name=name.replace("น.ส.","")
|
|
|
|
tname='น.ส.'
|
|
|
|
title_id=titles.get(tname)
|
|
|
|
vals.update({
|
|
|
|
'title_id': title_id,
|
|
|
|
'gender': 'female',
|
|
|
|
})
|
|
|
|
elif 'พญ..' in name:
|
|
|
|
name=name.replace("พญ..","")
|
|
|
|
tname='พญ..'
|
|
|
|
title_id=titles.get(tname)
|
|
|
|
vals.update({
|
|
|
|
'title_id': title_id,
|
|
|
|
'gender': 'female',
|
|
|
|
})
|
|
|
|
elif 'แพทย์หญิง' in name:
|
|
|
|
name=name.replace("แพทย์หญิง","")
|
|
|
|
tname='แพทย์หญิง'
|
|
|
|
title_id=titles.get(tname)
|
|
|
|
vals.update({
|
|
|
|
'title_id': title_id,
|
|
|
|
'gender': 'female',
|
|
|
|
})
|
|
|
|
elif 'ร้อยเอกหญิง' in name:
|
|
|
|
name=name.replace("ร้อยเอกหญิง","")
|
|
|
|
tname='ร้อยเอกหญิง'
|
|
|
|
title_id=titles.get(tname)
|
|
|
|
vals.update({
|
|
|
|
'title_id': title_id,
|
|
|
|
'gender': 'female',
|
|
|
|
})
|
|
|
|
elif 'พันตรีหญิง' in name:
|
|
|
|
name=name.replace("พันตรีหญิง","")
|
|
|
|
tname='พันตรีหญิง'
|
|
|
|
title_id=titles.get(tname)
|
|
|
|
vals.update({
|
|
|
|
'title_id': title_id,
|
|
|
|
'gender': 'female',
|
|
|
|
})
|
|
|
|
elif 'พันตำรวจโทหญิง' in name:
|
|
|
|
name=name.replace("พันตำรวจโทหญิง","")
|
|
|
|
tname='พันตำรวจโทหญิง'
|
|
|
|
title_id=titles.get(tname)
|
|
|
|
vals.update({
|
|
|
|
'title_id': title_id,
|
|
|
|
'gender': 'female',
|
|
|
|
})
|
|
|
|
else:
|
|
|
|
vals.update({
|
|
|
|
'first_name': name, #XXX
|
|
|
|
'title_id': gtitle_id,
|
|
|
|
#'gender': 'male',
|
|
|
|
})
|
|
|
|
names=name.split()
|
|
|
|
names=[n for n in names if n] # skip space
|
|
|
|
if len(names)==2:
|
|
|
|
vals.update({
|
|
|
|
'first_name':names[0],
|
|
|
|
'last_name': names[1],
|
|
|
|
})
|
|
|
|
else:
|
2015-02-25 09:47:20 +00:00
|
|
|
vals.update({
|
|
|
|
'first_name':name,
|
|
|
|
})
|
2015-02-25 05:17:58 +00:00
|
|
|
print(name)
|
|
|
|
st.write(vals)
|
|
|
|
if not st.gender:
|
|
|
|
st.write({
|
|
|
|
'gender': 'male',
|
|
|
|
})
|
2015-02-13 07:46:39 +00:00
|
|
|
print("Done!")
|
2014-11-27 15:14:31 +00:00
|
|
|
|
2015-01-08 08:07:33 +00:00
|
|
|
def reset_last_import(self,ids,context={}):
|
|
|
|
res=get_model("clinic.report.payment.matching").search_read([],['date'],order="date desc")
|
|
|
|
if res:
|
|
|
|
db=get_connection()
|
|
|
|
res1=res[0]
|
|
|
|
date1='%s 00:00:00'%res1['date']
|
|
|
|
date2='%s 23:59:59'%res1['date']
|
|
|
|
exp_ids=[x['id'] for x in db.query("select id from clinic_hd_case_expense where write_time>=%s and write_time<=%s",date1,date2)]
|
|
|
|
for exp in get_model("clinic.hd.case.expense").browse(exp_ids):
|
|
|
|
exp.write({
|
|
|
|
'state': 'waiting_matching',
|
|
|
|
'ok': False,
|
|
|
|
})
|
|
|
|
for inv in exp.invoices:
|
|
|
|
payment=inv.payment_id
|
|
|
|
if payment:
|
|
|
|
if payment.state !='draft':
|
|
|
|
payment.to_draft()
|
|
|
|
print("to draft payment ", payment.id)
|
|
|
|
print("Done")
|
2015-02-03 06:40:48 +00:00
|
|
|
|
2015-02-04 05:13:10 +00:00
|
|
|
def get_product_account(self,ids,prod_id=None,patient_type_id=None,pay_type='credit',context={}):
|
2015-02-03 06:40:48 +00:00
|
|
|
res={}
|
2015-02-04 05:13:10 +00:00
|
|
|
print("find ", prod_id, patient_type_id, pay_type)
|
|
|
|
dom=[['type','=',pay_type]]
|
|
|
|
for ac_prod in get_model("clinic.setting.account.product").search_browse(dom):
|
2015-02-03 06:40:48 +00:00
|
|
|
prod=ac_prod.product_id
|
|
|
|
ptype=ac_prod.patient_type_id
|
2015-02-03 07:57:06 +00:00
|
|
|
if patient_type_id==ptype.id and prod_id==prod.id:
|
2015-02-03 08:37:43 +00:00
|
|
|
print("found !")
|
2015-02-03 06:40:48 +00:00
|
|
|
res.update({
|
|
|
|
'ar_credit_id': ac_prod.ar_credit_id.id,
|
|
|
|
'ar_debit_id': ac_prod.ar_debit_id.id,
|
|
|
|
})
|
|
|
|
break
|
|
|
|
return res
|
2015-01-08 08:07:33 +00:00
|
|
|
|
2014-09-11 03:21:52 +00:00
|
|
|
ClinicSetting.register()
|