clinic/netforce_clinic/models/account_payment.py

153 lines
5.5 KiB
Python
Raw Normal View History

2014-10-23 08:21:29 +00:00
from netforce.model import Model, fields, get_model
class AccountPayment(Model):
_inherit="account.payment"
2015-02-04 14:10:41 +00:00
_fields={
'rd_cust': fields.Boolean("RD Customize"),
}
2014-10-23 08:21:29 +00:00
def run_report(self,ids,context={}):
obj=self.browse(ids)[0]
hd_case_id=obj.related_id.id
hd_case=get_model("clinic.hd.case").browse(hd_case_id)
# TODO
# set payment_id on hd case
# send to action print form payment
hd_case.write({
'payment_id': obj.id,
})
return {
'next': {
'name': 'report_clinic_payment_form',
'refer_id': hd_case_id,
'payment_id': obj.id,
},
}
2014-12-21 18:00:54 +00:00
def import_payment(self,ids,context={}):
if not ids:
raise Exception("Please save payment before import")
print("xx ", ids)
return {
'next': {
'name': 'clinic_import_uc',
'refer_id': ids[0], #XXX
}
}
2015-02-04 14:10:41 +00:00
def post(self,ids,context={}):
obj=self.browse(ids)[0]
res=None
if obj.rd_cust:
res={}
print("RD Customize")
desc="Recieved %s"%obj.partner_id.name
for ivline in obj.invoice_lines:
invoice=ivline.invoice_id
partner_id=invoice.partner_id.id
for mline in invoice.move_id.lines:
if mline.debit>0:
amt=mline.debit or 0
account_id=mline.account_id.id
if not res.get(account_id):
res[account_id]={
'credit': 0,
'debit': 0,
'description': desc,
'partner_id': partner_id
}
res[account_id]['credit']+=amt
settings=get_model("settings").browse(1)
if obj.type=="in":
journal_id=obj.journal_id.id or settings.pay_in_journal_id.id
if not journal_id:
raise Exception("Receipts journal not found")
elif obj.type=="out":
journal_id=obj.journal_id.id or settings.pay_out_journal_id.id
if not journal_id:
raise Exception("Disbursements journal not found")
if not obj.number:
raise Exception("Missing payment number")
move_vals={
"journal_id": journal_id,
"number": obj.number,
"date": obj.date,
"narration": desc,
"related_id": "account.payment,%s"%obj.id,
"company_id": obj.company_id.id,
}
move_id=get_model("account.move").create(move_vals)
track_id=None
for line in obj.lines: # XXX
if line.track_id:
if track_id:
track_id=None
break
else:
track_id=line.track_id.id
lines1=[]
lines1.append(('create',{
"move_id": move_id,
"account_id": obj.account_id.id,
"description": desc,
"track_id": track_id,
'debit': 0,
'credit':0,
}))
lines2=[]
for account_id, rvals in res.items():
amt=rvals['credit'] or 0
lines1[0][1]['debit']+=amt #XXX
lines2.append(('create',{
"move_id": move_id,
"account_id": account_id,
"description": rvals['description'],
'partner_id': rvals['partner_id'],
'debit': rvals['debit'],
'credit': rvals['credit'],
"track_id": track_id,
}))
2015-02-08 08:48:08 +00:00
if obj.type=="in":
rate_type="sell"
else:
rate_type="buy"
adjust_lines=[]
adjust_amt=0
for jline in obj.adjust_lines:
cur_amt=get_model("currency").convert(line.amount,obj.currency_id.id,settings.currency_id.id,date=obj.date,rate_type=rate_type)
tax_base=get_model("currency").convert(line.tax_base or 0,obj.currency_id.id,settings.currency_id.id,date=obj.date,rate_type=rate_type)
cur_amt=abs(cur_amt)
adjust_lines.append(('create',{
"move_id": move_id,
"description": desc,
"account_id": line.account_id.id,
"tax_comp_id": line.tax_comp_id.id,
"tax_base": tax_base,
"track_id": line.track_id.id,
"partner_id": obj.partner_id.id,
"credit":0,
"debit": cur_amt,
}))
#XXX
adjust_amt+=cur_amt
lines1[0][1]['debit']-=cur_amt
lines=lines1+adjust_lines+lines2 #debit, debit, credit
2015-02-04 14:10:41 +00:00
move=get_model("account.move").browse(move_id)
move.write({
'lines': lines,
})
move.post()
obj.write({
'move_id': move.id,
'state': 'posted',
})
print("Done!")
else:
res=super().post(ids,context=context)
return res
2014-12-21 18:00:54 +00:00
2014-10-23 08:21:29 +00:00
AccountPayment.register()