from datetime import datetime, timedelta from netforce.model import Model, fields, get_model from netforce.access import get_active_user DRT=0 class VisitPopupConfirm(Model): _name="clinic.popup.visit.confirm" _transient=True _fields={ "visitboard_id": fields.Many2One("clinic.visit.board","Visit Board",required=True,on_delete="cascade"), 'user_id': fields.Many2One("base.user","User"), "note": fields.Text("Note"), 'lines': fields.One2Many("clinic.popup.visit.confirm.line","popup_visit_id",'Lines'), 'no_dlz': fields.Boolean("No Dialyzer"), 'random_sickbed': fields.Boolean("Random Sickbed"), } def _get_visitboard_id(self,context={}): visitboard_id=context.get("refer_id") if not visitboard_id: return None return int(visitboard_id) def _get_default_lines(self,context={}): visitboard_id=context.get("refer_id") if not visitboard_id: return [] return self._get_lines(int(visitboard_id)) def _get_lines(self,visitboard_id=None): lines=[] if not visitboard_id: return lines board=get_model("clinic.visit.board").browse(visitboard_id) date_from=datetime.now().strftime("%Y-%m-%d") date_to=(datetime.now()+timedelta(days=DRT)).strftime("%Y-%m-%d") date_from=board.date_from date_to=board.date_to patient_id=board.patient_id.id cycle_id=board.cycle_id.id doctor_id=board.doctor_id.id department_id=board.department_id.id branch_id=board.branch_id.id time_start='%s 00:00:00'%(date_from) time_stop='%s 23:59:59'%(date_to) dom=[] dom.append(['time_start','>=','%s'%time_start]) dom.append(['time_stop','<=','%s'%time_stop]) dom.append(['state','in',['pending']]) if patient_id: dom.append(['patient_id','=',patient_id]) if cycle_id: dom.append(['cycle_id','=',cycle_id]) if doctor_id: dom.append(['doctor_id','=',doctor_id]) if department_id: dom.append(['department_id','=',department_id]) if branch_id: dom.append(['branch_id','=',branch_id]) for visit in get_model("clinic.visit").search_browse(dom): cycle=visit.cycle_id patient=visit.patient_id department=visit.department_id doctor=visit.doctor_id vals={ 'patient_id': patient.id, 'cycle_id': cycle.id, 'department_id': department.id, 'visit_id': visit.id, } if doctor: vals['doctor_id']=doctor.id lines.append(vals) return lines _defaults={ 'visitboard_id': _get_visitboard_id, 'user_id': lambda *a: get_active_user(), 'lines': _get_default_lines, } def confirm(self,ids,context={}): obj=self.browse(ids)[0] board=obj.visitboard_id count=0 user_id=get_active_user() nurse_ids=get_model("clinic.staff").search([['user_id','=',user_id],['type','=','nurse']]) vals={} if nurse_ids: vals['nurse_id']=nurse_ids[0] context['no_dlz']=obj.no_dlz context['random_sickbed']=obj.random_sickbed for line in obj.lines: vs=line.visit_id dt=line.doctor_id if dt: vals['doctor_id']=dt.id vs.write(vals) vs.confirm(context) count+=1 return { 'next': { 'name': 'clinic_visit_board', 'mode': 'form', 'active_id': board.id, }, 'flash': 'Total confirmed is %s'%count, } VisitPopupConfirm.register()