from netforce.model import Model, fields, get_model class HDCasePayment(Model): _name="clinic.hd.case.payment" _transient=True _fields={ "hd_case_id": fields.Many2One("clinic.hd.case","HdCase",required=True,on_delete="cascade"), "pay_amount": fields.Float("Due Amount"), "to_pay": fields.Float("To Pay"), "complete": fields.Boolean("Mark as full payment for Cash"), } def _get_hd_case_id(self,context={}): hd_case_id=context.get("refer_id") if not hd_case_id: return None return int(hd_case_id) def _get_pay_amount(self,context={}): hd_case_id=context.get("refer_id") hd_case=get_model("clinic.hd.case").browse(hd_case_id) return hd_case.due_amount def _get_topay(self,context={}): hd_case_id=context.get("refer_id") hd_case=get_model("clinic.hd.case").browse(hd_case_id) return hd_case.due_amount _defaults={ 'hd_case_id': _get_hd_case_id, 'pay_amount': _get_pay_amount, 'to_pay': _get_topay, 'complete': True, } def cash(self,ids,context): obj=self.browse(ids)[0] hd_case=get_model("clinic.hd.case").browse(obj.hd_case_id.id) context['amount']=obj.pay_amount or 0.0 context['is_credit']=False hd_case.make_invoices(context=context) #XXX hd_case.post_invoices() if obj.pay_amount: hd_case.make_payment(context=context) if obj.complete: hd_case.create_cycle_item() if obj.pay_amount==hd_case.total_amount: #XXX vals={ 'state': 'paid', } else: vals={ 'state': 'waiting_payment', } hd_case.write(vals) hd_case.do_expense() obj.write({ 'pay_amount': hd_case.amount, }) return { 'next': { 'name': 'clinic_hd_case', 'mode': 'form', 'active_id': hd_case.id, }, 'flash': '%s has been paid'%hd_case.number, } def credit(self,ids,context): obj=self.browse(ids)[0] hd_case=get_model("clinic.hd.case").browse(obj.hd_case_id.id) context['is_credit']=True hd_case.make_invoices(context=context) hd_case.post_invoices() hd_case.create_cycle_item() if obj.pay_amount==obj.to_pay: vals={ 'state': 'paid', } hd_case.write(vals) hd_case.do_expense() return { 'next': { 'name': 'clinic_hd_case', 'mode': 'form', 'active_id': hd_case.id, }, 'flash': '%s has been paid'%hd_case.number, } def onchange_amount(self,context={}): data=context['data'] pay_amount=data['pay_amount'] or 0.0 data['pay_amount']=pay_amount return data HDCasePayment.register()