from netforce.model import Model, fields, get_model from netforce.utils import get_file_path, get_data_path from netforce.access import get_active_company, get_active_user from netforce.database import get_connection class ClinicSetting(Model): _name="clinic.setting" _string="Setting" _fields={ "var_k": fields.Float("K"), 'file': fields.File("File"), 'levels': fields.One2Many("clinic.setting.level","setting_id","Levels"), 'products': fields.One2Many("clinic.setting.product","setting_id","Products"), 'account_products': fields.One2Many("clinic.setting.account.product","setting_id","Account Products"), 'shop_products': fields.One2Many("clinic.setting.shop.product","setting_id","Shop Products"), 'invoice_policies': fields.One2Many("clinic.setting.policy","setting_id","Invoice Policies"), 'cost_per_case': fields.Float("Cost Per Case"), 'company_id': fields.Many2One("company", 'Company'), 'period_id': fields.Many2One("clinic.period","Period"), '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 'imp_patient_type_id': fields.Many2One("clinic.patient.type","Import UC Type"), # Import payment 'find_dlz': fields.Boolean("Find Dialyzer After Confirm Visit"), # Visit 'stock_journal_id': fields.Many2One("stock.journal","Default Journal"), 'auto_gen': fields.Boolean("Auto Gen"), # HD Case 'schd_from': fields.Date("From"), 'schd_to': fields.Date("To"), 'department_id': fields.Many2One("clinic.department","Department"), 'branch_id': fields.Many2One("clinic.branch","Branch"), 'shop_categs': fields.Many2Many("product.categ","Categs"), 'shop_type_id': fields.Many2One("clinic.patient.type","Patient Type"), "cash_account_id": fields.Many2One("account.account","Cash Account",multi_company=True), "income_account_id": fields.Many2One("account.account","Income Account",multi_company=True), "import_account_id": fields.Many2One("account.account","Import Account",multi_company=True), 'helper_categ_id': fields.Many2One("clinic.staff.categ","Helper Category"), 'base_salary_day': fields.Float("Base Salary Day"), } _defaults={ "company_id": lambda *a: get_active_company(), } 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 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 price=prod.sale_price or 0.0 line['price']=price categ=prod.categ_id if categ: line['product_categ_id']=categ.id qty=1 amt=qty*price 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 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 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 def run_script(self,ids,context={}): user_id=get_active_user() if user_id !=1: print("Only admin!!") return #for exp in get_model('clinic.hd.case.expense').search_browse([]): #exp.write({ #'note': ' ', #}) # try to create contact for pt in get_model("clinic.patient").search_browse([]): pt.write({ 'note': ' ', }) #for staff in get_model("clinic.staff").search_browse([]): #staff.write({ #'note': ' ', #}) print("Done!") 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") def get_product_account(self,ids,prod_id=None,patient_type_id=None,pay_type='credit',context={}): res={} 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): prod=ac_prod.product_id ptype=ac_prod.patient_type_id if patient_type_id==ptype.id and prod_id==prod.id: print("found !") res.update({ 'ar_credit_id': ac_prod.ar_credit_id.id, 'ar_debit_id': ac_prod.ar_debit_id.id, }) break return res ClinicSetting.register()