hms_bak/hotel_management/wizard/advance_payment_wizard1.py
2024-10-08 01:17:38 +04:00

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'}