clean report

conv_bal
watcha.h 2015-02-20 20:10:40 +07:00
parent 331121f367
commit b53bf0673c
12 changed files with 173 additions and 20 deletions

View File

@ -0,0 +1,11 @@
<action>
<field name="string">Matching Payment Group</field>
<field name="view_cls">multi_view</field>
<field name="model">clinic.matching.payment.group</field>
<field name="menu">account_menu</field>
<field name="tabs">[
["All",[]],
["Draft",[["state","=","draft"]]],
["Approved",[["state","=","approved"]]]
]</field>
</action>

View File

@ -2,20 +2,15 @@
<item string="Settings" position="before">
<item string="Ratchawat">
<item string="Labor Costs" action="clinic_labor_cost"/>
<!--<item string="Labor Cost Entries" action="clinic_labor_cost_entry"/>-->
<item string="Payments Matching" action="clinic_matching_payment"/>
<item string="HD Cases Matching" action="clinic_matching_hdcase_acc"/>
<!--<item string="HD Case Expenses" action="clinic_hd_case_expense"/>-->
<item string="Matching Payments" action="clinic_matching_payment"/>
<item string="Matching Payments (Group)" action="clinic_matching_payment_group"/>
<item string="Mathing HD Cases" action="clinic_matching_hdcase_acc"/>
<divider/>
<header string="REPORTS"/>
<item string="Labor Cost Summary" action="clinic_report_labor_cost_summary"/>
<item string="Labor Cost Detail" action="clinic_report_labor_cost_detail"/>
<item string="Labor Cost Daily" action="clinic_report_labor_cost_daily"/>
<item string="Labor Cost Overtime" action="clinic_report_labor_cost_overtime"/>
<!--<item string="Staff" action="clinic_report_staff"/>-->
<!--<item string="Staff Fee" action="clinic_report_staff_fee"/>-->
<!--<item string="Staff Fee Detail" action="clinic_report_staff_fee_detail"/>-->
<!--<item string="Staff Fee Summary" action="clinic_report_staff_fee_sum"/>-->
<divider/>
<header string="OTHERS"/>
<item string="Ratchawat Settings" action="clinic_account_setting"/>

View File

@ -34,8 +34,8 @@
</group>
<group span="4" columns="1">
<field name="total"/>
<field name="match_total"/>
<field name="unmatch_total"/>
<field name="total_match"/>
<field name="total_unmatch"/>
</group>
<foot replace="1">
<button string="Match" method="do_match" type="success" icon='ok'/>

View File

@ -0,0 +1,26 @@
<form model="clinic.matching.payment.group" attrs='{"readonly":[["state","=","approved"]]}'>
<head>
<field name="state"/>
<button string="Print" action="print" icon="print"/>
<button string="Options" dropdown="1">
</button>
</head>
<field name="name" span="3"/>
<field name="lines" nolabel="1" count="0">
<list>
<field name="matching_id" onchange="onchange_matching"/>
<field name="epo"/>
<field name="srv"/>
<field name="fee"/>
<field name="amount"/>
</list>
</field>
<group span="8" columns="1">
</group>
<group span="4" columns="1">
<field name="total"/>
</group>
<foot>
<button string="Post" method="post" type="success"/>
</foot>
</form>

View File

@ -0,0 +1,4 @@
<list model="clinic.matching.payment.group" colors='{"#cfc":[["state","=","approved"]],"#dbdbdb":[["state","=","cancelled"]]}'>
<field name="name"/>
<field name="state"/>
</list>

View File

@ -103,6 +103,8 @@ from . import make_apt
from . import make_apt_line
from . import matching_payment
from . import matching_payment_line
from . import matching_payment_group
from . import matching_payment_group_line
from . import matching_hdcase
from . import sale_order
from . import shop

View File

@ -16,15 +16,24 @@ class MatchingPayment(Model):
def _get_all(self,ids,context={}):
res={}
for obj in self.browse(ids):
match_total=0
total_match=0
total_fee=0
total_srv=0
total_epo=0
for line in obj.lines:
total_fee+=line.fee or 0
total_srv+=line.srv or 0
total_epo+=line.epo or 0
state=line.state or ''
if state=='match':
match_total+=1
total_match+=1
res[obj.id]={
'total': len(obj.lines),
'match_total': match_total,
'unmatch_total': len(obj.lines)-match_total,
'total_match': total_match,
'total_unmatch': len(obj.lines)-total_match,
'total_fee': total_fee,
'total_srv': total_srv,
'total_epo': total_epo,
}
return res
@ -39,9 +48,12 @@ class MatchingPayment(Model):
'hcode_id': fields.Many2One("clinic.hospital","HCode"),
'lines': fields.One2Many("clinic.matching.payment.line","match_id", "Lines"),
'note': fields.Text("Note"),
'match_total': fields.Integer("Match",function="_get_all",function_multi=True),
'unmatch_total': fields.Integer("Unmatch",function="_get_all",function_multi=True),
'total': fields.Integer("Total",function="_get_all",function_multi=True),
'total_match': fields.Integer("Match",function="_get_all",function_multi=True),
'total_unmatch': fields.Integer("Unmatch",function="_get_all",function_multi=True),
'total_fee': fields.Float("FEE",function="_get_all",function_multi=True),
'total_srv': fields.Float("Service",function="_get_all",function_multi=True),
'total_epo': fields.Float("EPO",function="_get_all",function_multi=True),
'state': fields.Selection([['draft','Draft'],['approved','Approved']],'State'),
}

View File

@ -0,0 +1,66 @@
from netforce.model import Model, fields, get_model
from netforce.utils import get_data_path
class MatchingPaymentGroup(Model):
_name="clinic.matching.payment.group"
_string="Matching Payment Group"
def _get_all(self,ids,context={}):
res={}
for obj in self.browse(ids):
total=0
for line in obj.lines:
matching=line.matching_id
for mline in matching.lines:
total+=mline.fee or 0
total+=mline.srv or 0
total+=mline.epo or 0
res[obj.id]={
'total': total,
}
return res
_fields={
'name': fields.Char("Name",required=True),
'lines': fields.One2Many("clinic.matching.payment.group.line","group_matching_id", "Lines"),
'total': fields.Float("Total",function="_get_all",function_multi=True),
'state': fields.Selection([['draft','Draft'],['approved','Approved']],'State'),
}
_defaults={
'state': 'draft',
}
def post(self,ids,context={}):
for obj in self.browse(ids):
print("%s posted"%(obj.id))
return {
'next': {
'name': 'clinic_matching_payment_group',
'mode': 'form',
'active_id': obj.id,
},
'flash': 'Posted',
}
def update_amount(self,context={}):
data=context['data']
data['total']=0
for line in data['lines']:
data['total']+=line['amount'] or 0
return data
def onchange_matching(self,context={}):
data=context['data']
path=context['path']
line=get_data_path(data,path,parent=True)
matching_id=line['matching_id']
matching=get_model('clinic.matching.payment').browse(matching_id)
line['srv']=matching['total_srv'] or 0
line['epo']=matching['total_epo'] or 0
line['fee']=matching['total_fee'] or 0
line['amount']=line['fee']+line['epo']+line['srv']
data=self.update_amount(context=context)
return data
MatchingPaymentGroup.register()

View File

@ -0,0 +1,28 @@
from netforce.model import Model, fields
class MatchingPaymentGroupLine(Model):
_name="clinic.matching.payment.group.line"
_string="Matching Payment Group Line"
def _get_all(self,ids,context={}):
res={}
for obj in self.browse(ids):
fee=obj.fee or 0
epo=obj.epo or 0
srv=obj.srv or 0
amount=fee+epo+srv
res[obj.id]={
'amount': amount,
}
return res
_fields={
'group_matching_id': fields.Many2One("clinic.matching.payment.group","Group Matching",required=True,on_delete="cascade"),
'matching_id': fields.Many2One("clinic.matching.payment","Group Matching"),
'fee': fields.Float("Fee"),
'srv': fields.Float("Service"),
'epo': fields.Float("EPO"),
'amount': fields.Float("Amount", function="_get_all", function_multi=True),
}
MatchingPaymentGroupLine.register()

View File

@ -167,6 +167,15 @@ class ReportMedicalSummary(Model):
company=get_model('company').browse(company_id)
month_str=utils.MONTHS['th_TH'][int(month)]
# remove zero
for line in lines:
#st=""
for sline in line['sub_lines']:
qty=sline['qty']
if not qty:
sline['qty']=''
#st+="%s"%(qty)
#print(st)
lines=sorted(lines, key=lambda x: x['prod_name'])
year=int(year)+543

View File

@ -132,7 +132,7 @@
</b>
</center>
</span>
<table class="table">
<table class="table table-bordered">
<thead>
{{#each titles}}
<th>{{name}}</th>
@ -141,7 +141,7 @@
<tbody>
{{#each medicals}}
<tr>
<td>
<td style="width:20%;">
<a href="/ui#name=product&active_id={{prod_id}}&mode=form"> {{prod_name}} </a>
</td>
{{#each sub_lines}}

View File

@ -7,7 +7,7 @@
ประจำเดือน {{month}} {{year}}
</h4>
</center>
<table class="table">
<table class="table table-bordered">
<thead>
{{#each titles}}
<th>{{name}}</th>
@ -16,7 +16,7 @@
<tbody>
{{#each lines}}
<tr>
<td>
<td style="width:20%;">
<a href="/ui#name=product&active_id={{prod_id}}&mode=form"> {{prod_name}} </a>
</td>
{{#each sub_lines}}