get visit
							parent
							
								
									28431a348b
								
							
						
					
					
						commit
						219fb09612
					
				| 
						 | 
					@ -18,5 +18,6 @@
 | 
				
			||||||
    </field>
 | 
					    </field>
 | 
				
			||||||
    <foot>
 | 
					    <foot>
 | 
				
			||||||
        <button string="Generate" type="success" method="gen_visit"/>
 | 
					        <button string="Generate" type="success" method="gen_visit"/>
 | 
				
			||||||
 | 
					        <button string="Clear" type="danger" icon="remove" method="clear_visit"/>
 | 
				
			||||||
    </foot>
 | 
					    </foot>
 | 
				
			||||||
</form>
 | 
					</form>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,4 @@
 | 
				
			||||||
<!--<calendar model="clinic.visit" states='waiting_treatment' date_field="date_visit" colors='{"#090":[["cycle","=",1]],"#2400ff":[["cycle","=",2]],"#ebff00":[["cycle","=",3]],"#f20000":[["cycle","=",4]]}'>-->
 | 
					<calendar model="clinic.visit" states='draft' start_field="time_start" end_field="time_stop" colors='{"#090":[["cycle","=",1]],"#2400ff":[["cycle","=",2]],"orange":[["cycle","=",3]],"#f20000":[["cycle","=",4]]}'>
 | 
				
			||||||
<calendar model="clinic.visit" states='waiting_treatment' start_field="time_start" end_field="time_stop" colors='{"#090":[["cycle","=",1]],"#2400ff":[["cycle","=",2]],"orange":[["cycle","=",3]],"#f20000":[["cycle","=",4]]}'>
 | 
					 | 
				
			||||||
    <field name="patient_id"/>
 | 
					    <field name="patient_id"/>
 | 
				
			||||||
    <field name="cycle_id"/>
 | 
					    <field name="cycle_id"/>
 | 
				
			||||||
    <field name="number"/>
 | 
					    <field name="number"/>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -85,7 +85,7 @@ class GenVisit(Model):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def gen_visit(self,ids,context):
 | 
					    def gen_visit(self,ids,context):
 | 
				
			||||||
        obj=self.browse(ids)[0]
 | 
					        obj=self.browse(ids)[0]
 | 
				
			||||||
        #time_stop=obj.date_to[11:]
 | 
					        visit_obj=get_model('clinic.visit')
 | 
				
			||||||
        days=[
 | 
					        days=[
 | 
				
			||||||
            obj.monday and 1 or 0,
 | 
					            obj.monday and 1 or 0,
 | 
				
			||||||
            obj.tuesday and 2 or 0,
 | 
					            obj.tuesday and 2 or 0,
 | 
				
			||||||
| 
						 | 
					@ -94,17 +94,12 @@ class GenVisit(Model):
 | 
				
			||||||
            obj.friday and 5 or 0,
 | 
					            obj.friday and 5 or 0,
 | 
				
			||||||
            ]
 | 
					            ]
 | 
				
			||||||
        days=[day for day in days if day]
 | 
					        days=[day for day in days if day]
 | 
				
			||||||
        print("days ", days)
 | 
					 | 
				
			||||||
        if not days:
 | 
					        if not days:
 | 
				
			||||||
            raise Exception("Please select Day")
 | 
					            raise Exception("Please select Day")
 | 
				
			||||||
        #duration=datetime.strptime(obj.date_to,FMT_DATETIME)-datetime.strptime(obj.date_from,FMT_DATETIME)
 | 
					 | 
				
			||||||
        # loop patient
 | 
					 | 
				
			||||||
        visit_vals=[]
 | 
					        visit_vals=[]
 | 
				
			||||||
        date_from=datetime.strptime(obj.date_from,FMT_DATETIME)
 | 
					        date_from=datetime.strptime(obj.date_from,FMT_DATETIME)
 | 
				
			||||||
        date_to=datetime.strptime(obj.date_to,FMT_DATETIME)
 | 
					        date_to=datetime.strptime(obj.date_to,FMT_DATETIME)
 | 
				
			||||||
        #total_days=(date_to-date_from).days
 | 
					 | 
				
			||||||
        for line in obj.lines:
 | 
					        for line in obj.lines:
 | 
				
			||||||
            # loop days in weekend
 | 
					 | 
				
			||||||
            ntoday=1
 | 
					            ntoday=1
 | 
				
			||||||
            day_total=(date_to-date_from).days+ntoday
 | 
					            day_total=(date_to-date_from).days+ntoday
 | 
				
			||||||
            for weekday in days:
 | 
					            for weekday in days:
 | 
				
			||||||
| 
						 | 
					@ -114,7 +109,7 @@ class GenVisit(Model):
 | 
				
			||||||
                    start_date+=timedelta(days=1)
 | 
					                    start_date+=timedelta(days=1)
 | 
				
			||||||
                    wd=start_date.weekday()
 | 
					                    wd=start_date.weekday()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                #XXX should gen only in scoop
 | 
					                #XXX should gen only in scope
 | 
				
			||||||
                if start_date.strftime(FMT_DATE) > date_to.strftime(FMT_DATE):
 | 
					                if start_date.strftime(FMT_DATE) > date_to.strftime(FMT_DATE):
 | 
				
			||||||
                    continue
 | 
					                    continue
 | 
				
			||||||
                count=0
 | 
					                count=0
 | 
				
			||||||
| 
						 | 
					@ -131,21 +126,16 @@ class GenVisit(Model):
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    visit_vals.append(vals)
 | 
					                    visit_vals.append(vals)
 | 
				
			||||||
                    count+=7
 | 
					                    count+=7
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    dom=[]
 | 
				
			||||||
 | 
					                    dom.append(['time_start','>=','%s %s'%(tmp.strftime(FMT_DATE)[0:10],' 00:00:00')])
 | 
				
			||||||
 | 
					                    dom.append(['time_stop','<=','%s %s'%(tmp.strftime(FMT_DATE)[0:10],' 23:59:59')])
 | 
				
			||||||
 | 
					                    dom.append(['patient_id', '=', line.patient_id.id])
 | 
				
			||||||
 | 
					                    dom.append(['state','=','draft'])
 | 
				
			||||||
 | 
					                    vids=visit_obj.search(dom)
 | 
				
			||||||
 | 
					                    visit_obj.delete(vids)
 | 
				
			||||||
                start_date=tmp
 | 
					                start_date=tmp
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if visit_vals:
 | 
					 | 
				
			||||||
                dom=[]
 | 
					 | 
				
			||||||
                dom.append(['time_start','>=','%s %s'%(date_from.strftime(FMT_DATE)[0:10],' 00:00:00')])
 | 
					 | 
				
			||||||
                dom.append(['time_stop','<=','%s %s'%(start_date.strftime(FMT_DATE)[0:10],' 23:59:59')])
 | 
					 | 
				
			||||||
                # search patient 
 | 
					 | 
				
			||||||
                dom.append(['state','=','draft'])
 | 
					 | 
				
			||||||
                patient_ids=[visit['patient_id'] for visit in visit_vals]
 | 
					 | 
				
			||||||
                dom.append(['patient_id', 'in', tuple(patient_ids)]) 
 | 
					 | 
				
			||||||
                print("dom ", dom)
 | 
					 | 
				
			||||||
                visit_obj=get_model('clinic.visit')
 | 
					 | 
				
			||||||
                visit_ids=visit_obj.search(dom)
 | 
					 | 
				
			||||||
                # delete old visit (same duration)
 | 
					 | 
				
			||||||
                visit_obj.delete(visit_ids)
 | 
					 | 
				
			||||||
        for vals in visit_vals:
 | 
					        for vals in visit_vals:
 | 
				
			||||||
            visit_obj.create(vals)
 | 
					            visit_obj.create(vals)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -157,5 +147,95 @@ class GenVisit(Model):
 | 
				
			||||||
            'flash': 'Generate OK',
 | 
					            'flash': 'Generate OK',
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def clear_visit(self,ids,context={}):
 | 
				
			||||||
 | 
					        obj=self.browse(ids)[0]
 | 
				
			||||||
 | 
					        days=[
 | 
				
			||||||
 | 
					            obj.monday and 1 or 0,
 | 
				
			||||||
 | 
					            obj.tuesday and 2 or 0,
 | 
				
			||||||
 | 
					            obj.wednesday and 3 or 0,
 | 
				
			||||||
 | 
					            obj.thursday and 4 or 0,
 | 
				
			||||||
 | 
					            obj.friday and 5 or 0,
 | 
				
			||||||
 | 
					            ]
 | 
				
			||||||
 | 
					        days=[day for day in days if day]
 | 
				
			||||||
 | 
					        visit_ids=[]
 | 
				
			||||||
 | 
					        date_from=datetime.strptime(obj.date_from,FMT_DATETIME)
 | 
				
			||||||
 | 
					        date_to=datetime.strptime(obj.date_to,FMT_DATETIME)
 | 
				
			||||||
 | 
					        visit_obj=get_model("clinic.visit")
 | 
				
			||||||
 | 
					        if days:
 | 
				
			||||||
 | 
					            for line in obj.lines:
 | 
				
			||||||
 | 
					                # loop days in weekend
 | 
				
			||||||
 | 
					                ntoday=1
 | 
				
			||||||
 | 
					                day_total=(date_to-date_from).days+ntoday
 | 
				
			||||||
 | 
					                for weekday in days:
 | 
				
			||||||
 | 
					                    wd=date_from.weekday() 
 | 
				
			||||||
 | 
					                    start_date=date_from
 | 
				
			||||||
 | 
					                    while wd != weekday-1:
 | 
				
			||||||
 | 
					                        start_date+=timedelta(days=1)
 | 
				
			||||||
 | 
					                        wd=start_date.weekday()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    #XXX should gen only in scop
 | 
				
			||||||
 | 
					                    if start_date.strftime(FMT_DATE) > date_to.strftime(FMT_DATE):
 | 
				
			||||||
 | 
					                        continue
 | 
				
			||||||
 | 
					                    count=0
 | 
				
			||||||
 | 
					                    while count < day_total:
 | 
				
			||||||
 | 
					                        tmp=start_date+timedelta(days=count)
 | 
				
			||||||
 | 
					                        time_start="%s 00:00:00" % (tmp.strftime(FMT_DATE))
 | 
				
			||||||
 | 
					                        time_stop="%s 23:59:59" % (tmp.strftime(FMT_DATE))
 | 
				
			||||||
 | 
					                        patient_id=line.patient_id.id
 | 
				
			||||||
 | 
					                        dom=[]
 | 
				
			||||||
 | 
					                        dom.append(['time_start','>=','%s'%time_start])
 | 
				
			||||||
 | 
					                        dom.append(['time_stop','<=','%s'%time_stop])
 | 
				
			||||||
 | 
					                        dom.append(['patient_id','=','%s'%patient_id])
 | 
				
			||||||
 | 
					                        dom.append(['state','=','draft'])
 | 
				
			||||||
 | 
					                        count+=7
 | 
				
			||||||
 | 
					                        print(dom)
 | 
				
			||||||
 | 
					                        vids=visit_obj.search(dom)
 | 
				
			||||||
 | 
					                        if vids:
 | 
				
			||||||
 | 
					                            visit_ids.append(vids[0])
 | 
				
			||||||
 | 
					                    start_date=tmp
 | 
				
			||||||
 | 
					            else:
 | 
				
			||||||
 | 
					                time_start=obj.date_from
 | 
				
			||||||
 | 
					                time_stop=obj.date_to
 | 
				
			||||||
 | 
					                for line in obj.lines:
 | 
				
			||||||
 | 
					                    patient_id=line.patient_id.id
 | 
				
			||||||
 | 
					                    dom=[]
 | 
				
			||||||
 | 
					                    dom.append(['time_start','>=','%s'%time_start])
 | 
				
			||||||
 | 
					                    dom.append(['time_stop','<=','%s'%time_stop])
 | 
				
			||||||
 | 
					                    dom.append(['patient_id','=','%s'%patient_id])
 | 
				
			||||||
 | 
					                    dom.append(['state','=','draft'])
 | 
				
			||||||
 | 
					                    vids=visit_obj.search(dom)
 | 
				
			||||||
 | 
					                    if vids:
 | 
				
			||||||
 | 
					                        visit_ids.append(vids[0])
 | 
				
			||||||
 | 
					        if visit_ids:
 | 
				
			||||||
 | 
					            print("visit_ids ", len(visit_ids))
 | 
				
			||||||
 | 
					            get_model("clinic.visit").delete(visit_ids)
 | 
				
			||||||
 | 
					        return {
 | 
				
			||||||
 | 
					            'next': {
 | 
				
			||||||
 | 
					                'name': 'clinic_patient',
 | 
				
			||||||
 | 
					                'mode': 'list',
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            'flash': 'Clear OK',
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def _clear_visit(self,ids,context):
 | 
				
			||||||
 | 
					        obj=self.browse(ids)[0]
 | 
				
			||||||
 | 
					        visit_obj=get_model("clinic.visit")
 | 
				
			||||||
 | 
					        for line in obj.lines:
 | 
				
			||||||
 | 
					            patient_id=line.patient_id
 | 
				
			||||||
 | 
					            dom=[]
 | 
				
			||||||
 | 
					            dom.append(['patient_id','=',patient_id.id])
 | 
				
			||||||
 | 
					            dom.append(['state','=','draft'])
 | 
				
			||||||
 | 
					            # clear
 | 
				
			||||||
 | 
					            # only from to and  day
 | 
				
			||||||
 | 
					            visit_ids=visit_obj.search(dom)
 | 
				
			||||||
 | 
					            visit_obj.delete(visit_ids) 
 | 
				
			||||||
 | 
					        return {
 | 
				
			||||||
 | 
					            'next': {
 | 
				
			||||||
 | 
					                'name': 'clinic_patient',
 | 
				
			||||||
 | 
					                'mode': 'list',
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            'flash': 'Clear OK',
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
GenVisit.register()
 | 
					GenVisit.register()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -199,8 +199,4 @@ class Patient(Model):
 | 
				
			||||||
                vals['partner_id']=partner_id
 | 
					                vals['partner_id']=partner_id
 | 
				
			||||||
        super().write(ids,vals,**kw)
 | 
					        super().write(ids,vals,**kw)
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    def generate_visit(self,ids,context={}):
 | 
					 | 
				
			||||||
        obj=self.browse(ids)[0]
 | 
					 | 
				
			||||||
        pass
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Patient.register()
 | 
					Patient.register()
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,3 +1,5 @@
 | 
				
			||||||
 | 
					===
 | 
				
			||||||
 | 
					    - skip holiday
 | 
				
			||||||
====
 | 
					====
 | 
				
			||||||
    - import data
 | 
					    - import data
 | 
				
			||||||
        - payment
 | 
					        - payment
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue