clinic/netforce_clinic/models/setting.py

196 lines
7.5 KiB
Python
Raw Normal View History

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"),
2014-10-27 14:17:22 +00:00
'file': fields.File("File"),
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"),
'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),
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
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-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-04 05:13:10 +00:00
obj=self.browse(1)
2015-02-08 08:48:08 +00:00
categs={}
for ct in get_model("clinic.staff.categ").search_read([['type','=','nurse']],['name']):
categs[ct['name']]=ct['id']
2015-02-04 05:13:10 +00:00
2015-02-08 08:48:08 +00:00
for cline in get_model("clinic.cycle.item.line").search_browse([]):
nr=cline.nurse_id
st=nr.state or ""
if st=='part_time':
st='Part Time'
elif st=='full_time':
st='Full Time'
else:
st='Others'
ct_id=categs.get(st,None)
cline.write({
'categ_id': ct_id,
2015-02-04 05:13:10 +00:00
})
2015-02-08 08:48:08 +00:00
for cline in get_model("clinic.labor.cost.line").search_browse([]):
staff=cline.staff_id
st=staff.state or ""
if st=='part_time':
st='Part Time'
elif st=='full_time':
st='Full Time'
else:
st='Others'
ct_id=categs.get(st,None)
cline.write({
'categ_id': ct_id,
2015-02-04 05:13:10 +00:00
})
2015-02-08 08:48:08 +00:00
for staff in get_model("clinic.staff").search_browse([]):
st=staff.state
if st=='part_time':
st='Part Time'
elif st=='full_time':
st='Full Time'
else:
st='Others'
ct_id=categs.get(st,None)
staff.write({
'categ_id': ct_id,
2015-02-04 08:51:14 +00:00
})
2015-01-22 14:40:10 +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()