matching payment
parent
7afa9d7840
commit
2e99a673eb
|
@ -5,7 +5,6 @@
|
|||
<item string="Account Patient" action="clinic_setting_account_patient"/>
|
||||
<item string="HD Case Expense" action="clinic_report_account_hd_case_summary"/>
|
||||
<item string="RD Shop Expense" action="clinic_report_account_shop"/>
|
||||
<item string="HD Cases Matching" action="clinic_matching_hdcase_acc"/>
|
||||
<item string="Payment Matching" action="clinic_matching_payment"/>
|
||||
<item string="Payment Invoices" action="clinic_invoice_payment"/>
|
||||
<divider/>
|
||||
|
@ -20,6 +19,7 @@
|
|||
</item>
|
||||
<item string="Matching">
|
||||
<item string="Payment Matching" action="clinic_payment_matching"/>
|
||||
<item string="HD Cases Matching" action="clinic_matching_hdcase_acc"/>
|
||||
</item>
|
||||
</item>
|
||||
<item string="Financial Settings" position="after">
|
||||
|
|
|
@ -40,6 +40,7 @@
|
|||
<list>
|
||||
<field name="hdcase_date"/>
|
||||
<field name="use_time"/>
|
||||
<field name="nurse_id"/>
|
||||
</list>
|
||||
<form>
|
||||
<field name="hd_case_id"/>
|
||||
|
|
|
@ -29,7 +29,7 @@ class Dialyzer(Model):
|
|||
"visit_id": fields.Many2One("clinic.visit","Visit",search=True),
|
||||
"hd_case_id": fields.Many2One("clinic.hd.case","HD Case",search=True),
|
||||
"hd_cases": fields.One2Many("clinic.hd.case","dlz_id","HD Case"), #TODO funtion to get hd case
|
||||
"hd_cases_dlz": fields.One2Many("clinic.hd.case.dialyzer","dialyzer_id","Dialyzer History"),
|
||||
"hd_cases_dlz": fields.One2Many("clinic.hd.case.dialyzer","dialyzer_id","Dialyzer History",domain=[['hd_case_id.state','in','waiting_payment','paid']]),
|
||||
'department_id': fields.Many2One("clinic.department","Department",search=True),
|
||||
"membrane_type": fields.Selection([("unsub","Unsub cellul"),("sub","Sub cellul"),("synthetic","Synthetic")],"Membrane Type"),
|
||||
}
|
||||
|
|
|
@ -895,8 +895,13 @@ class HDCase(Model):
|
|||
# TODO pop to note
|
||||
obj.write({"state":"cancelled"})
|
||||
|
||||
#FIXME should use history to get the last time time and it should drop automatical
|
||||
def update_usetime(self,ids,context={}):
|
||||
datenow=time.strftime("%Y-%m-%d")
|
||||
for obj in self.browse(ids):
|
||||
# in case to draft
|
||||
if obj.date < datenow:
|
||||
continue
|
||||
is_decrease=context.get('is_decrease')
|
||||
for dlz_line in obj.dialyzers:
|
||||
dlz=dlz_line.dialyzer_id
|
||||
|
@ -1050,6 +1055,7 @@ class HDCase(Model):
|
|||
def undo(self,ids,context={}):
|
||||
obj=self.browse(ids)[0]
|
||||
context['is_decrease']=True
|
||||
# in case to draft
|
||||
obj.update_usetime(context=context)
|
||||
for line in obj.lines:
|
||||
line.write({
|
||||
|
|
|
@ -6,9 +6,11 @@ class HDCaseDialyzerLine(Model):
|
|||
def _get_all(self,ids,context={}):
|
||||
res={}
|
||||
for obj in self.browse(ids):
|
||||
hdcase_date=obj.hd_case_id.date
|
||||
hdcase=obj.hd_case_id
|
||||
res[obj.id]={
|
||||
'hdcase_date': hdcase_date,
|
||||
'hdcase_date': hdcase.date,
|
||||
'hdcase_state': hdcase.state,
|
||||
'nurse_id': hdcase.nurse_id.id,
|
||||
}
|
||||
return res
|
||||
|
||||
|
@ -21,6 +23,8 @@ class HDCaseDialyzerLine(Model):
|
|||
"max_use_time":fields.Integer("Max use time"),
|
||||
"membrane_type": fields.Selection([("unsub","Unsub cellul"),("sub","Sub cellul"),("synthetic","Synthetic")],"Membrane Type"),
|
||||
'hdcase_date': fields.Date('Date', function="_get_all",function_multi=True),
|
||||
"hdcase_state": fields.Selection([("draft","Draft"),('waiting_treatment','Waiting Treatment'),("in_progress","In Progress"),("completed","Finish Treatment"),('paid','Paid'),("waiting_payment","Waiting Payment"),("discountinued","Discountinued"),("cancelled","Cancelled")],"Status",required=True,function="_get_all",function_multi=True),
|
||||
'nurse_id': fields.Many2One('clinic.staff', 'Nurse',function="_get_all",function_multi=True),
|
||||
}
|
||||
|
||||
_order="hd_case_id.date desc"
|
||||
|
|
|
@ -11,7 +11,6 @@ class PaymentMatching(Model):
|
|||
_string="Payment Matching"
|
||||
_transient=True
|
||||
|
||||
|
||||
_fields={
|
||||
'name': fields.Char("Name"),
|
||||
"date": fields.Date("Month"),
|
||||
|
@ -26,6 +25,7 @@ class PaymentMatching(Model):
|
|||
'patient_type_id': fields.Many2One("clinic.patient.type","Patient Type",required=True),
|
||||
'pcode': fields.Char("Code",required=True),
|
||||
'hcode_id': fields.Many2One("clinic.hospital","HCode"),
|
||||
'inv_ids': fields.Text("Invoice ids"),
|
||||
}
|
||||
|
||||
def _get_date_from(self,context={}):
|
||||
|
@ -49,18 +49,25 @@ class PaymentMatching(Model):
|
|||
date_from=line.date_start
|
||||
date_to=line.date_stop
|
||||
break
|
||||
tids=get_model('clinic.patient.type').search([['default','=',True]])
|
||||
patient_type_id=None
|
||||
if tids:
|
||||
patient_type_id=tids[0]
|
||||
pcode='SSO'
|
||||
for ptype in get_model('clinic.patient.type').search_read([['default','=',True]],['code']):
|
||||
pcode=ptype['code']
|
||||
patient_type_id=ptype['id']
|
||||
hdcode_id=None
|
||||
for hid in get_model("clinic.hospital").search([]):
|
||||
hdcode_id=hid
|
||||
break
|
||||
res={
|
||||
'period_id': period_id,
|
||||
'date': time.strftime("%Y-%m-%d"),
|
||||
'date_from': date_from,
|
||||
'date_to': date_to,
|
||||
'inv_state': 'waiting_payment',
|
||||
#'inv_state': 'waiting_payment',
|
||||
'view_type': 'invoice',
|
||||
'patient_type_id': patient_type_id,
|
||||
'pcode': pcode,
|
||||
'hcode_id': hdcode_id,
|
||||
}
|
||||
return res
|
||||
|
||||
|
@ -121,6 +128,7 @@ class PaymentMatching(Model):
|
|||
inv_state=defaults.get('inv_state')
|
||||
view_type=defaults.get('view_type')
|
||||
pcode=''
|
||||
obj=None
|
||||
if ids:
|
||||
obj=self.browse(ids)[0]
|
||||
date_from=obj.date_from
|
||||
|
@ -143,13 +151,15 @@ class PaymentMatching(Model):
|
|||
dom=[
|
||||
['date','>=',date_from],
|
||||
['date','<=',date_to],
|
||||
['state','=',inv_state],
|
||||
]
|
||||
if inv_state:
|
||||
dom.append(['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']
|
||||
print('dom ', dom)
|
||||
field_names=['date','number','amount_total','amount_due','patient_id','state']
|
||||
for inv in get_model('account.invoice').search_read(dom,field_names):
|
||||
vals={
|
||||
'id': inv['id'],
|
||||
|
@ -170,6 +180,7 @@ class PaymentMatching(Model):
|
|||
vals[field_name]=inv[field_name]
|
||||
invoices.append(vals)
|
||||
return invoices
|
||||
inv_match_ids=[]
|
||||
if view_type=='invoice':
|
||||
lines=get_invoices()
|
||||
total_invoice=len(lines)
|
||||
|
@ -214,11 +225,15 @@ class PaymentMatching(Model):
|
|||
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_amt=inv['amount_due']
|
||||
inv_amt=inv['amount_total']
|
||||
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']
|
||||
line_vals['inv_%s_state'%(item_amt)]=inv['state']
|
||||
if inv['state']=='waiting_payment':
|
||||
inv_match_ids.append(inv['id'])
|
||||
total_match_invoice+=1
|
||||
break
|
||||
lines.append(line_vals)
|
||||
|
@ -267,6 +282,7 @@ class PaymentMatching(Model):
|
|||
'epo': 0,
|
||||
'inv_id': None,
|
||||
'inv_number': '',
|
||||
'inv_state': '',
|
||||
'no': no,
|
||||
}
|
||||
for inv in invoices:
|
||||
|
@ -275,6 +291,9 @@ class PaymentMatching(Model):
|
|||
if date==inv['date'] and fee==inv['amount_due']:
|
||||
vals['inv_id']=inv['id']
|
||||
vals['inv_number']=inv['number']
|
||||
vals['inv_state']=inv['state']
|
||||
if inv['state']=='waiting_payment':
|
||||
inv_match_ids.append(inv['id'])
|
||||
total_match_invoice+=1
|
||||
break
|
||||
lines.append(vals)
|
||||
|
@ -282,6 +301,10 @@ class PaymentMatching(Model):
|
|||
pc=0
|
||||
if total_invoice:
|
||||
pc=(total_match_invoice/total_invoice)*100
|
||||
if inv_match_ids and obj:
|
||||
obj.write({
|
||||
'inv_ids': str(inv_match_ids),
|
||||
})
|
||||
data={
|
||||
'lines': lines,
|
||||
'date_from': date_from,
|
||||
|
@ -292,7 +315,8 @@ class PaymentMatching(Model):
|
|||
'total_srv': total_srv,
|
||||
'total_invoice': total_invoice,
|
||||
'total_match_invoice': total_match_invoice,
|
||||
'total_match_invoice_in_pc': pc,
|
||||
'pc_match': pc,
|
||||
'pc_unmatch': 100-pc,
|
||||
'total_unmatch_invoice': total_invoice-total_match_invoice,
|
||||
'total_amount': total_amount,
|
||||
'view_type': view_type,
|
||||
|
|
|
@ -1,17 +1,31 @@
|
|||
<div class="row" style="margin-top:10px;">
|
||||
<div class="progress">
|
||||
<div class="progress-bar progress-bar-success" role="progressbar" style="width:{{currency pc_match}}%">
|
||||
{{currency pc_match}}% Match (success)
|
||||
</div>
|
||||
<div class="progress-bar progress-bar-danger" role="progressbar" style="width:{{currency pc_unmatch}}%">
|
||||
{{currency pc_unmatch}}% Un Match (fail)
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<table class="table table-bordered">
|
||||
<thead>
|
||||
<th style="text-align:center">Total Item</th>
|
||||
<th style="text-align:center">Total Invoice</th>
|
||||
<th style="text-align:center">Match</th>
|
||||
<th style="text-align:center">Un Match</th>
|
||||
<th style="text-align:center;width:25%">Total Item Waiting To Matching</th>
|
||||
<th style="text-align:center;width:25%">Total Invoice</th>
|
||||
<th style="text-align:center;width:25%">Match</th>
|
||||
<th style="text-align:center;width:25%">Un Match</th>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="text-align:center">{{currency total_item}}</td>
|
||||
<td style="text-align:center">{{currency total_invoice}}</td>
|
||||
<td style="text-align:center">{{currency total_match_invoice}}</td>
|
||||
<td style="text-align:center">{{currency total_unmatch_invoice}}</td>
|
||||
<td style="text-align:center">
|
||||
{{currency total_match_invoice}}
|
||||
</td>
|
||||
<td style="text-align:center">
|
||||
{{currency total_unmatch_invoice}}
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
@ -65,7 +79,11 @@
|
|||
<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}}
|
||||
{{#ifeq inv_fee_state "paid"}}
|
||||
<span class="label label-success">
|
||||
{{else}}
|
||||
<span class="label label-info">
|
||||
{{/ifeq}}
|
||||
{{inv_fee}}
|
||||
</span>
|
||||
{{/if}}
|
||||
|
|
Loading…
Reference in New Issue