105 lines
4.6 KiB
Python
105 lines
4.6 KiB
Python
from odoo import fields, models, api
|
|
import pytz
|
|
from odoo.exceptions import ValidationError, UserError
|
|
import datetime
|
|
|
|
|
|
class folio_invoice_transfer_wizard(models.TransientModel):
|
|
_name = 'folio.invoice.transfer.wizard'
|
|
_description = 'Folio invoice transfer Wizard'
|
|
|
|
folio_id = fields.Many2one(
|
|
'hotel.folio', 'Folio Ref', default=lambda self: self._get_default_rec())
|
|
trans_folio_id = fields.Many2one(
|
|
'hotel.folio', 'Transfer Folio Ref', domain="[('state', 'not in', ['check_out','done','cancel'])]",)
|
|
|
|
def _get_default_rec(self):
|
|
res = {}
|
|
if 'by_dashbord' in self._context and self._context.get('by_dashbord'):
|
|
hotel_folio_id = self.env['hotel.folio'].search(
|
|
[('reservation_id', '=', self._context['active_id'])])
|
|
if hotel_folio_id:
|
|
res = hotel_folio_id.id
|
|
return res
|
|
if self._context is None:
|
|
self._context = {}
|
|
if 'active_id' in self._context:
|
|
# print(self._context, '=================context=======')
|
|
res = self._context['active_id']
|
|
# print(res, "res=====================")
|
|
return res
|
|
|
|
def transfer_process(self):
|
|
for obj in self.browse(self._ids):
|
|
if obj.trans_folio_id:
|
|
if obj.trans_folio_id.partner_id.id == obj.folio_id.partner_id.id:
|
|
raise ValidationError(
|
|
"Error !, Invoice can't be transfer as both folio partner is same !")
|
|
folio = self.env['hotel.folio'].browse(obj.folio_id.id)
|
|
so = self.env['sale.order'].browse(folio.order_id.id)
|
|
# for record in so.order_line:
|
|
# print("\n\n\nSale order Line==>>>", record.product_id,
|
|
# "\n\n\nLine name", record.name)
|
|
data = so._create_invoices()
|
|
for acc_id in data:
|
|
acc_obj = self.env["account.move"].browse(acc_id)
|
|
if folio.shop_id.project_id.id:
|
|
acc_id.invoice_line_ids.write(
|
|
{
|
|
'analytic_account_id': folio.shop_id.project_id.id,
|
|
})
|
|
|
|
obj.folio_id.write({'state': 'progress'})
|
|
if obj.trans_folio_id:
|
|
# print(obj.trans_folio_id.partner_id,
|
|
# "obj.trans_folio_id.partner_id.id")
|
|
# print(obj.folio_id.partner_id, "obj.folio_id.partner_id")
|
|
if obj.trans_folio_id.partner_id.id != obj.folio_id.partner_id.id:
|
|
acc_obj.write(
|
|
{'partner_id': obj.trans_folio_id.partner_id.id})
|
|
|
|
self._cr.execute('insert into sale_transfer_account_invoice_rel (sale_id,invoice_id) values (%s,%s)', (
|
|
obj.trans_folio_id.order_id.id, data[0]))
|
|
|
|
if self.folio_id.pos_order_ids:
|
|
print('ddddddddddddddddddddddddd',)
|
|
for i in self.folio_id.pos_order_ids:
|
|
print('posssssssssssssssssssssssss',i)
|
|
data.write(
|
|
{
|
|
'invoice_line_ids': i._prepare_invoice_lines()
|
|
}
|
|
)
|
|
|
|
return {'type': 'ir.actions.act_window_close'}
|
|
|
|
|
|
class FolioSaleOrderLine(models.Model):
|
|
_inherit = 'sale.order.line'
|
|
_description = 'Preparing Sale order Line'
|
|
|
|
def _prepare_invoice_line(self, sequence):
|
|
res = super(FolioSaleOrderLine, self)._prepare_invoice_line()
|
|
hotel_folio_line_id = self._format_desc()
|
|
if hotel_folio_line_id:
|
|
# print('-------------- {} {}'.format(hotel_folio_line_id, hotel_folio_line_id.checkin_date))
|
|
timezone = pytz.timezone(self.env.user.tz) if self.env.user.tz else pytz.timezone(
|
|
self._context.get('tz') or 'UTC')
|
|
checkin_date = hotel_folio_line_id.checkin_date.astimezone(timezone)
|
|
if checkin_date:
|
|
checkin_date = datetime.datetime.strftime(
|
|
checkin_date, "%m/%d/%Y, %H:%M:%S")
|
|
|
|
checkout_date = hotel_folio_line_id.checkout_date.astimezone(timezone)
|
|
if checkout_date:
|
|
checkout_date = datetime.datetime.strftime(
|
|
checkout_date, "%m/%d/%Y, %H:%M:%S")
|
|
res.update({'name': "Room: {} From: {} To: {}".format(res.get('name'), checkin_date, checkout_date)})
|
|
|
|
return res
|
|
|
|
def _format_desc(self):
|
|
hotel_folio_line = self.env['hotel_folio.line'].search(
|
|
[('order_line_id', '=', self.id)])
|
|
return hotel_folio_line
|