matchin payment for SSO
parent
429dcac788
commit
e69cf8a48f
|
@ -10,9 +10,12 @@
|
||||||
<field name="department_id" domain='[["branch_id","=",branch_id]]' span="2"/>
|
<field name="department_id" domain='[["branch_id","=",branch_id]]' span="2"/>
|
||||||
</group>
|
</group>
|
||||||
<separator string="Document Mathing"/>
|
<separator string="Document Mathing"/>
|
||||||
<field name="file_id" span="2"/>
|
|
||||||
<field name="view_type" span="2"/>
|
<field name="view_type" span="2"/>
|
||||||
<field name="patient_type_id" onchange="onchange_ptype" span="2"/>
|
<button string="Copy Invoice To Payment" icon="arrow-right"/>
|
||||||
<field name="pcode" span="2"/>
|
<group form_layout="stacked" attrs='{"invisible":[["view_type","=","invoice"]]}'>
|
||||||
<field name="hcode_id" span="2" attrs='{"required":[["pcode","=","SSO"]],"invisible":[["pcode","!=","SSO"]]}'/>
|
<field name="file_id" span="2"/>
|
||||||
|
<field name="patient_type_id" onchange="onchange_ptype" span="2" attrs='{"required":[["view_type","=","matching"]]}'/>
|
||||||
|
<field name="pcode" span="2" attrs='{"required":[["view_type","=","matching"]]}'/>
|
||||||
|
<field name="hcode_id" span="2" attrs='{"required":[["pcode","=","SSO"]],"invisible":[["pcode","!=","SSO"]]}'/>
|
||||||
|
</group>
|
||||||
</form>
|
</form>
|
||||||
|
|
|
@ -4,10 +4,22 @@ from netforce.model import Model, fields, get_model
|
||||||
|
|
||||||
class AccountInvoice(Model):
|
class AccountInvoice(Model):
|
||||||
_inherit="account.invoice"
|
_inherit="account.invoice"
|
||||||
|
|
||||||
|
def _get_patient(self,ids,context={}):
|
||||||
|
res={}
|
||||||
|
for obj in self.browse(ids):
|
||||||
|
pt_id=None
|
||||||
|
if obj.patient_partner_id:
|
||||||
|
for pt in get_model('clinic.patient').search_browse([['partner_id','=',obj.patient_partner_id.id]]):
|
||||||
|
pt_id=pt.id
|
||||||
|
res[obj.id]=pt_id
|
||||||
|
return res
|
||||||
|
|
||||||
_fields={
|
_fields={
|
||||||
'clinic_expense_id': fields.Many2One("clinic.hd.case.expense","Expense"),
|
'clinic_expense_id': fields.Many2One("clinic.hd.case.expense","Expense"),
|
||||||
'department_id': fields.Many2One("clinic.department","Department",search=True),
|
'department_id': fields.Many2One("clinic.department","Department",search=True),
|
||||||
'patient_partner_id': fields.Many2One("partner","Patient",search=True),
|
'patient_partner_id': fields.Many2One("partner","Partner Patient",search=True),
|
||||||
|
'patient_id': fields.Many2One("clinic.patient","Patient",function="_get_patient", store=True,search=True),
|
||||||
}
|
}
|
||||||
|
|
||||||
def _get_number(self,context={}):
|
def _get_number(self,context={}):
|
||||||
|
@ -280,4 +292,5 @@ class AccountInvoice(Model):
|
||||||
t1=time.time()
|
t1=time.time()
|
||||||
dt=(t1-t0)*1000
|
dt=(t1-t0)*1000
|
||||||
print("invoice.post <<< %d ms"%dt)
|
print("invoice.post <<< %d ms"%dt)
|
||||||
|
|
||||||
AccountInvoice.register()
|
AccountInvoice.register()
|
||||||
|
|
|
@ -22,7 +22,7 @@ class PaymentMatching(Model):
|
||||||
'department_id': fields.Many2One("clinic.department","Department"),
|
'department_id': fields.Many2One("clinic.department","Department"),
|
||||||
'branch_id': fields.Many2One("clinic.branch","Branch"),
|
'branch_id': fields.Many2One("clinic.branch","Branch"),
|
||||||
"inv_state": fields.Selection([("draft","Draft"),("waiting_approval","Waiting Approval"),("waiting_payment","Waiting Payment"),("paid","Paid"),("voided","Voided")],"Status"),
|
"inv_state": fields.Selection([("draft","Draft"),("waiting_approval","Waiting Approval"),("waiting_payment","Waiting Payment"),("paid","Paid"),("voided","Voided")],"Status"),
|
||||||
"view_type": fields.Selection([("invoice","Invoice"),("file","File")],"View Type"),
|
"view_type": fields.Selection([("invoice","Invoice"),("matching","Matching")],"View Type"),
|
||||||
'patient_type_id': fields.Many2One("clinic.patient.type","Patient Type",required=True),
|
'patient_type_id': fields.Many2One("clinic.patient.type","Patient Type",required=True),
|
||||||
'pcode': fields.Char("Code",required=True),
|
'pcode': fields.Char("Code",required=True),
|
||||||
'hcode_id': fields.Many2One("clinic.hospital","HCode"),
|
'hcode_id': fields.Many2One("clinic.hospital","HCode"),
|
||||||
|
@ -129,27 +129,106 @@ class PaymentMatching(Model):
|
||||||
inv_state=obj.inv_state
|
inv_state=obj.inv_state
|
||||||
view_type=obj.view_type
|
view_type=obj.view_type
|
||||||
lines=[]
|
lines=[]
|
||||||
dom=[
|
invoices=[]
|
||||||
['date','>=',date_from],
|
total_match_invoice=0
|
||||||
['date','<=',date_to],
|
total_epo=0
|
||||||
['state','=',inv_state],
|
total_srv=0
|
||||||
]
|
total_fee=0
|
||||||
if branch_id and not department_id:
|
total_amount=0
|
||||||
dom.append(['department_id.branch_id','=',branch_id])
|
def get_invoices():
|
||||||
elif department_id:
|
invoices=[]
|
||||||
dom.append(['department_id','=',department_id])
|
dom=[
|
||||||
if view_type=='invoice':
|
['date','>=',date_from],
|
||||||
field_names=['date','number','amount_due']
|
['date','<=',date_to],
|
||||||
|
['state','=',inv_state],
|
||||||
|
]
|
||||||
|
if branch_id and not department_id:
|
||||||
|
dom.append(['department_id.branch_id','=',branch_id])
|
||||||
|
elif department_id:
|
||||||
|
dom.append(['department_id','=',department_id])
|
||||||
|
field_names=['date','number','amount_due','patient_id']
|
||||||
for inv in get_model('account.invoice').search_read(dom,field_names):
|
for inv in get_model('account.invoice').search_read(dom,field_names):
|
||||||
vals={}
|
vals={
|
||||||
|
'id': inv['id'],
|
||||||
|
'patient_id': None,
|
||||||
|
'patient_name': '',
|
||||||
|
'patient_hn': '',
|
||||||
|
}
|
||||||
for field_name in field_names:
|
for field_name in field_names:
|
||||||
vals[field_name]=inv[field_name],
|
if field_name=='patient_id' and inv['patient_id']:
|
||||||
lines.append(vals)
|
patient=get_model('clinic.patient').browse(inv['patient_id'][0])
|
||||||
|
vals['patient_id']=patient.id
|
||||||
|
vals['patient_name']=patient.name
|
||||||
|
vals['patient_nospace_name']=patient.name_check
|
||||||
|
vals['patient_cid']=patient.card_no
|
||||||
|
vals['patient_hn']=patient.hn
|
||||||
|
else:
|
||||||
|
vals[field_name]=inv[field_name]
|
||||||
|
vals[field_name]=inv[field_name]
|
||||||
|
invoices.append(vals)
|
||||||
|
return invoices
|
||||||
|
if view_type=='invoice':
|
||||||
|
lines=get_invoices()
|
||||||
|
else:
|
||||||
|
if obj:
|
||||||
|
invoices=get_invoices()
|
||||||
|
rlines=obj.get_line()
|
||||||
|
no=1
|
||||||
|
for rline in rlines:
|
||||||
|
date_treatment=rline.get("dttran")
|
||||||
|
date=date_treatment[0:10]
|
||||||
|
time=date_treatment[11:]
|
||||||
|
if not time:
|
||||||
|
continue
|
||||||
|
epo=rline.get('epoadm29') or 0
|
||||||
|
fee=rline.get('amount23') or 0
|
||||||
|
srv=rline.get('allow37') or 0
|
||||||
|
name=rline.get("name14")
|
||||||
|
name_nospace=name.replace(" ","")
|
||||||
|
pid=rline.get('pid')
|
||||||
|
hn=rline.get('hn')
|
||||||
|
hn=''.join([x for x in hn if x.isdigit()])
|
||||||
|
total_fee+=fee
|
||||||
|
total_epo+=epo
|
||||||
|
total_srv+=srv
|
||||||
|
amount=fee+epo+srv
|
||||||
|
total_amount+=amount
|
||||||
|
line_vals={
|
||||||
|
'no': no,
|
||||||
|
'date':date,
|
||||||
|
'patient_name': name,
|
||||||
|
'pid': pid,
|
||||||
|
'hn': hn,
|
||||||
|
'fee': fee,
|
||||||
|
'srv': srv,
|
||||||
|
'epo': epo,
|
||||||
|
'amount': amount,
|
||||||
|
}
|
||||||
|
for item_amt in ['fee','srv','epo']:
|
||||||
|
for inv in invoices:
|
||||||
|
if inv['patient_id']:
|
||||||
|
# check card no first then HN finally patient name
|
||||||
|
if pid==inv['patient_cid'] or hn==inv['patient_hn'] or name_nospace==inv['patient_nospace_name']:
|
||||||
|
inv_amt=inv['amount_due']
|
||||||
|
inv_date=inv['date']
|
||||||
|
if inv_date==date and inv_amt==line_vals[item_amt]:
|
||||||
|
line_vals['inv_%s'%(item_amt)]=inv['number']
|
||||||
|
line_vals['inv_%s_id'%(item_amt)]=inv['id']
|
||||||
|
total_match_invoice+=1
|
||||||
|
break
|
||||||
|
lines.append(line_vals)
|
||||||
|
no+=1
|
||||||
data={
|
data={
|
||||||
'lines': lines,
|
'lines': lines,
|
||||||
'date_from': date_from,
|
'date_from': date_from,
|
||||||
'date_to': date_to,
|
'date_to': date_to,
|
||||||
'total_inv': len(lines),
|
'total_qty': len(lines),
|
||||||
|
'total_fee': total_fee,
|
||||||
|
'total_epo': total_epo,
|
||||||
|
'total_srv': total_srv,
|
||||||
|
'total_match_invoice': total_match_invoice,
|
||||||
|
'total_invoice': len(invoices),
|
||||||
|
'total_amount': total_amount,
|
||||||
'view_type': view_type,
|
'view_type': view_type,
|
||||||
}
|
}
|
||||||
return data
|
return data
|
||||||
|
|
|
@ -1,21 +1,20 @@
|
||||||
<!--
|
<div class="row" style="margin-top:10px;">
|
||||||
<center>
|
<table class="table table-bordered">
|
||||||
<h3>Payment Matching</h3>
|
<thead>
|
||||||
<h4>From {{date_from}} To {{date_to}}</h4>
|
<th style="text-align:center">Total Invoice</th>
|
||||||
</center>
|
<th style="text-align:center">Match</th>
|
||||||
-->
|
</thead>
|
||||||
<div class="row">
|
<tbody>
|
||||||
<div class="col-sm-6">
|
<tr>
|
||||||
</div>
|
<td style="text-align:center">{{currency total_invoice}}</td>
|
||||||
<div class="col-sm-6">
|
<td style="text-align:center">{{currency total_match_invoice}}</td>
|
||||||
<h4>
|
</tr>
|
||||||
<span class="pull-right label label-default">TOTAL: {{currency total_inv}}</span>
|
</tbody>
|
||||||
</h4>
|
</table>
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<table class="table table-hover">
|
<table class="table table-hover">
|
||||||
{{#ifeq view_type 'invoice'}}
|
{{#ifeq view_type 'invoice'}}
|
||||||
<thead>
|
<thead class="scroll-header">
|
||||||
<th>Invoice Date</th>
|
<th>Invoice Date</th>
|
||||||
<th>Number</th>
|
<th>Number</th>
|
||||||
</thead>
|
</thead>
|
||||||
|
@ -33,6 +32,78 @@
|
||||||
<tfoot>
|
<tfoot>
|
||||||
</tfoot>
|
</tfoot>
|
||||||
{{else}}
|
{{else}}
|
||||||
TODO
|
<thead class="scroll-header">
|
||||||
|
<th>No.</th>
|
||||||
|
<th>Date</th>
|
||||||
|
<th>PID</th>
|
||||||
|
<th>HN</th>
|
||||||
|
<th>Patient</th>
|
||||||
|
<th style="text-align:right">Fee</th>
|
||||||
|
<th>Inv Fee</th>
|
||||||
|
<th style="text-align:right">EPO</th>
|
||||||
|
<th>Inv EPO</th>
|
||||||
|
<th style="text-align:right">Service</th>
|
||||||
|
<th>Inv Service</th>
|
||||||
|
<th style="text-align:right">Amount</th>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
{{#if lines}}
|
||||||
|
{{#each lines}}
|
||||||
|
<tr>
|
||||||
|
<td>{{no}}</td>
|
||||||
|
<td style="width:8%">{{date}}</td>
|
||||||
|
<td>{{pid}}</td>
|
||||||
|
<td>{{hn}}</td>
|
||||||
|
<td>{{patient_name}}</td>
|
||||||
|
<td style="text-align:right">{{currency fee}}</td>
|
||||||
|
<td>
|
||||||
|
<a style="text-decoration:None" href="ui#form_view_xml=cust_invoice_form&active_id={{inv_fee_id}}&name=cust_invoice&mode=form" target="_blank">
|
||||||
|
{{#if inv_fee_id}}
|
||||||
|
<span class="label label-info">
|
||||||
|
{{inv_fee}}
|
||||||
|
</span>
|
||||||
|
{{/if}}
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td style="text-align:right">{{currency epo}}</td>
|
||||||
|
<td>
|
||||||
|
<a style="text-decoration:None" href="ui#form_view_xml=cust_invoice_form&active_id={{inv_epo_id}}&name=cust_invoice&mode=form" target="_blank">
|
||||||
|
{{#if inv_epo_id}}
|
||||||
|
<span class="label label-info">
|
||||||
|
{{inv_epo}}
|
||||||
|
</span>
|
||||||
|
{{/if}}
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td style="text-align:right">{{currency srv}}</td>
|
||||||
|
<td>
|
||||||
|
<a href="ui#form_view_xml=cust_invoice_form&active_id={{inv_srv_id}}&name=cust_invoice&mode=form" target="_blank">
|
||||||
|
{{#if inv_srv_id}}
|
||||||
|
<span class="label label-info">
|
||||||
|
{{inv_srv}}
|
||||||
|
</span>
|
||||||
|
{{/if}}
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td style="text-align:right">{{currency amount}}</td>
|
||||||
|
</tr>
|
||||||
|
{{/each}}
|
||||||
|
{{else}}
|
||||||
|
{{/if}}
|
||||||
|
</tbody>
|
||||||
|
<th></th>
|
||||||
|
<th></th>
|
||||||
|
<th></th>
|
||||||
|
<th></th>
|
||||||
|
<th></th>
|
||||||
|
<th style="text-align:right;">{{currency total_fee}}</th>
|
||||||
|
<th></th>
|
||||||
|
<th style="text-align:right;">{{currency total_epo}}</th>
|
||||||
|
<th></th>
|
||||||
|
<th style="text-align:right">{{currency total_srv}}</th>
|
||||||
|
<th></th>
|
||||||
|
<th style="text-align:right">{{currency total_amount}}</th>
|
||||||
|
<tfoot>
|
||||||
|
</tfoot>
|
||||||
{{/ifeq}}
|
{{/ifeq}}
|
||||||
</table>
|
</table>
|
||||||
|
|
Loading…
Reference in New Issue