prevent duplicate staff
parent
173c8e599e
commit
1c16736a0f
|
@ -74,15 +74,31 @@
|
|||
<field name="hd_case_id"/>
|
||||
</form>
|
||||
</field>
|
||||
<field name="cycle_item_nurses" readonly="1" attrs='{"invisible":[["type","=","doctor"]]}'>
|
||||
<list>
|
||||
<field name="cycle_item_lines" readonly="1" attrs='{"invisible":[["type","=","doctor"]]}'>
|
||||
<list colors='{"#9f9":[["cstate","=","validated"]]}'>
|
||||
<field name="cycle_item_id"/>
|
||||
<field name="pt_total"/>
|
||||
<field name="cstate"/>
|
||||
</list>
|
||||
<form>
|
||||
<field name="cycle_item_id"/>
|
||||
<field name="cycle_item_id" readonly="1"/>
|
||||
<field name="cstate"/>
|
||||
</form>
|
||||
</field>
|
||||
<field name="patients" readonly="1"/>
|
||||
<!--<field name="patients">-->
|
||||
<field name="patients" attrs='{"readonly":1,"invisible":[["type","in",["nurse","staff"]]]}'>
|
||||
<list>
|
||||
<field name="reg_date"/>
|
||||
<field name="hn_no"/>
|
||||
<field name="trt_no"/>
|
||||
<field name="card_no"/>
|
||||
<field name="name"/>
|
||||
<field name="type_id"/>
|
||||
<field name="department_id"/>
|
||||
<field name="walkin"/>
|
||||
<field name="dispose"/>
|
||||
</list>
|
||||
</field>
|
||||
<field name="comments"/>
|
||||
</related>
|
||||
</form>
|
||||
|
|
|
@ -4,12 +4,25 @@ class CycleItemLine(Model):
|
|||
_name="clinic.cycle.item.line"
|
||||
_string="Cycle Item Nurse"
|
||||
|
||||
def _get_all(self,ids,context={}):
|
||||
res={}
|
||||
for obj in self.browse(ids):
|
||||
citem=obj.cycle_item_id
|
||||
pt_total=len([hdcase for hdcase in citem.hd_cases if hdcase.state in ('waiting_payment','paid')])
|
||||
res[obj.id]={
|
||||
'cstate': citem.state,
|
||||
'pt_total': pt_total,
|
||||
}
|
||||
return res
|
||||
|
||||
_fields={
|
||||
'cycle_item_id': fields.Many2One("clinic.cycle.item", "Cycle Item"),
|
||||
'level_id': fields.Many2One("clinic.staff.level", "Level",),
|
||||
'nurse_id': fields.Many2One("clinic.staff",'Nurse',domain=[['type','=','nurse']]),
|
||||
'department_id': fields.Many2One("clinic.department","Department"),
|
||||
"state": fields.Selection([["part_time","Part Time"],["full_time","Full Time"]],"Working Status",search=True),
|
||||
"cstate": fields.Selection([("draft","Draft"),('pending','Pending'),("validated","Validated")],"Status",function="_get_all",function_multi=True),
|
||||
"pt_total": fields.Integer("Patients",function="_get_all",function_multi=True),
|
||||
'categ_id': fields.Many2One("clinic.staff.categ",'Category',domain=[['type','=','nurse']]),
|
||||
}
|
||||
|
||||
|
|
|
@ -40,6 +40,8 @@ class ReportLaborCostSummary(Model):
|
|||
branch_id=defaults.get("branch_id")
|
||||
categ_id=defaults.get("categ_id")
|
||||
cycle_id=defaults.get("cycle_id")
|
||||
if cycle_id:
|
||||
cycle_id=int(cycle_id)
|
||||
if categ_id:
|
||||
categ_id=int(categ_id)
|
||||
if branch_id:
|
||||
|
@ -63,9 +65,9 @@ class ReportLaborCostSummary(Model):
|
|||
'department_id': department_id or None,
|
||||
'branch_id': branch_id or None,
|
||||
'only_value': True,
|
||||
'categ_id': categ_id,
|
||||
'level_id': level_id,
|
||||
'cycle_id': cycle_id,
|
||||
'categ_id': categ_id or None,
|
||||
'level_id': level_id or None,
|
||||
'cycle_id': cycle_id or None,
|
||||
}
|
||||
print('res ', res)
|
||||
return res
|
||||
|
@ -113,8 +115,9 @@ class ReportLaborCostSummary(Model):
|
|||
dom.append(['labor_cost_id.cycle_item_id.cycle_id','=',cycle_id])
|
||||
staffs={}
|
||||
citems={}
|
||||
print('>> dom: ', dom)
|
||||
print('--> dom: ', dom)
|
||||
total_hdcase=0
|
||||
|
||||
for line in get_model("clinic.labor.cost.line").search_browse(dom):
|
||||
lcost=line.labor_cost_id
|
||||
citem=lcost.cycle_item_id
|
||||
|
|
|
@ -161,16 +161,107 @@ class ClinicSetting(Model):
|
|||
if user_id !=1:
|
||||
print("Only admin!!")
|
||||
return
|
||||
#path='/tmp/test'
|
||||
#self.update_pcycle(path,['ls1.csv','ls2.csv','ls3.csv'])
|
||||
pts={}
|
||||
for pt in get_model("clinic.patient").search_browse([]):
|
||||
name='%s %s'%(pt.first_name or "", pt.last_name or "")
|
||||
if not pts.get(name):
|
||||
pts[name]=[]
|
||||
pts[name].append({
|
||||
'id': pt.id,
|
||||
'name': name,
|
||||
'date': pt.reg_date,
|
||||
'branch_id': pt.department_id.id,
|
||||
})
|
||||
sts={}
|
||||
for st in get_model("clinic.staff").search_browse([]):
|
||||
name='%s %s'%(st.first_name or '', st.last_name or '')
|
||||
if not sts.get(name):
|
||||
sts[name]=[]
|
||||
sts[name].append({
|
||||
'id': st.id,
|
||||
'name': name,
|
||||
'branch_id': st.department_id.id,
|
||||
'type': st.type,
|
||||
'date': st.date,
|
||||
})
|
||||
|
||||
print('='*50, 'staffs duplicate')
|
||||
for st, vals in sts.items():
|
||||
vals=sorted(vals,key=lambda x: x['date'])
|
||||
count=len(vals)
|
||||
if count > 1:
|
||||
print("z"*50)
|
||||
id_lines=[]
|
||||
no=0
|
||||
for val in vals:
|
||||
no+=1
|
||||
staff_id=val['id']
|
||||
staff_type=val['type']
|
||||
if staff_type=='nurse':
|
||||
res=get_model("clinic.cycle.item.line").search_browse([['nurse_id','=',staff_id]])
|
||||
if len(res)<=0:
|
||||
print('nurse zero delete ', st)
|
||||
get_model('clinic.staff').delete([staff_id])
|
||||
else:
|
||||
print('merge nurse... ', st, staff_id, val['date'], val['branch_id'], len(res))
|
||||
print('no ', no, len(vals), len(res))
|
||||
if no==len(vals):
|
||||
print("--> ", staff_id, id_lines)
|
||||
for id_line in id_lines:
|
||||
for rec in get_model("clinic.cycle.item.line").search_browse([['nurse_id','=',id_line]]):
|
||||
rec.write({
|
||||
'nurse_id': staff_id,
|
||||
})
|
||||
dom=[
|
||||
['type','=','nurse'],
|
||||
['staff_id','=',id_line],
|
||||
]
|
||||
for lcost in get_model("clinic.labor.cost.line").search_browse(dom):
|
||||
lcost.write({
|
||||
'staff_id': staff_id,
|
||||
})
|
||||
id_lines.append(staff_id)
|
||||
elif staff_type=='doctor':
|
||||
res=get_model("clinic.hd.case.staff").search_browse([['staff_id','=',staff_id]])
|
||||
if len(res)<=0:
|
||||
print('doctor zero delete ', st)
|
||||
get_model('clinic.staff').delete([staff_id])
|
||||
else:
|
||||
print('merge doctor... ', st, staff_id, val['date'], val['branch_id'], len(res))
|
||||
if no==len(vals):
|
||||
print("--> ", staff_id, id_lines)
|
||||
db=get_connection()
|
||||
for id_line in id_lines:
|
||||
for rec in get_model("clinic.hd.case.staff").search_browse([['staff_id','=',id_line]]):
|
||||
rec.write({
|
||||
'staff_id': staff_id,
|
||||
})
|
||||
hdcase=rec.hd_case_id
|
||||
vs=hdcase.visit_id
|
||||
#vs.write({
|
||||
#'doctor_id': staff_id,
|
||||
#})
|
||||
db.execute("update clinic_visit set doctor_id=%s where id=%s",staff_id,vs.id)
|
||||
pt=hdcase.patient_id
|
||||
#pt.write({
|
||||
#'doctor_id': staff_id,
|
||||
#})
|
||||
db.execute("update clinic_patient set doctor_id=%s where id=%s",staff_id,pt.id)
|
||||
citem=hdcase.cycle_item_id
|
||||
dom=[
|
||||
['type','=','doctor'],
|
||||
['staff_id','=',id_line],
|
||||
['labor_cost_id.cycle_item_id','=',citem.id],
|
||||
]
|
||||
for lcost in get_model("clinic.labor.cost.line").search_browse(dom):
|
||||
lcost.write({
|
||||
'staff_id': staff_id,
|
||||
})
|
||||
id_lines.append(staff_id)
|
||||
print("z"*50)
|
||||
###TODO remove douplicate patient
|
||||
###TODO remove douplicate staff
|
||||
###TODO remove douplicate visit
|
||||
obj=self.browse(ids)[0]
|
||||
for ap_line in obj.account_patients:
|
||||
pt=ap_line.patient_id
|
||||
if not pt:
|
||||
ap_line.delete()
|
||||
print("Done!")
|
||||
|
||||
def multi_department(self,ids,context={}):
|
||||
|
|
|
@ -108,6 +108,22 @@ class Staff(Model):
|
|||
res[obj.id]=','.join([dpt.name for dpt in obj.departments])
|
||||
set_active_user(user_id)
|
||||
return res
|
||||
|
||||
def _get_all(self,ids,context={}):
|
||||
res={}
|
||||
for obj in self.browse(ids):
|
||||
pt_ids=[]
|
||||
if obj.type=='doctor':
|
||||
pt_ids=get_model("clinic.patient").search([['doctor_id','=',obj.id]])
|
||||
elif obj.type=='nurse':
|
||||
p=set()
|
||||
for cline in obj.cycle_item_lines:
|
||||
citem=cline.cycle_item_id
|
||||
for hdcase in citem.hd_cases:
|
||||
p.update({hdcase.patient_id.id})
|
||||
pt_ids=list(p)
|
||||
res[obj.id]=pt_ids
|
||||
return res
|
||||
|
||||
_fields={
|
||||
'employee_id': fields.Many2One("hr.employee","Employee"),
|
||||
|
@ -135,7 +151,8 @@ class Staff(Model):
|
|||
"prof_license_expiry" : fields.Date("Expired License"),
|
||||
"birthday": fields.Date("BirthDay",search=True),
|
||||
"department_id": fields.Many2One("clinic.department", "Department",search=True),
|
||||
"patients": fields.One2Many("clinic.patient","doctor_id","Patients"),
|
||||
#"patients": fields.One2Many("clinic.patient","doctor_id","Patients"),
|
||||
"patients": fields.Many2Many("clinic.patient","Patients",function="_get_all"),
|
||||
"addresses": fields.One2Many("address","staff_id","Addresses"),
|
||||
"comments": fields.One2Many("message","related_id","Comments"),
|
||||
"nurse_visits": fields.One2Many("clinic.visit","nurse_id","Visits"),
|
||||
|
@ -160,7 +177,7 @@ class Staff(Model):
|
|||
'cycle_id': fields.Many2One('clinic.cycle','Last Cycle',function="_get_cycle"),
|
||||
"hd_case_staffs": fields.One2Many("clinic.hd.case.staff","staff_id","HD Cases"),
|
||||
"hd_cases": fields.Many2Many("clinic.hd.case","HD Cases",function="_get_hdcase"), # not need to use (it's slow to load)
|
||||
"cycle_item_nurses": fields.One2Many("clinic.cycle.item.line","nurse_id","Cycle Items"),
|
||||
"cycle_item_lines": fields.One2Many("clinic.cycle.item.line","nurse_id","Cycle Items"),
|
||||
'branch_id': fields.Many2One("clinic.branch","Branch", search=True),
|
||||
"partner_id": fields.Many2One("partner","Contact"),
|
||||
'departments': fields.Many2Many("clinic.department","Departments"),
|
||||
|
|
|
@ -1,6 +1,15 @@
|
|||
> script:
|
||||
merge staff, patient
|
||||
source => destination
|
||||
- step:
|
||||
> patient:
|
||||
1. copy:
|
||||
- properties
|
||||
- visit
|
||||
- hdcases
|
||||
- dialyzers
|
||||
2. delete old one
|
||||
> staff:
|
||||
|
||||
> invoice payment on rd shop
|
||||
|
||||
> report:
|
||||
improve cycle item report
|
||||
|
|
Loading…
Reference in New Issue