103 lines
4.3 KiB
Python
103 lines
4.3 KiB
Python
from odoo import fields, models, api
|
|
import time
|
|
import datetime
|
|
from odoo.exceptions import UserError
|
|
|
|
|
|
class advance_payment_wizard(models.TransientModel):
|
|
_name = 'advance.payment.wizard'
|
|
_description = 'Advance Payment Detail Wizard'
|
|
|
|
amt = fields.Float('Amount')
|
|
|
|
deposit_recv_acc = fields.Many2one('account.account', string="Deposit Account", required=True)
|
|
journal_id = fields.Many2one('account.journal', "Journal", required=True)
|
|
reservation_id = fields.Many2one('hotel.reservation', 'Reservation Ref', default=lambda self: self._get_default_rec())
|
|
payment_date = fields.Date('Payment Date', required=True)
|
|
|
|
|
|
def _get_default_rec(self):
|
|
res = {}
|
|
# print("context", self._context)
|
|
if self._context is None:
|
|
self._context = {}
|
|
if 'reservation_id' in self._context:
|
|
res = self._context['reservation_id']
|
|
# print(res, "res=====================")
|
|
return res
|
|
|
|
|
|
# @api.multi
|
|
def payment_process(self):
|
|
sum = 0
|
|
remainder = 0
|
|
# print(self._ids, "ids", self._context, "context-------------------------------------------", self.browse(self._ids))
|
|
for obj in self:
|
|
# print('==============obj===========',obj.reservation_id)
|
|
folio_obj = self.env['hotel.folio'].search(
|
|
[('reservation_id', '=', obj.reservation_id.id)])
|
|
# print('===============folio obj=========',folio_obj)
|
|
if folio_obj:
|
|
folio_id = folio_obj[0]
|
|
if folio_id.amount_total < folio_id.total_advance + obj.amt:
|
|
raise UserError("Advance Amount Should not be greater than Total Amount.")
|
|
if not obj.deposit_recv_acc:
|
|
raise UserError("Account is not set for Deposit account.")
|
|
if not obj.journal_id.default_credit_account_id:
|
|
raise UserError("Account is not set for selected journal.")
|
|
name = ''
|
|
seq_obj = self.env['ir.sequence']
|
|
if obj.journal_id.sequence_id:
|
|
name = seq_obj.get_id(obj.journal_id.sequence_id.id)
|
|
|
|
move_id = self.env['account.move'].create({
|
|
'journal_id': obj.journal_id.id,
|
|
'name': name or obj.name,
|
|
'ref': obj.reservation_id.name,
|
|
})
|
|
|
|
move_line1 = {
|
|
|
|
'name': name or obj.name,
|
|
'move_id': move_id,
|
|
'account_id': obj.deposit_recv_acc.id,
|
|
'debit': 0.0,
|
|
'credit': obj.amt,
|
|
'ref': obj.reservation_id.name,
|
|
'journal_id': obj.journal_id.id,
|
|
'partner_id': obj.reservation_id.partner_id.id,
|
|
'date': obj.payment_date
|
|
}
|
|
# print("move_line1====================================================", move_line1)
|
|
move_line2 = {
|
|
'name': name or obj.name,
|
|
'move_id': move_id,
|
|
'account_id': obj.journal_id.default_credit_account_id.id,
|
|
'debit': obj.amt,
|
|
'credit': 0.0,
|
|
'ref': obj.reservation_id.name,
|
|
'journal_id': obj.journal_id.id,
|
|
'partner_id': obj.reservation_id.partner_id.id,
|
|
'date': obj.payment_date
|
|
}
|
|
|
|
move_id.write(
|
|
{'line_ids': [(0, 0, move_line1), (0, 0, move_line2)]})
|
|
move_id.post()
|
|
|
|
if folio_id:
|
|
self._cr.execute('insert into sale_account_move_rel(sale_id,move_id) values (%s,%s)', (folio_id.id, move_id.id))
|
|
result = folio_id
|
|
# print("result====================================================", result)
|
|
sum = result.total_advance + obj.amt
|
|
remainder = folio_id.amount_total - sum
|
|
# print("remainder========================================================", remainder)
|
|
self.env['hotel.folio'].write({'total_advance': sum})
|
|
sale = self.env['sale.order'].search([('id', '=', folio_id.order_id.id)])
|
|
if sale:
|
|
rr = self.env['sale.order'].write({'remaining_amt': remainder})
|
|
sum = 0
|
|
remainder = 0
|
|
return {'type': 'ir.actions.act_window_close'}
|
|
|