diff --git a/hotel/models/hotel_folio.py b/hotel/models/hotel_folio.py
index 60fab830d..39b541045 100644
--- a/hotel/models/hotel_folio.py
+++ b/hotel/models/hotel_folio.py
@@ -34,6 +34,20 @@ class HotelFolio(models.Model):
def _compute_qty_delivered_updateable(self):
pass
+ @api.model
+ def _default_diff_invoicing(self):
+ """
+ If the guest has an invoicing address set,
+ this method return diff_invoicing = True, else, return False
+ """
+ if 'folio_id' in self.env.context:
+ folio = self.env['hotel.folio'].browse([
+ self.env.context['folio_id']
+ ])
+ if folio.partner_id.id == folio.partner_invoice_id.id:
+ return False
+ return True
+
@api.depends('state', 'room_lines.invoice_status', 'service_ids.invoice_status')
def _get_invoiced(self):
"""
@@ -211,7 +225,20 @@ class HotelFolio(models.Model):
string='Invoice Address', required=True,
states={'done': [('readonly', True)]},
help="Invoice address for current sales order.")
+ partner_invoice_vat = fields.Char(related="partner_invoice_id.vat")
+ partner_invoice_name = fields.Char(related="partner_invoice_id.name")
+ partner_invoice_street = fields.Char(related="partner_invoice_id.street")
+ partner_invoice_street2 = fields.Char(related="partner_invoice_id.street")
+ partner_invoice_zip = fields.Char(related="partner_invoice_id.zip")
+ partner_invoice_city = fields.Char(related="partner_invoice_id.city")
+ partner_invoice_state_id = fields.Many2one(related="partner_invoice_id.state_id")
+ partner_invoice_country_id = fields.Many2one(related="partner_invoice_id.country_id")
+ partner_invoice_email = fields.Char(related="partner_invoice_id.email")
+ partner_invoice_lang = fields.Selection(related="partner_invoice_id.lang")
+ partner_invoice_type = fields.Selection(related="partner_invoice_id.type")
+ partner_invoice_parent_id = fields.Many2one(related="partner_invoice_id.parent_id")
fiscal_position_id = fields.Many2one('account.fiscal.position', oldname='fiscal_position', string='Fiscal Position')
+ partner_diff_invoicing = fields.Boolean('Bill to another Address', default='_default_diff_invoicing')
#WorkFlow Mail Fields-----------------------------------------------
has_confirmed_reservations_to_send = fields.Boolean(
@@ -446,18 +473,20 @@ class HotelFolio(models.Model):
'partner_invoice_id': False,
'payment_term_id': False,
'fiscal_position_id': False,
+ 'partner_diff_invoicing': False,
})
return
addr = self.partner_id.address_get(['invoice'])
pricelist = self.partner_id.property_product_pricelist and \
self.partner_id.property_product_pricelist.id or \
- self.env['ir.default'].sudo().get('res.config.settings', 'default_pricelist_id')
+ self.env['ir.default'].sudo().get('res.config.settings', 'default_pricelist_id')
values = {
'pricelist_id': pricelist,
'payment_term_id': self.partner_id.property_payment_term_id and self.partner_id.property_payment_term_id.id or False,
'partner_invoice_id': addr['invoice'],
- 'user_id': self.partner_id.user_id.id or self.env.uid
+ 'user_id': self.partner_id.user_id.id or self.env.uid,
+ 'partner_diff_invoicing': False if self.partner_id.id == addr['invoice'] else True
}
if self.env['ir.config_parameter'].sudo().get_param('sale.use_sale_note') and \
@@ -477,6 +506,20 @@ class HotelFolio(models.Model):
self.reservation_type)}
self.update(values)
+ @api.onchange('partner_diff_invoicing')
+ def onchange_partner_diff_invoicing(self):
+ if self.partner_diff_invoicing == False:
+ self.update({'partner_invoice_id': self.partner_id.id})
+ elif self.partner_id == self.partner_invoice_id:
+ self.update({'partner_invoice_id': self.partner_id.address_get(['invoice'])['invoice'] or None})
+
+ @api.onchange('partner_invoice_id')
+ def onchange_partner_invoice_id(self):
+ if self.partner_invoice_id and not self.partner_invoice_id.parent_id and \
+ self.partner_invoice_id != self.partner_id:
+ self.update({
+ 'partner_invoice_parent_id': self.partner_id.id,
+ 'partner_invoice_type': 'invoice'})
@api.model
def calcule_reservation_type(self, is_staff, current_type):
diff --git a/hotel/models/hotel_reservation.py b/hotel/models/hotel_reservation.py
index 220f30056..e6912e74a 100644
--- a/hotel/models/hotel_reservation.py
+++ b/hotel/models/hotel_reservation.py
@@ -191,6 +191,17 @@ class HotelReservation(models.Model):
required=True, track_visibility='onchange')
partner_id = fields.Many2one(related='folio_id.partner_id')
+ partner_invoice_id = fields.Many2one(related='folio_id.partner_invoice_id')
+ partner_invoice_vat = fields.Char(related="partner_invoice_id.vat")
+ partner_invoice_name = fields.Char(related="partner_invoice_id.name")
+ partner_invoice_street = fields.Char(related="partner_invoice_id.street")
+ partner_invoice_street2 = fields.Char(related="partner_invoice_id.street")
+ partner_invoice_zip = fields.Char(related="partner_invoice_id.zip")
+ partner_invoice_city = fields.Char(related="partner_invoice_id.city")
+ partner_invoice_state_id = fields.Many2one(related="partner_invoice_id.state_id")
+ partner_invoice_country_id = fields.Many2one(related="partner_invoice_id.country_id")
+ partner_invoice_email = fields.Char(related="partner_invoice_id.email")
+ partner_invoice_lang = fields.Selection(related="partner_invoice_id.lang")
closure_reason_id = fields.Many2one(related='folio_id.closure_reason_id')
company_id = fields.Many2one(related='folio_id.company_id', string='Company', store=True, readonly=True)
reservation_line_ids = fields.One2many('hotel.reservation.line',
@@ -858,7 +869,7 @@ class HotelReservation(models.Model):
def action_pay_reservation(self):
self.ensure_one()
partner = self.partner_id.id
- amount = min(self.amount_reservation, self.folio_pending_amount)
+ amount = min(self.price_room_services_set, self.folio_pending_amount)
note = self.folio_id.name + ' (' + self.name + ')'
view_id = self.env.ref('hotel.account_payment_view_form_folio').id
return{
diff --git a/hotel/views/hotel_folio_views.xml b/hotel/views/hotel_folio_views.xml
index 315445b0d..4d6d92d0b 100644
--- a/hotel/views/hotel_folio_views.xml
+++ b/hotel/views/hotel_folio_views.xml
@@ -132,7 +132,6 @@
-
@@ -150,31 +149,79 @@
+
+
+
+
+
-
+
+ nolabel="1" context="{'from_folio':True,'room_lines':room_lines,'folio_id': id,'tree_view_ref':'hotel.hotel_reservation_view_bottom_tree', 'form_view_ref':'hotel.hotel_reservation_view_form'}"/>
+
+
-
-
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/hotel/views/hotel_reservation_views.xml b/hotel/views/hotel_reservation_views.xml
index 9721c8c98..1617eaf22 100644
--- a/hotel/views/hotel_reservation_views.xml
+++ b/hotel/views/hotel_reservation_views.xml
@@ -23,24 +23,27 @@
+
+ attrs="{'invisible': [('has_confirmed_reservations_to_send', '=', False)]}"/>
+ attrs="{'invisible': [('has_cancelled_reservations_to_send', '=', False)]}" />
+ attrs="{'invisible': [('has_checkout_to_send', '=', False)]}" />
-
+
@@ -111,7 +114,8 @@