conv_bal
watcha.h 2014-12-09 14:29:30 +07:00
parent 28d405bf73
commit 35c1f4d516
11 changed files with 150 additions and 25 deletions

View File

@ -20,7 +20,9 @@
</list> </list>
</field> </field>
</tab> </tab>
<tab string="Other"> <tab string="Others">
</tab>
<tab string="Validation">
<field name="user_id"/> <field name="user_id"/>
<field name="cycle_daily_id" domain="[['date','=',date]]"/> <field name="cycle_daily_id" domain="[['date','=',date]]"/>
</tab> </tab>

View File

@ -97,6 +97,7 @@
</list> </list>
</field> </field>
<group span="9" form_layout="stacked"> <group span="9" form_layout="stacked">
<field name="cycle_item_id"/>
</group> </group>
<group span="3" columns="1"> <group span="3" columns="1">
</group> </group>

View File

@ -33,11 +33,12 @@
<field name="total" span="6" offset="6"/> <field name="total" span="6" offset="6"/>
</group> </group>
</tab> </tab>
<tab string="Staff Earning"> <tab string="Nurses">
<field name="lines" nolabel="1"> <field name="nurse_lines" nolabel="1">
<list> <list>
<field name="cycle_id"/> <field name="cycle_id"/>
<field name="staff_id"/> <field name="staff_id" domain="[['type','=','nurse']]"/>
<field name="description"/>
<field name="level_id"/> <field name="level_id"/>
<field name="qty" onchange="onchange_cost_line"/> <field name="qty" onchange="onchange_cost_line"/>
<field name="rate" onchange="onchange_cost_line"/> <field name="rate" onchange="onchange_cost_line"/>
@ -46,13 +47,60 @@
<form> <form>
<field name="cycle_id"/> <field name="cycle_id"/>
<field name="staff_id"/> <field name="staff_id"/>
<field name="description"/>
<field name="level_id"/> <field name="level_id"/>
<field name="qty"/> <field name="qty"/>
<field name="rate"/> <field name="rate"/>
<field name="amount"/> <field name="amount"/>
</form> </form>
</field> </field>
<field name="total_cost" span="3" offset="9"/> <field name="total_ncost" span="3" offset="9"/>
</tab>
<tab string="Doctors">
<field name="doctor_lines" nolabel="1">
<list>
<field name="cycle_id"/>
<field name="staff_id" domain="[['type','=','doctor']]"/>
<field name="description"/>
<field name="level_id"/>
<field name="qty" onchange="onchange_cost_line"/>
<field name="rate" onchange="onchange_cost_line"/>
<field name="amount"/>
</list>
<form>
<field name="cycle_id"/>
<field name="staff_id"/>
<field name="description"/>
<field name="level_id"/>
<field name="qty"/>
<field name="rate"/>
<field name="amount"/>
</form>
</field>
<field name="total_dcost" span="3" offset="9"/>
</tab>
<tab string="Others">
<field name="staff_lines" nolabel="1">
<list>
<field name="cycle_id"/>
<field name="staff_id" domain="[['type','=','staff']]"/>
<field name="description"/>
<field name="level_id"/>
<field name="qty" onchange="onchange_cost_line"/>
<field name="rate" onchange="onchange_cost_line"/>
<field name="amount"/>
</list>
<form>
<field name="cycle_id"/>
<field name="staff_id"/>
<field name="description"/>
<field name="level_id"/>
<field name="qty"/>
<field name="rate"/>
<field name="amount"/>
</form>
</field>
<field name="total_stcost" span="3" offset="9"/>
</tab> </tab>
</tabs> </tabs>
<foot> <foot>

View File

@ -31,6 +31,7 @@ from . import dialyzer
from . import cycle from . import cycle
from . import cycle_item from . import cycle_item
from . import cycle_item_nurse from . import cycle_item_nurse
from . import cycle_item_other
from . import cycle_item_line from . import cycle_item_line
from . import cycle_daily from . import cycle_daily
from . import cycle_daily_line from . import cycle_daily_line

View File

@ -137,12 +137,18 @@ class CycleItem(Model):
schedule_id=None schedule_id=None
if schd_ids: if schd_ids:
schedule_id=schd_ids[0] schedule_id=schd_ids[0]
if not schedule_id:
schedule_id=get_model('clinic.schedule').create({
'date': date,
'time_start': '%s 08:00:00'%date, #XXX
'time_stop': '%s 21:00:00'%date, #XXX
})
return { return {
'next': { 'next': {
'name': 'clinic_schedule', 'name': 'clinic_schedule',
'mode': 'form', 'mode': 'form',
'active_id': schedule_id, 'active_id': schedule_id,
} },
} }
def view_cycle_daily(self,ids,context={}): def view_cycle_daily(self,ids,context={}):

View File

@ -0,0 +1,18 @@
from netforce.model import Model, fields, get_model
from netforce.access import get_active_company
class CycleItemOther(Model):
_name="clinic.cycle.item.other"
_string="Cycle Item Other"
_fields={
'cycle_item_id': fields.Many2One("clinic.cycle.item", "Cycle Item",required=True),
'level_id': fields.Many2One("clinic.staff.level", "Level",),
'staff_id': fields.Many2One("clinic.staff",'Staff'),
}
_defaults={
"company_id": lambda *a: get_active_company(),
}
CycleItemOther.register()

View File

@ -108,7 +108,7 @@ class HDCase(Model):
'note': fields.Text("Note"), 'note': fields.Text("Note"),
'complication': fields.Text("Complication"), 'complication': fields.Text("Complication"),
"cycle_id": fields.Many2One("clinic.cycle","Cycle"), "cycle_id": fields.Many2One("clinic.cycle","Cycle"),
'cycle_item_id': fields.Many2One("clinic.cycle.item","Nurse Schedule"), # on_delete="cascade" -> will rm visit from cycle item 'cycle_item_id': fields.Many2One("clinic.cycle.item","Cycle Item"), # on_delete="cascade" -> will rm visit from cycle item
'pay_amount': fields.Float("Amount",function="_get_pay_amount"), 'pay_amount': fields.Float("Amount",function="_get_pay_amount"),
'pay_date': fields.Date("Pay Date"), 'pay_date': fields.Date("Pay Date"),
'pay_account_id': fields.Many2One("account.account","Account"), 'pay_account_id': fields.Many2One("account.account","Account"),
@ -213,7 +213,13 @@ class HDCase(Model):
data['fee_partner_id']=None data['fee_partner_id']=None
data['patient_type']=patient.type_id.name or "" data['patient_type']=patient.type_id.name or ""
data['dialyzers']=[] data['dialyzers']=[]
doctor=patient.doctor_id
data['staffs']=[] # XXX
data['staffs'].append({
'staff_id': doctor.id,
'type': 'doctor',
'priop': 'owner',
})
return data return data
def onchange_line(self,context={}): def onchange_line(self,context={}):

View File

@ -7,7 +7,7 @@ class HdCaseStaff(Model):
"hd_case_id": fields.Many2One("clinic.hd.case","HdCase",required=True,on_delete="cascade"), "hd_case_id": fields.Many2One("clinic.hd.case","HdCase",required=True,on_delete="cascade"),
"staff_id": fields.Many2One("clinic.staff","Staff",search=True), "staff_id": fields.Many2One("clinic.staff","Staff",search=True),
"type": fields.Selection([("doctor","Doctor"),('nurse','Nurse'),("staff","Staff")],"Type",required=True), "type": fields.Selection([("doctor","Doctor"),('nurse','Nurse'),("staff","Staff")],"Type",required=True),
"priop": fields.Selection([("owner","Owner"),('second','Second')],"Priority"), "priop": fields.Selection([("owner","Owner"),('second','Secondary'),('other','Other')],"Priority"),
'note': fields.Char("Note"), 'note': fields.Char("Note"),
} }

View File

@ -27,9 +27,17 @@ class LaborCost(Model):
if total_a: if total_a:
var_x=eval('(%s%s)/%s'%(var_ptx,total_bstr,total_a)) var_x=eval('(%s%s)/%s'%(var_ptx,total_bstr,total_a))
total_cost=0.0 total_ncost=0.0
for line in obj.lines: for line in obj.nurse_lines:
total_cost+=line.amount or 0.0 total_ncost+=line.amount or 0.0
total_dcost=0.0
for line in obj.doctor_lines:
total_dcost+=line.amount or 0.0
total_stcost=0.0
for line in obj.staff_lines:
total_stcost+=line.amount or 0.0
res[obj.id]={ res[obj.id]={
'var_pt': total_case, 'var_pt': total_case,
@ -39,7 +47,9 @@ class LaborCost(Model):
'var_fml3': '(%s%s)/%s'%(var_ptx,total_bstr,total_a), 'var_fml3': '(%s%s)/%s'%(var_ptx,total_bstr,total_a),
'var_x': round(var_x,2), 'var_x': round(var_x,2),
'total': total, 'total': total,
'total_cost': total_cost, 'total_ncost': total_ncost,
'total_dcost': total_dcost,
'total_stcost': total_stcost,
} }
return res return res
@ -54,11 +64,14 @@ class LaborCost(Model):
'var_fml3': fields.Char("X:",function="_get_all",function_multi=True), 'var_fml3': fields.Char("X:",function="_get_all",function_multi=True),
'var_x': fields.Char("X:",function="_get_all",function_multi=True), 'var_x': fields.Char("X:",function="_get_all",function_multi=True),
'total': fields.Float("Total",function="_get_all",function_multi=True), 'total': fields.Float("Total",function="_get_all",function_multi=True),
'total_cost': fields.Float("Total",function="_get_all",function_multi=True), 'total_ncost': fields.Float("Total",function="_get_all",function_multi=True),
'total_dcost': fields.Float("Total",function="_get_all",function_multi=True),
'total_stcost': fields.Float("Total",function="_get_all",function_multi=True),
'manual': fields.Boolean("Manual"), 'manual': fields.Boolean("Manual"),
"formulars": fields.One2Many("clinic.labor.cost.formular", "labor_cost_id", "Formulars"), "formulars": fields.One2Many("clinic.labor.cost.formular", "labor_cost_id", "Formulars"),
"staffs": fields.One2Many("clinic.labor.cost.staff", "labor_cost_id", "Staffs"), "nurse_lines": fields.One2Many("clinic.labor.cost.line", "labor_cost_id", "Nurse Lines",domain=[['type','=','nurse']]),
"lines": fields.One2Many("clinic.labor.cost.line", "labor_cost_id", "Lines"), "doctor_lines": fields.One2Many("clinic.labor.cost.line", "labor_cost_id", "Doctor Lines",domain=[['type','=','doctor']]),
"staff_lines": fields.One2Many("clinic.labor.cost.line", "labor_cost_id", "staff Lines",domain=[['type','=','staff']]),
'company_id': fields.Many2One("company","Company"), 'company_id': fields.Many2One("company","Company"),
} }
@ -260,10 +273,13 @@ class LaborCost(Model):
if not staff_total.get(staff.id): if not staff_total.get(staff.id):
staff_total[staff.id]={ staff_total[staff.id]={
'base': 0, 'base': 0,
'type': staff.type,
'level_id': staff.level_id.id, 'level_id': staff.level_id.id,
'type': ps.type,
'qty': 0, 'qty': 0,
} }
if staff.type!='doctor':
base=0
staff_total[staff.id]['description']=hd_case.number
staff_total[staff.id]['base']=base staff_total[staff.id]['base']=base
staff_total[staff.id]['qty']+=1 staff_total[staff.id]['qty']+=1
@ -279,10 +295,13 @@ class LaborCost(Model):
'rate': base, 'rate': base,
'qty': qty, 'qty': qty,
'type': type, 'type': type,
'description': value.get('description',"")
})) }))
# clear cost line # clear cost line
for line in obj.lines: for line in obj.nurse_lines:
line.delete()
for line in obj.doctor_lines:
line.delete() line.delete()
# group staff and cycle date # group staff and cycle date
@ -298,16 +317,18 @@ class LaborCost(Model):
if not key in glines.keys(): if not key in glines.keys():
glines[key]={ glines[key]={
'amount': amount, 'amount': amount,
'type': vals['type'],
'level_id': vals['level_id'], 'level_id': vals['level_id'],
'rate': rate, 'rate': rate,
'qty': qty, 'qty': qty,
'type': vals['type'],
'description': vals.get("description",""),
} }
continue continue
glines[key]['amount']+=amount glines[key]['amount']+=amount
glines[key]['qty']+=qty glines[key]['qty']+=qty
lines=[] nurse_lines=[]
doctor_lines=[]
for key,vals in glines.items(): for key,vals in glines.items():
cycle_id,staff_id=key cycle_id,staff_id=key
line={ line={
@ -316,10 +337,15 @@ class LaborCost(Model):
'date': item.date, 'date': item.date,
} }
line.update(vals) line.update(vals)
lines.append(('create',line)) st_type=vals['type']
if st_type=='doctor':
doctor_lines.append(('create',line))
else:
nurse_lines.append(('create',line))
obj.write({ obj.write({
'lines': lines, 'doctor_lines': doctor_lines,
'nurse_lines': nurse_lines,
}) })
return { return {

View File

@ -1,4 +1,4 @@
from netforce.model import Model, fields from netforce.model import Model, fields, get_model
from netforce.access import get_active_company from netforce.access import get_active_company
class LaborCostLine(Model): class LaborCostLine(Model):
@ -8,14 +8,15 @@ class LaborCostLine(Model):
_fields={ _fields={
"labor_cost_id": fields.Many2One("clinic.labor.cost","Cycle Item",required=True), "labor_cost_id": fields.Many2One("clinic.labor.cost","Cycle Item",required=True),
"type": fields.Selection([('staff','Staff'),("doctor","Doctor"),('nurse','Nurse')],"Type",required=True,search=True),
'staff_id': fields.Many2One("clinic.staff", "Staff",search=True), 'staff_id': fields.Many2One("clinic.staff", "Staff",search=True),
'level_id': fields.Many2One("clinic.staff.level", "Level",search=True), 'level_id': fields.Many2One("clinic.staff.level", "Level",search=True),
'cycle_id': fields.Many2One("clinic.cycle", "Cycle",search=True), 'cycle_id': fields.Many2One("clinic.cycle", "Cycle",search=True),
"type": fields.Selection([('staff','Staff'),("doctor","Doctor"),('nurse','Nurse')],"Type",search=True),
'qty': fields.Integer("Qty"), 'qty': fields.Integer("Qty"),
'rate': fields.Float("Rate",scale=2), 'rate': fields.Float("Rate",scale=2),
'amount': fields.Float("Amount",scale=2), 'amount': fields.Float("Amount",scale=2),
'date': fields.Date("Date",search=True), 'date': fields.Date("Date",search=True),
'description': fields.Char("Description"),
'company_id': fields.Many2One('company','Company'), 'company_id': fields.Many2One('company','Company'),
} }
@ -25,4 +26,16 @@ class LaborCostLine(Model):
_order="cycle_id,level_id" _order="cycle_id,level_id"
def create(self,vals,**kw):
staff_id=vals['staff_id']
staff=get_model("clinic.staff").browse(staff_id)
if staff.type=='doctor':
vals['type']='doctor'
elif staff.type=='nurse':
vals['type']='nurse'
else:
vals['type']='staff'
new_id=super().create(vals,**kw)
return new_id
LaborCostLine.register() LaborCostLine.register()

View File

@ -47,10 +47,14 @@ class Schedule(Model):
'user_id': fields.Many2One("base.user","Confirm By"), 'user_id': fields.Many2One("base.user","Confirm By"),
} }
def _get_date(self,context={}):
datenow=datetime.now().strftime("%Y-%m-%d")
return datenow
_defaults={ _defaults={
'user_id': lambda *a: get_active_user(), 'user_id': lambda *a: get_active_user(),
"company_id": lambda *a: get_active_company(), "company_id": lambda *a: get_active_company(),
'date': lambda *a: datetime.now().strftime("%Y-%m-%d"), 'date': _get_date,
'time_start': lambda *a: datetime.now().strftime("%Y-%m-%d %H:%M:%S"), 'time_start': lambda *a: datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
'time_stop': lambda *a: (datetime.now()+timedelta(seconds=3600)).strftime("%Y-%m-%d %H:%M:%S"), 'time_stop': lambda *a: (datetime.now()+timedelta(seconds=3600)).strftime("%Y-%m-%d %H:%M:%S"),
'state': 'draft', 'state': 'draft',