Merge PR #132 into 14.0

Signed-off-by DarioLodeiros
This commit is contained in:
OCA-git-bot
2022-09-18 13:29:17 +00:00
38 changed files with 3171 additions and 485 deletions

View File

@@ -4,7 +4,7 @@
{
"name": "PMS (Property Management System)",
"summary": "A property management system",
"version": "14.0.2.35.1",
"version": "14.0.2.36.1",
"development_status": "Beta",
"category": "Generic Modules/Property Management System",
"website": "https://github.com/OCA/pms",

View File

@@ -22,13 +22,17 @@
})]"
/>
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="channel_type_id" ref="pms.main_pms_sale_channel_door" />
<field name="sale_channel_origin_id" ref="pms.main_pms_sale_channel_door" />
</record>
<record id="pms_folio_sngx3" model="pms.folio">
<field name="partner_id" ref="base.res_partner_address_10" />
<field name="user_id" ref="base.user_admin" />
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="agency_id" ref="pms.agency_booking" />
<field
name="sale_channel_origin_id"
ref="pms.main_pms_sale_channel_phone"
/>
<field
name="reservation_ids"
eval="[(5, 0),
@@ -65,7 +69,7 @@
<field name="partner_id" ref="base.res_partner_12" />
<field name="user_id" ref="base.user_admin" />
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="channel_type_id" ref="pms.main_pms_sale_channel_door" />
<field name="sale_channel_origin_id" ref="pms.main_pms_sale_channel_door" />
<field
name="reservation_ids"
eval="[(5, 0), (0, 0, {
@@ -83,6 +87,10 @@
<field name="user_id" ref="base.user_demo" />
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="agency_id" ref="pms.agency_airbnb" />
<field
name="sale_channel_origin_id"
ref="pms.main_pms_sale_channel_phone"
/>
<field
name="reservation_ids"
eval="[(5, 0), (0, 0, {
@@ -104,6 +112,10 @@
<field name="user_id" ref="base.user_demo" />
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="agency_id" ref="pms.agency_airbnb" />
<field
name="sale_channel_origin_id"
ref="pms.main_pms_sale_channel_phone"
/>
<field
name="reservation_ids"
eval="[(5, 0), (0, 0, {
@@ -125,6 +137,10 @@
<field name="user_id" ref="base.user_demo" />
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="agency_id" ref="agency_booking" />
<field
name="sale_channel_origin_id"
ref="pms.main_pms_sale_channel_phone"
/>
<field name="internal_comment">Each guest pays his bill</field>
<field
name="reservation_ids"
@@ -135,7 +151,8 @@
'checkin': (DateTime.today() + timedelta(days=14)),
'checkout': (DateTime.today() + timedelta(days=21)),
'adults': 4,
'partner_requests': '1 extra towel needed.'
'partner_requests': '1 extra towel needed.',
'sale_channel_origin_id': ref('pms.main_pms_sale_channel_mail')
}),
(0, 0, {
'pricelist_id': ref('product.list0'),
@@ -150,7 +167,10 @@
<field name="partner_id" ref="base.res_partner_address_15" />
<field name="user_id" ref="base.user_demo" />
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="channel_type_id" ref="pms.main_pms_sale_channel_phone" />
<field
name="sale_channel_origin_id"
ref="pms.main_pms_sale_channel_phone"
/>
<field
name="reservation_ids"
eval="[(5, 0), (0, 0, {
@@ -171,7 +191,7 @@
<field name="partner_id" ref="base.res_partner_4" />
<field name="user_id" ref="base.user_admin" />
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="channel_type_id" ref="pms.main_pms_sale_channel_mail" />
<field name="sale_channel_origin_id" ref="pms.main_pms_sale_channel_mail" />
<field
name="reservation_ids"
eval="[(5, 0), (0, 0, {
@@ -190,6 +210,10 @@
<field name="user_id" ref="base.user_demo" />
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="agency_id" ref="pms.agency_airbnb" />
<field
name="sale_channel_origin_id"
ref="pms.main_pms_sale_channel_phone"
/>
<field
name="reservation_ids"
eval="[(5, 0), (0, 0, {
@@ -208,7 +232,10 @@
<field name="user_id" ref="base.user_admin" />
<field name="reservation_type">out</field>
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="channel_type_id" ref="pms.main_pms_sale_channel_phone" />
<field
name="sale_channel_origin_id"
ref="pms.main_pms_sale_channel_phone"
/>
<field
name="reservation_ids"
eval="[(5, 0), (0, 0, {
@@ -228,7 +255,7 @@
<field name="partner_id" ref="base.res_partner_12" />
<field name="user_id" ref="base.user_demo" />
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="channel_type_id" ref="pms.main_pms_sale_channel_door" />
<field name="sale_channel_origin_id" ref="pms.main_pms_sale_channel_door" />
<field
name="reservation_ids"
eval="[(5, 0), (0, 0, {
@@ -248,6 +275,10 @@
<field name="user_id" ref="base.user_demo" />
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="agency_id" ref="pms.agency_booking" />
<field
name="sale_channel_origin_id"
ref="pms.main_pms_sale_channel_phone"
/>
<field
name="internal_comment"
>Do not allow guests to pay anything. The company pays for everything.</field>
@@ -269,6 +300,7 @@
'checkout': (DateTime.today() + timedelta(days=18)),
'adults': 1,
'state': 'confirm',
'sale_channel_origin_id': ref('pms.main_pms_sale_channel_door')
}),
(0, 0, {
'pricelist_id': ref('product.list0'),
@@ -285,6 +317,7 @@
'checkout': (DateTime.today() + timedelta(days=18)),
'adults': 1,
'state': 'confirm',
'sale_channel_origin_id': ref('pms.main_pms_sale_channel_mail')
}),
(0, 0, {
'pricelist_id': ref('product.list0'),
@@ -309,6 +342,7 @@
'checkout': (DateTime.today() + timedelta(days=18)),
'adults': 3,
'state': 'confirm',
'sale_channel_origin_id': ref('pms.main_pms_sale_channel_mail')
}),
(0, 0, {
'pricelist_id': ref('product.list0'),
@@ -325,6 +359,11 @@
<field name="user_id" ref="base.user_demo" />
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="agency_id" ref="pms.agency_booking" />
<field
name="sale_channel_origin_id"
ref="pms.main_pms_sale_channel_phone"
/>
<field
name="reservation_ids"
eval="[(5, 0), (0, 0, {
@@ -343,7 +382,7 @@
<field name="user_id" ref="base.user_admin" />
<field name="reservation_type">out</field>
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="channel_type_id" ref="pms.main_pms_sale_channel_door" />
<field name="sale_channel_origin_id" ref="pms.main_pms_sale_channel_door" />
<field
name="reservation_ids"
eval="[(5, 0), (0, 0, {
@@ -363,7 +402,10 @@
<field name="partner_id" ref="base.res_partner_address_10" />
<field name="user_id" ref="base.user_demo" />
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="channel_type_id" ref="pms.main_pms_sale_channel_phone" />
<field
name="sale_channel_origin_id"
ref="pms.main_pms_sale_channel_phone"
/>
<field name="internal_comment">Each guest pays his bill</field>
<field
name="reservation_ids"
@@ -383,6 +425,7 @@
'checkout': (DateTime.today() + timedelta(days=20)),
'adults': 1,
'state': 'confirm',
'sale_channel_origin_id': ref('pms.main_pms_sale_channel_door'),
}),
(0, 0, {
'pricelist_id': ref('product.list0'),
@@ -399,7 +442,10 @@
<field name="partner_id" ref="base.res_partner_address_33" />
<field name="user_id" ref="base.user_admin" />
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="channel_type_id" ref="pms.main_pms_sale_channel_phone" />
<field
name="sale_channel_origin_id"
ref="pms.main_pms_sale_channel_phone"
/>
<field name="internal_comment">Each guest pays his bill</field>
<field
name="reservation_ids"
@@ -419,6 +465,7 @@
'checkout': (DateTime.today() + timedelta(days=21)),
'adults': 2,
'state': 'cancel',
'sale_channel_origin_id': ref('pms.main_pms_sale_channel_door'),
})]"
/>
@@ -427,7 +474,7 @@
<field name="partner_id" ref="base.res_partner_main2" />
<field name="user_id" ref="base.user_demo" />
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="channel_type_id" ref="pms.main_pms_sale_channel_door" />
<field name="sale_channel_origin_id" ref="pms.main_pms_sale_channel_door" />
<field
name="reservation_ids"
eval="[(5, 0), (0, 0, {
@@ -446,7 +493,7 @@
<field name="user_id" ref="base.user_admin" />
<field name="reservation_type">normal</field>
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="channel_type_id" ref="pms.main_pms_sale_channel_mail" />
<field name="sale_channel_origin_id" ref="pms.main_pms_sale_channel_mail" />
<field
name="reservation_ids"
eval="[(5, 0), (0, 0, {
@@ -464,7 +511,7 @@
<field name="user_id" ref="base.user_demo" />
<field name="reservation_type">normal</field>
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="channel_type_id" ref="pms.main_pms_sale_channel_mail" />
<field name="sale_channel_origin_id" ref="pms.main_pms_sale_channel_mail" />
<field
name="reservation_ids"
eval="[(5, 0), (0, 0, {
@@ -488,6 +535,10 @@
<field name="reservation_type">normal</field>
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="agency_id" ref="pms.agency_airbnb" />
<field
name="sale_channel_origin_id"
ref="pms.main_pms_sale_channel_phone"
/>
<field name="state">cancel</field>
<field
name="reservation_ids"
@@ -502,30 +553,35 @@
})]"
/>
</record>
<record id="pms_folio_cnf_04" model="pms.folio">
<field name="partner_id" ref="base.res_partner_18" />
<field name="user_id" ref="base.user_demo" />
<field name="reservation_type">normal</field>
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="agency_id" ref="pms.agency_booking" />
<field
name="reservation_ids"
eval="[(5, 0), (0, 0, {
'pricelist_id': ref('product.list0'),
'room_type_id': ref ('pms_room_type_conference_room'),
'checkin': (DateTime.today() + timedelta(days=22)),
'checkout': (DateTime.today() + timedelta(days=23)),
'adults': 1,
'state': 'cancel',
'partner_requests': 'Sound system.'
})]"
/>
</record>
<!-- <record id="pms_folio_cnf_04" model="pms.folio">-->
<!-- <field name="partner_id" ref="base.res_partner_18" />-->
<!-- <field name="user_id" ref="base.user_demo" />-->
<!-- <field name="reservation_type">normal</field>-->
<!-- <field name="pms_property_id" ref="pms.main_pms_property" />-->
<!-- <field name="agency_id" ref="pms.agency_booking" />-->
<!-- <field-->
<!-- name="sale_channel_origin_id"-->
<!-- ref="pms.main_pms_sale_channel_phone"-->
<!-- />-->
<!-- <field-->
<!-- name="reservation_ids"-->
<!-- eval="[(5, 0), (0, 0, {-->
<!-- 'pricelist_id': ref('product.list0'),-->
<!-- 'room_type_id': ref ('pms_room_type_conference_room'),-->
<!-- 'checkin': (DateTime.today() + timedelta(days=22)),-->
<!-- 'checkout': (DateTime.today() + timedelta(days=23)),-->
<!-- 'adults': 1,-->
<!-- 'state': 'cancel',-->
<!-- 'partner_requests': 'Sound system.'-->
<!-- })]"-->
<!-- />-->
<!-- </record>-->
<record id="pms_folio_eco_sngx3" model="pms.folio">
<field name="partner_id" ref="base.res_partner_18" />
<field name="user_id" ref="base.user_demo" />
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="agency_id" ref="pms.agency_booking" />
<field name="sale_channel_origin_id" ref="pms.main_pms_sale_channel_door" />
<field name="internal_comment">Each guest pays his bill</field>
<field
name="reservation_ids"
@@ -555,6 +611,7 @@
'adults': 1,
'state': 'confirm',
'board_service_room_id': ref('pms_board_service_room_single_breakfast'),
'sale_channel_origin_id': ref('pms.main_pms_sale_channel_phone')
}),
(0, 0, {
'pricelist_id': ref('product.list0'),
@@ -564,6 +621,7 @@
'adults': 1,
'state': 'confirm',
'board_service_room_id': ref('pms_board_service_room_single_full_board'),
'sale_channel_origin_id': ref('pms.main_pms_sale_channel_phone')
})]"
/>
</record>
@@ -571,7 +629,7 @@
<field name="partner_id" ref="base.res_partner_address_30" />
<field name="user_id" ref="base.user_demo" />
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="channel_type_id" ref="pms.main_pms_sale_channel_phone" />
<field name="sale_channel_origin_id" ref="pms.main_pms_sale_channel_door" />
<field name="internal_comment">Each guest pays his bill</field>
<field
name="reservation_ids"
@@ -604,6 +662,7 @@
'children': 1,
'state': 'confirm',
'board_service_room_id': ref('pms_board_service_room_triple_full_board'),
'sale_channel_origin_id': ref('main_pms_sale_channel_mail')
})]"
/>
</record>
@@ -611,7 +670,7 @@
<field name="partner_id" ref="base.res_partner_address_25" />
<field name="user_id" ref="base.user_admin" />
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="channel_type_id" ref="pms.main_pms_sale_channel_mail" />
<field name="sale_channel_origin_id" ref="pms.main_pms_sale_channel_mail" />
<field name="internal_comment">Each guest pays his bill</field>
<field
name="reservation_ids"
@@ -645,6 +704,10 @@
<field name="user_id" ref="base.user_admin" />
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="agency_id" ref="pms.agency_booking" />
<field
name="sale_channel_origin_id"
ref="pms.main_pms_sale_channel_phone"
/>
<field name="internal_comment">Each guest pays his bill</field>
<field
name="reservation_ids"
@@ -677,7 +740,10 @@
<field name="partner_id" ref="base.res_partner_10" />
<field name="user_id" ref="base.user_demo" />
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="channel_type_id" ref="pms.main_pms_sale_channel_phone" />
<field
name="sale_channel_origin_id"
ref="pms.main_pms_sale_channel_phone"
/>
<field
name="reservation_ids"
eval="[(5, 0),
@@ -697,7 +763,7 @@
<field name="partner_id" ref="base.res_partner_4" />
<field name="user_id" ref="base.user_demo" />
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="channel_type_id" ref="pms.main_pms_sale_channel_mail" />
<field name="sale_channel_origin_id" ref="pms.main_pms_sale_channel_mail" />
<field
name="reservation_ids"
eval="[(5, 0),
@@ -717,7 +783,10 @@
<field name="partner_id" ref="base.res_partner_address_27" />
<field name="user_id" ref="base.user_demo" />
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="channel_type_id" ref="pms.main_pms_sale_channel_phone" />
<field
name="sale_channel_origin_id"
ref="pms.main_pms_sale_channel_phone"
/>
<field
name="reservation_ids"
eval="[(5, 0),
@@ -737,7 +806,10 @@
<field name="partner_id" ref="base.res_partner_12" />
<field name="user_id" ref="base.user_demo" />
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="channel_type_id" ref="pms.main_pms_sale_channel_phone" />
<field
name="sale_channel_origin_id"
ref="pms.main_pms_sale_channel_phone"
/>
<field
name="reservation_ids"
eval="[(5, 0),
@@ -758,6 +830,10 @@
<field name="user_id" ref="base.user_demo" />
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="agency_id" ref="pms.agency_airbnb" />
<field
name="sale_channel_origin_id"
ref="pms.main_pms_sale_channel_phone"
/>
<field
name="reservation_ids"
eval="[(5, 0),
@@ -785,7 +861,7 @@
<field name="partner_id" ref="base.res_partner_address_17" />
<field name="user_id" ref="base.user_demo" />
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="channel_type_id" ref="pms.main_pms_sale_channel_door" />
<field name="sale_channel_origin_id" ref="pms.main_pms_sale_channel_door" />
<field
name="reservation_ids"
eval="[(5, 0), (0, 0, {
@@ -804,7 +880,10 @@
<field name="partner_id" ref="base.res_partner_3" />
<field name="user_id" ref="base.user_admin" />
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="channel_type_id" ref="pms.main_pms_sale_channel_phone" />
<field
name="sale_channel_origin_id"
ref="pms.main_pms_sale_channel_phone"
/>
<field
name="reservation_ids"
eval="[(5, 0), (0, 0, {
@@ -822,7 +901,7 @@
<field name="partner_id" ref="base.res_partner_address_25" />
<field name="user_id" ref="base.user_demo" />
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="channel_type_id" ref="pms.main_pms_sale_channel_mail" />
<field name="sale_channel_origin_id" ref="pms.main_pms_sale_channel_mail" />
<field
name="reservation_ids"
eval="[(5, 0), (0, 0, {
@@ -844,6 +923,10 @@
<field name="user_id" ref="base.user_demo" />
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="agency_id" ref="pms.agency_airbnb" />
<field
name="sale_channel_origin_id"
ref="pms.main_pms_sale_channel_phone"
/>
<field
name="reservation_ids"
eval="[(5, 0), (0, 0, {

View File

@@ -15,6 +15,7 @@
name="out_service_description"
>Extra privacy for school field trip.</field>
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="sale_channel_origin_id" ref="pms.main_pms_sale_channel_mail" />
</record>
<record id="pms_reservation_double_out_01" model="pms.reservation">
<field name="partner_id" ref="main_pms_property" />
@@ -26,6 +27,7 @@
<field name="closure_reason_id" ref="pms_room_closure_reason_maintenance" />
<field name="out_service_description">Carpet replacement.</field>
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="sale_channel_origin_id" ref="pms.main_pms_sale_channel_mail" />
</record>
<record id="pms_reservation_double_out_02" model="pms.reservation">
<field name="partner_id" ref="main_pms_property" />
@@ -37,6 +39,7 @@
<field name="closure_reason_id" ref="pms_room_closure_reason_maintenance" />
<field name="out_service_description">Carpet replacement.</field>
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="sale_channel_origin_id" ref="pms.main_pms_sale_channel_mail" />
</record>
<!-- out of service-->
<record id="pms_reservation_eco_out_02" model="pms.reservation">
@@ -49,6 +52,7 @@
<field name="closure_reason_id" ref="pms_room_closure_reason_maintenance" />
<field name="out_service_description">Wall painting.</field>
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="sale_channel_origin_id" ref="pms.main_pms_sale_channel_mail" />
</record>
<!-- done reservations -->
<!-- 2 nights eco full board service PAST -->
@@ -65,7 +69,7 @@
ref="pms_board_service_room_eco_full_board"
/>
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="channel_type_id" ref="pms.main_pms_sale_channel_mail" />
<field name="sale_channel_origin_id" ref="pms.main_pms_sale_channel_mail" />
<field name="state">done</field>
<field
name="partner_requests"
@@ -95,7 +99,7 @@
ref="pms_board_service_room_eco_full_board"
/>
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="channel_type_id" ref="pms.main_pms_sale_channel_mail" />
<field name="sale_channel_origin_id" ref="pms.main_pms_sale_channel_mail" />
<field name="state">done</field>
</record>
<record id="pms_checkin_partner_r_eco_02" model="pms.checkin.partner">
@@ -124,7 +128,7 @@
ref="pms_board_service_room_eco_full_board"
/>
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="channel_type_id" ref="pms.main_pms_sale_channel_mail" />
<field name="sale_channel_origin_id" ref="pms.main_pms_sale_channel_mail" />
<field name="state">done</field>
<field name="partner_requests">Breakfast at 5:00 am.</field>
</record>
@@ -158,7 +162,7 @@
ref="pms_board_service_room_eco_full_board"
/>
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="channel_type_id" ref="pms.main_pms_sale_channel_mail" />
<field name="sale_channel_origin_id" ref="pms.main_pms_sale_channel_mail" />
<field name="state">done</field>
</record>
<record id="pms_checkin_partner_r_eco_04" model="pms.checkin.partner">
@@ -185,7 +189,7 @@
ref="pms_board_service_room_eco_full_board"
/>
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="channel_type_id" ref="pms.main_pms_sale_channel_mail" />
<field name="sale_channel_origin_id" ref="pms.main_pms_sale_channel_mail" />
<field name="state">done</field>
</record>
<record id="pms_checkin_partner_r_eco_05" model="pms.checkin.partner">
@@ -212,7 +216,7 @@
ref="pms_board_service_room_eco_full_board"
/>
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="channel_type_id" ref="pms.main_pms_sale_channel_mail" />
<field name="sale_channel_origin_id" ref="pms.main_pms_sale_channel_mail" />
<field name="state">done</field>
<field name="partner_requests">Need lunchs to take away.</field>
</record>
@@ -255,6 +259,10 @@
/>
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="agency_id" ref="pms.agency_booking" />
<field
name="sale_channel_origin_id"
ref="pms.main_pms_sale_channel_phone"
/>
</record>
<!-- 5 nights eco no board service -->
<record id="pms_reservation_eco_08" model="pms.reservation">
@@ -265,6 +273,10 @@
<field name="checkout" eval="DateTime.today() + timedelta(5)" />
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="agency_id" ref="pms.agency_booking" />
<field
name="sale_channel_origin_id"
ref="pms.main_pms_sale_channel_phone"
/>
<field name="partner_requests">Need 1 extra towel.</field>
</record>
<!-- 2 nights eco no board service -->
@@ -275,7 +287,7 @@
<field name="checkin" eval="DateTime.today()" />
<field name="checkout" eval="DateTime.today() + timedelta(2)" />
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="channel_type_id" ref="pms.main_pms_sale_channel_mail" />
<field name="sale_channel_origin_id" ref="pms.main_pms_sale_channel_mail" />
</record>
<!-- 5 nights eco no board service -->
<record id="pms_reservation_eco_10" model="pms.reservation">
@@ -285,7 +297,10 @@
<field name="checkin" eval="DateTime.today()" />
<field name="checkout" eval="DateTime.today() + timedelta(5)" />
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="channel_type_id" ref="pms.main_pms_sale_channel_phone" />
<field
name="sale_channel_origin_id"
ref="pms.main_pms_sale_channel_phone"
/>
<field name="partner_requests">Need 2 extra towel.</field>
</record>
<!-- 7 nights eco no board service -->
@@ -297,6 +312,10 @@
<field name="checkout" eval="DateTime.today() + timedelta(12)" />
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="agency_id" ref="pms.agency_airbnb" />
<field
name="sale_channel_origin_id"
ref="pms.main_pms_sale_channel_phone"
/>
</record>
<!-- 7 nights eco no board service -->
<record id="pms_reservation_eco_12" model="pms.reservation">
@@ -307,7 +326,7 @@
<field name="checkin" eval="DateTime.today()" />
<field name="checkout" eval="DateTime.today() + timedelta(7)" />
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="channel_type_id" ref="pms.main_pms_sale_channel_door" />
<field name="sale_channel_origin_id" ref="pms.main_pms_sale_channel_door" />
<field name="partner_requests">Need 2 extra towels.</field>
<field name="partner_internal_comment">Friend of manager</field>
<field name="folio_internal_comment">
@@ -325,7 +344,7 @@
<field name="checkin" eval="DateTime.today() + timedelta(1)" />
<field name="checkout" eval="DateTime.today() + timedelta(4)" />
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="channel_type_id" ref="pms.main_pms_sale_channel_door" />
<field name="sale_channel_origin_id" ref="pms.main_pms_sale_channel_door" />
</record>
<!-- 1 night eco no board service -->
<record id="pms_reservation_eco_14" model="pms.reservation">
@@ -338,6 +357,10 @@
<field name="checkout" eval="DateTime.today() + timedelta(5)" />
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="agency_id" ref="pms.agency_booking" />
<field
name="sale_channel_origin_id"
ref="pms.main_pms_sale_channel_phone"
/>
<field name="partner_requests">Preferably street view.</field>
</record>
<!-- 2 nights eco no board service -->
@@ -350,7 +373,10 @@
<field name="checkin" eval="DateTime.today() + timedelta(5)" />
<field name="checkout" eval="DateTime.today() + timedelta(7)" />
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="channel_type_id" ref="pms.main_pms_sale_channel_phone" />
<field
name="sale_channel_origin_id"
ref="pms.main_pms_sale_channel_phone"
/>
</record>
<!--SINGLE RESERVATIONS (Main Property) -->
<!-- 5 nights sng full board service PAST -->
@@ -367,7 +393,7 @@
ref="pms_board_service_room_single_full_board"
/>
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="channel_type_id" ref="pms.main_pms_sale_channel_mail" />
<field name="sale_channel_origin_id" ref="pms.main_pms_sale_channel_mail" />
<field name="state">done</field>
<field name="partner_requests">Late for dinner. Cold dinner needed.</field>
</record>
@@ -395,7 +421,7 @@
ref="pms_board_service_room_single_full_board"
/>
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="channel_type_id" ref="pms.main_pms_sale_channel_mail" />
<field name="sale_channel_origin_id" ref="pms.main_pms_sale_channel_mail" />
<field name="state">done</field>
</record>
<record id="pms_checkin_partner_r_sng_02" model="pms.checkin.partner">
@@ -422,8 +448,8 @@
ref="pms_board_service_room_single_full_board"
/>
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="channel_type_id" ref="pms.main_pms_sale_channel_mail" />
<field name="state">done</field>
<field name="sale_channel_origin_id" ref="pms.main_pms_sale_channel_mail" />
</record>
<record id="pms_checkin_partner_r_sng_03" model="pms.checkin.partner">
<field name="partner_id" ref="base.res_partner_address_32" />
@@ -458,7 +484,7 @@
ref="pms_board_service_room_single_full_board"
/>
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="channel_type_id" ref="pms.main_pms_sale_channel_mail" />
<field name="sale_channel_origin_id" ref="pms.main_pms_sale_channel_mail" />
<field name="partner_requests">breakfast at 5:00 am </field>
</record>
<!-- 3 nights sng breakfast board service -->
@@ -484,6 +510,10 @@
/>
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="agency_id" ref="pms.agency_booking" />
<field
name="sale_channel_origin_id"
ref="pms.main_pms_sale_channel_phone"
/>
</record>
<!-- 4 nights sng full board service -->
<record id="pms_reservation_sng_06" model="pms.reservation">
@@ -499,7 +529,7 @@
ref="pms_board_service_room_single_full_board"
/>
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="channel_type_id" ref="pms.main_pms_sale_channel_door" />
<field name="sale_channel_origin_id" ref="pms.main_pms_sale_channel_door" />
<field name="partner_requests">Breakfast to take away. </field>
</record>
<!-- 1 night sng half board service -->
@@ -517,6 +547,10 @@
/>
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="agency_id" ref="pms.agency_airbnb" />
<field
name="sale_channel_origin_id"
ref="pms.main_pms_sale_channel_phone"
/>
</record>
<!-- 4 nights sng no board service -->
<record id="pms_reservation_sng_08" model="pms.reservation">
@@ -529,6 +563,10 @@
<field name="checkout" eval="DateTime.today() + timedelta(10)" />
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="agency_id" ref="pms.agency_airbnb" />
<field
name="sale_channel_origin_id"
ref="pms.main_pms_sale_channel_phone"
/>
<field name="partner_requests">preferably street view</field>
</record>
<!-- 4 nights sng no board service -->
@@ -541,7 +579,10 @@
<field name="checkin" eval="DateTime.today() + timedelta(9)" />
<field name="checkout" eval="DateTime.today() + timedelta(13)" />
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="channel_type_id" ref="pms.main_pms_sale_channel_phone" />
<field
name="sale_channel_origin_id"
ref="pms.main_pms_sale_channel_phone"
/>
</record>
<!-- 1 night sng no board service -->
<record id="pms_reservation_sng_10" model="pms.reservation">
@@ -555,6 +596,10 @@
<field name="checkout" eval="DateTime.today() + timedelta(14)" />
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="agency_id" ref="pms.agency_airbnb" />
<field
name="sale_channel_origin_id"
ref="pms.main_pms_sale_channel_phone"
/>
<field name="partner_requests">Preferably street view.</field>
</record>
<!--DOUBLE RESERVATIONS (Main Property) -->
@@ -567,7 +612,10 @@
<field name="checkin" eval="DateTime.today() + timedelta(-10)" />
<field name="checkout" eval="DateTime.today() + timedelta(-7)" />
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="channel_type_id" ref="pms.main_pms_sale_channel_phone" />
<field
name="sale_channel_origin_id"
ref="pms.main_pms_sale_channel_phone"
/>
</record>
<function model="pms.reservation" name="action_cancel">
<value eval="[ref('pms_reservation_dbl_cancel_01')]" />
@@ -581,7 +629,7 @@
<field name="checkin" eval="DateTime.today() + timedelta(-10)" />
<field name="checkout" eval="DateTime.today() + timedelta(-7)" />
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="channel_type_id" ref="pms.main_pms_sale_channel_door" />
<field name="sale_channel_origin_id" ref="pms.main_pms_sale_channel_door" />
<field
name="checkin_partner_ids"
eval="[(5, 0),
@@ -607,7 +655,7 @@
<field name="checkin" eval="DateTime.today() + timedelta(-3)" />
<field name="checkout" eval="DateTime.today()" />
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="channel_type_id" ref="pms.main_pms_sale_channel_door" />
<field name="sale_channel_origin_id" ref="pms.main_pms_sale_channel_door" />
<field name="partner_requests">1 bottle of champagne upon check-in</field>
</record>
<!-- 3 nights dbl no board service PAST -->
@@ -620,7 +668,7 @@
<field name="checkin" eval="DateTime.today() + timedelta(-1)" />
<field name="checkout" eval="DateTime.today() + timedelta(2)" />
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="channel_type_id" ref="pms.main_pms_sale_channel_door" />
<field name="sale_channel_origin_id" ref="pms.main_pms_sale_channel_door" />
</record>
<!-- 4 nights dbl half board service -->
<record id="pms_reservation_dbl_03" model="pms.reservation">
@@ -637,6 +685,10 @@
/>
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="agency_id" ref="pms.agency_booking" />
<field
name="sale_channel_origin_id"
ref="pms.main_pms_sale_channel_phone"
/>
<field name="partner_requests">3 extra towels</field>
</record>
<!-- 2 nights dbl no board service -->
@@ -649,7 +701,10 @@
<field name="checkin" eval="DateTime.today() + timedelta(4)" />
<field name="checkout" eval="DateTime.today() + timedelta(6)" />
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="channel_type_id" ref="pms.main_pms_sale_channel_phone" />
<field
name="sale_channel_origin_id"
ref="pms.main_pms_sale_channel_phone"
/>
</record>
<!-- 2 nights dbl breakfast board service -->
<record id="pms_reservation_dbl_05" model="pms.reservation">
@@ -666,6 +721,10 @@
/>
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="agency_id" ref="pms.agency_booking" />
<field
name="sale_channel_origin_id"
ref="pms.main_pms_sale_channel_phone"
/>
<field name="partner_requests">Vegan breakfast</field>
</record>
<!-- 2 nights dbl no board service -->
@@ -686,6 +745,10 @@
<field name="checkout" eval="DateTime.today() + timedelta(8)" />
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="agency_id" ref="pms.agency_booking" />
<field
name="sale_channel_origin_id"
ref="pms.main_pms_sale_channel_phone"
/>
</record>
<!-- 2 nights dbl no board service -->
<record id="pms_reservation_dbl_07" model="pms.reservation">
@@ -701,7 +764,7 @@
ref="pms_board_service_room_double_half_board"
/>
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="channel_type_id" ref="pms.main_pms_sale_channel_mail" />
<field name="sale_channel_origin_id" ref="pms.main_pms_sale_channel_mail" />
<field name="partner_requests">Help needed with the luggage.</field>
</record>
<!-- 1 night dbl breakfast board service -->
@@ -719,7 +782,7 @@
ref="pms_board_service_room_double_breakfast"
/>
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="channel_type_id" ref="pms.main_pms_sale_channel_mail" />
<field name="sale_channel_origin_id" ref="pms.main_pms_sale_channel_mail" />
</record>
<!-- 1 night dbl no board service -->
<record id="pms_reservation_dbl_09" model="pms.reservation">
@@ -732,7 +795,10 @@
<field name="checkin" eval="DateTime.today() + timedelta(10)" />
<field name="checkout" eval="DateTime.today() + timedelta(11)" />
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="channel_type_id" ref="pms.main_pms_sale_channel_phone" />
<field
name="sale_channel_origin_id"
ref="pms.main_pms_sale_channel_phone"
/>
<field name="partner_requests">Need 1 extra set of bedclothes</field>
</record>
<!-- 2 nights dbl breakfast board service -->
@@ -744,6 +810,10 @@
<field name="adults">2</field>
<field name="checkin" eval="DateTime.today() + timedelta(11)" />
<field name="checkout" eval="DateTime.today() + timedelta(13)" />
<field
name="sale_channel_origin_id"
ref="pms.main_pms_sale_channel_phone"
/>
<field
name="board_service_room_id"
ref="pms_board_service_room_double_breakfast"
@@ -767,7 +837,7 @@
<field name="checkin" eval="DateTime.today() + timedelta(11)" />
<field name="checkout" eval="DateTime.today() + timedelta(13)" />
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="channel_type_id" ref="pms.main_pms_sale_channel_door" />
<field name="sale_channel_origin_id" ref="pms.main_pms_sale_channel_door" />
<field name="partner_requests">welcome cocktail</field>
</record>
<!-- TRIPLE RESERVATIONS (Main Property) -->
@@ -785,7 +855,7 @@
ref="pms_board_service_room_triple_full_board"
/>
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="channel_type_id" ref="pms.main_pms_sale_channel_mail" />
<field name="sale_channel_origin_id" ref="pms.main_pms_sale_channel_mail" />
<field name="state">done</field>
</record>
<record id="pms_checkin_partner_r_trp_01" model="pms.checkin.partner">
@@ -828,6 +898,10 @@
/>
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="agency_id" ref="pms.agency_booking" />
<field
name="sale_channel_origin_id"
ref="pms.main_pms_sale_channel_phone"
/>
<field name="partner_requests">Vegetarian food for all guests.</field>
</record>
<!-- 7 nights trp no board service -->
@@ -839,6 +913,10 @@
<field name="checkout" eval="DateTime.today() + timedelta(8)" />
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="agency_id" ref="pms.agency_airbnb" />
<field
name="sale_channel_origin_id"
ref="pms.main_pms_sale_channel_phone"
/>
</record>
<!-- 2 nights trp no board service -->
<record id="pms_reservation_trp_04" model="pms.reservation">
@@ -858,7 +936,7 @@
<field name="checkin" eval="DateTime.today() + timedelta(4)" />
<field name="checkout" eval="DateTime.today() + timedelta(6)" />
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="channel_type_id" ref="pms.main_pms_sale_channel_mail" />
<field name="sale_channel_origin_id" ref="pms.main_pms_sale_channel_mail" />
<field name="partner_requests">3 set of keys needed.</field>
</record>
<!-- 2 nights trp no board service -->
@@ -879,7 +957,10 @@
<field name="checkin" eval="DateTime.today() + timedelta(6)" />
<field name="checkout" eval="DateTime.today() + timedelta(8)" />
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="channel_type_id" ref="pms.main_pms_sale_channel_phone" />
<field
name="sale_channel_origin_id"
ref="pms.main_pms_sale_channel_phone"
/>
</record>
<!-- 1 night trp breakfast board service -->
<record id="pms_reservation_trp_06" model="pms.reservation">
@@ -902,7 +983,7 @@
ref="pms_board_service_room_triple_breakfast"
/>
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="channel_type_id" ref="pms.main_pms_sale_channel_door" />
<field name="sale_channel_origin_id" ref="pms.main_pms_sale_channel_door" />
<field name="partner_requests">Celiac breakfast</field>
</record>
<!-- 2 nights trp full board service -->
@@ -919,7 +1000,7 @@
ref="pms_board_service_room_triple_full_board"
/>
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="channel_type_id" ref="pms.main_pms_sale_channel_mail" />
<field name="sale_channel_origin_id" ref="pms.main_pms_sale_channel_mail" />
</record>
<!-- 2 nights trp no board service -->
<record id="pms_reservation_trp_08" model="pms.reservation">
@@ -930,6 +1011,10 @@
<field name="checkout" eval="DateTime.today() + timedelta(14)" />
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="agency_id" ref="pms.agency_airbnb" />
<field
name="sale_channel_origin_id"
ref="pms.main_pms_sale_channel_phone"
/>
<field name="partner_requests">room with low noise 24x7</field>
</record>
<!-- QUADRUPLE RESERVATIONS (Main Property)-->
@@ -941,7 +1026,7 @@
<field name="checkin" eval="DateTime.today() + timedelta(-10)" />
<field name="checkout" eval="DateTime.today() + timedelta(-7)" />
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="channel_type_id" ref="pms.main_pms_sale_channel_mail" />
<field name="sale_channel_origin_id" ref="pms.main_pms_sale_channel_mail" />
<field name="state">done</field>
</record>
<record id="pms_checkin_partner_r_qdp_01" model="pms.checkin.partner">
@@ -963,6 +1048,10 @@
<field name="checkout" eval="DateTime.today() + timedelta(-5)" />
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="agency_id" ref="pms.agency_booking" />
<field
name="sale_channel_origin_id"
ref="pms.main_pms_sale_channel_phone"
/>
<field name="state">done</field>
<field
name="partner_requests"
@@ -986,7 +1075,10 @@
<field name="checkin" eval="DateTime.today() + timedelta(-4)" />
<field name="checkout" eval="DateTime.today() + timedelta(-2)" />
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="channel_type_id" ref="pms.main_pms_sale_channel_phone" />
<field
name="sale_channel_origin_id"
ref="pms.main_pms_sale_channel_phone"
/>
<field name="state">done</field>
</record>
<record id="pms_checkin_partner_r_qdp_03" model="pms.checkin.partner">
@@ -1008,6 +1100,10 @@
<field name="checkout" eval="DateTime.today() + timedelta(-1)" />
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="agency_id" ref="pms.agency_booking" />
<field
name="sale_channel_origin_id"
ref="pms.main_pms_sale_channel_phone"
/>
<field name="partner_requests">Allergic to chemicals</field>
<field name="state">done</field>
</record>
@@ -1030,6 +1126,10 @@
<field name="checkout" eval="DateTime.today() + timedelta(2)" />
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="agency_id" ref="pms.agency_booking" />
<field
name="sale_channel_origin_id"
ref="pms.main_pms_sale_channel_phone"
/>
</record>
<!-- 3 nights qdp no board service -->
<record id="pms_reservation_qdp_06" model="pms.reservation">
@@ -1039,8 +1139,25 @@
<field name="checkin" eval="DateTime.today()" />
<field name="checkout" eval="DateTime.today() + timedelta(3)" />
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="channel_type_id" ref="pms.main_pms_sale_channel_door" />
<field name="sale_channel_origin_id" ref="pms.main_pms_sale_channel_door" />
<field name="partner_requests">Hard mattress needed.</field>
<field
name="reservation_line_ids"
eval="[(5, 0),
(0, 0, {
'date': (DateTime.today()),
'sale_channel_id': ref('pms.main_pms_sale_channel_door')
}),
(0, 0, {
'date': (DateTime.today() + timedelta(days=1)),
'sale_channel_id': ref('pms.main_pms_sale_channel_phone')
}),
(0, 0, {
'date': (DateTime.today() + timedelta(days=2)),
'sale_channel_id': ref('pms.main_pms_sale_channel_phone')
})
]"
/>
</record>
<!-- 3 nights qdp no board service -->
<record id="pms_reservation_qdp_07" model="pms.reservation">
@@ -1050,7 +1167,7 @@
<field name="checkin" eval="DateTime.today() + timedelta(1)" />
<field name="checkout" eval="DateTime.today() + timedelta(4)" />
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="channel_type_id" ref="pms.main_pms_sale_channel_mail" />
<field name="sale_channel_origin_id" ref="pms.main_pms_sale_channel_mail" />
</record>
<!-- CONFERENCE ROOMS RESERVATIONS (Main Property) -->
<!-- 5 nights cnf no board service PAST -->
@@ -1065,7 +1182,7 @@
<field name="checkin_partner_pending_count">0</field>
<field name="folio_payment_state">paid</field>
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="channel_type_id" ref="pms.main_pms_sale_channel_mail" />
<field name="sale_channel_origin_id" ref="pms.main_pms_sale_channel_mail" />
<field name="state">done</field>
<field name="partner_requests">2 bottles of water each 2 hours.</field>
</record>
@@ -1089,6 +1206,10 @@
<field name="checkout" eval="DateTime.today() + timedelta(4)" />
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="agency_id" ref="pms.agency_airbnb" />
<field
name="sale_channel_origin_id"
ref="pms.main_pms_sale_channel_phone"
/>
</record>
<!-- 2 nights cnf no board service -->
<record id="pms_reservation_cnf_03" model="pms.reservation">
@@ -1099,8 +1220,21 @@
<field name="checkin" eval="DateTime.today() + timedelta(6)" />
<field name="checkout" eval="DateTime.today() + timedelta(8)" />
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="channel_type_id" ref="pms.main_pms_sale_channel_door" />
<field name="sale_channel_origin_id" ref="pms.main_pms_sale_channel_door" />
<field name="partner_requests">Projector needed</field>
<field
name="reservation_line_ids"
eval="[(5, 0),
(0, 0, {
'date': (DateTime.today() + timedelta(days=6)),
'sale_channel_id': ref('pms.main_pms_sale_channel_door')
}),
(0, 0, {
'date': (DateTime.today() + timedelta(days=7)),
'sale_channel_id': ref('pms.main_pms_sale_channel_phone')
})
]"
/>
</record>
<!-- 2 nights cnf no board service -->
<record id="pms_reservation_cnf_04" model="pms.reservation">
@@ -1111,7 +1245,10 @@
<field name="checkin" eval="DateTime.today() + timedelta(10)" />
<field name="checkout" eval="DateTime.today() + timedelta(12)" />
<field name="pms_property_id" ref="pms.main_pms_property" />
<field name="channel_type_id" ref="pms.main_pms_sale_channel_phone" />
<field
name="sale_channel_origin_id"
ref="pms.main_pms_sale_channel_phone"
/>
</record>
<!-- GRAND SUITE RESERVATIONS (SAN CARLOS) -->
<!-- 3 nights grsui no board service PAST -->
@@ -1122,7 +1259,10 @@
<field name="checkin" eval="DateTime.today() + timedelta(-9)" />
<field name="checkout" eval="DateTime.today() + timedelta(-6)" />
<field name="pms_property_id" ref="pms.san_carlos_property" />
<field name="channel_type_id" ref="pms.main_pms_sale_channel_phone" />
<field
name="sale_channel_origin_id"
ref="pms.main_pms_sale_channel_phone"
/>
<field name="state">done</field>
</record>
<record id="pms_checkin_partner_r_grsui_01" model="pms.checkin.partner">
@@ -1143,7 +1283,7 @@
<field name="checkin" eval="DateTime.today() + timedelta(-8)" />
<field name="checkout" eval="DateTime.today() + timedelta(-5)" />
<field name="pms_property_id" ref="pms.san_carlos_property" />
<field name="channel_type_id" ref="pms.main_pms_sale_channel_door" />
<field name="sale_channel_origin_id" ref="pms.main_pms_sale_channel_door" />
<field name="partner_requests">Need 1 extra shampoo</field>
<field name="state">done</field>
</record>
@@ -1165,7 +1305,7 @@
<field name="checkin" eval="DateTime.today() + timedelta(-6)" />
<field name="checkout" eval="DateTime.today() + timedelta(-3)" />
<field name="pms_property_id" ref="pms.san_carlos_property" />
<field name="channel_type_id" ref="pms.main_pms_sale_channel_mail" />
<field name="sale_channel_origin_id" ref="pms.main_pms_sale_channel_mail" />
<field name="state">done</field>
</record>
<record id="pms_checkin_partner_r_grsui_03" model="pms.checkin.partner">
@@ -1186,7 +1326,10 @@
<field name="checkin" eval="DateTime.today() + timedelta(-2)" />
<field name="checkout" eval="DateTime.today() + timedelta(1)" />
<field name="pms_property_id" ref="pms.san_carlos_property" />
<field name="channel_type_id" ref="pms.main_pms_sale_channel_phone" />
<field
name="sale_channel_origin_id"
ref="pms.main_pms_sale_channel_phone"
/>
<field name="partner_requests">Welcome cocktail.</field>
</record>
<!-- 4 nights grsui no board service -->
@@ -1197,7 +1340,7 @@
<field name="checkin" eval="DateTime.today() + timedelta(-1)" />
<field name="checkout" eval="DateTime.today() + timedelta(3)" />
<field name="pms_property_id" ref="pms.san_carlos_property" />
<field name="channel_type_id" ref="pms.main_pms_sale_channel_door" />
<field name="sale_channel_origin_id" ref="pms.main_pms_sale_channel_door" />
</record>
<!-- 3 nights grsui no board service -->
<record id="pms_reservation_grsui_06" model="pms.reservation">
@@ -1207,7 +1350,7 @@
<field name="checkin" eval="DateTime.today() + timedelta(-2)" />
<field name="checkout" eval="DateTime.today() + timedelta(7)" />
<field name="pms_property_id" ref="pms.san_carlos_property" />
<field name="channel_type_id" ref="pms.main_pms_sale_channel_mail" />
<field name="sale_channel_origin_id" ref="pms.main_pms_sale_channel_mail" />
<field name="partner_requests">Basket fruit at bedroom</field>
</record>
<!-- JUNIOR SUITE RESERVATIONS (SAN CARLOS) -->
@@ -1219,7 +1362,10 @@
<field name="checkin" eval="DateTime.today() + timedelta(-10)" />
<field name="checkout" eval="DateTime.today() + timedelta(-7)" />
<field name="pms_property_id" ref="pms.san_carlos_property" />
<field name="channel_type_id" ref="pms.main_pms_sale_channel_phone" />
<field
name="sale_channel_origin_id"
ref="pms.main_pms_sale_channel_phone"
/>
<field name="state">done</field>
</record>
<record id="pms_checkin_partner_r_jrsui_01" model="pms.checkin.partner">
@@ -1240,7 +1386,7 @@
<field name="checkin" eval="DateTime.today() + timedelta(-8)" />
<field name="checkout" eval="DateTime.today() + timedelta(-3)" />
<field name="pms_property_id" ref="pms.san_carlos_property" />
<field name="channel_type_id" ref="pms.main_pms_sale_channel_door" />
<field name="sale_channel_origin_id" ref="pms.main_pms_sale_channel_door" />
<field name="partner_requests">allergic to chemicals</field>
<field name="state">done</field>
</record>
@@ -1262,7 +1408,7 @@
<field name="checkin" eval="DateTime.today() + timedelta(-6)" />
<field name="checkout" eval="DateTime.today() + timedelta(-2)" />
<field name="pms_property_id" ref="pms.san_carlos_property" />
<field name="channel_type_id" ref="pms.main_pms_sale_channel_mail" />
<field name="sale_channel_origin_id" ref="pms.main_pms_sale_channel_mail" />
<field name="state">done</field>
</record>
<record id="pms_checkin_partner_jrsui_03" model="pms.checkin.partner">
@@ -1283,7 +1429,10 @@
<field name="checkin" eval="DateTime.today() + timedelta(-2)" />
<field name="checkout" eval="DateTime.today() + timedelta(2)" />
<field name="pms_property_id" ref="pms.san_carlos_property" />
<field name="channel_type_id" ref="pms.main_pms_sale_channel_phone" />
<field
name="sale_channel_origin_id"
ref="pms.main_pms_sale_channel_phone"
/>
<field name="partner_requests">Smoking room.</field>
</record>
<!-- 4 nights jrsui no board service -->
@@ -1294,7 +1443,7 @@
<field name="checkin" eval="DateTime.today()" />
<field name="checkout" eval="DateTime.today() + timedelta(4)" />
<field name="pms_property_id" ref="pms.san_carlos_property" />
<field name="channel_type_id" ref="pms.main_pms_sale_channel_door" />
<field name="sale_channel_origin_id" ref="pms.main_pms_sale_channel_door" />
</record>
<!-- 4 nights jrsui no board service -->
<record id="pms_reservation_jrsui_06" model="pms.reservation">
@@ -1304,7 +1453,7 @@
<field name="checkin" eval="DateTime.today() + timedelta(3)" />
<field name="checkout" eval="DateTime.today() + timedelta(7)" />
<field name="pms_property_id" ref="pms.san_carlos_property" />
<field name="channel_type_id" ref="pms.main_pms_sale_channel_mail" />
<field name="sale_channel_origin_id" ref="pms.main_pms_sale_channel_mail" />
<field name="partner_requests">two bottles of moët</field>
</record>
</data>

View File

@@ -7,7 +7,7 @@ def migrate(env, version):
env.cr,
"""
UPDATE pms_reservation
SET to_send_confirmation_mail = to_send_mail,
SET to_send_confirmation_mail = False,
to_send_cancelation_mail = False,
to_send_exit_mail = False,
to_send_modification_mail = False;

View File

@@ -0,0 +1,32 @@
import logging
from openupgradelib import openupgrade
_logger = logging.getLogger(__name__)
@openupgrade.migrate()
def migrate(env, version):
openupgrade.logged_query(
env.cr,
"""
UPDATE pms_reservation_line rl
SET sale_channel_id = r.sale_channel_origin_id
FROM pms_reservation r
WHERE r.id = rl.reservation_id
""",
)
openupgrade.logged_query(
env.cr,
"""
UPDATE pms_service ser
SET sale_channel_origin_id = fol.sale_channel_origin_id
FROM pms_folio fol
WHERE fol.id = ser.folio_id
""",
)
_logger.info("Recompute reservations sale channel ids...")
env["pms.reservation"].search(
[("reservation_type", "!=", "out")]
)._compute_sale_channel_ids()

View File

@@ -0,0 +1,11 @@
from openupgradelib import openupgrade
_field_renames = [
("pms.folio", "pms_folio", "channel_type_id", "sale_channel_origin_id"),
("pms.reservation", "pms_reservation", "channel_type_id", "sale_channel_origin_id"),
]
@openupgrade.migrate()
def migrate(env, version):
openupgrade.rename_fields(env, _field_renames)

View File

@@ -1,9 +1,11 @@
# Copyright 2020 Dario Lodeiros
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from datetime import timedelta
from math import ceil
import babel.dates
from dateutil import relativedelta
from odoo import _, api, fields, models
from odoo.osv import expression
@@ -44,6 +46,15 @@ class FolioSaleLine(models.Model):
comodel_name="pms.service",
ondelete="cascade",
)
pms_property_id = fields.Many2one(
string="Property",
help="Property with access to the element;",
readonly=True,
store=True,
comodel_name="pms.property",
related="folio_id.pms_property_id",
check_pms_properties=True,
)
is_board_service = fields.Boolean(
string="Board Service",
help="Indicates if the service included in "
@@ -51,7 +62,6 @@ class FolioSaleLine(models.Model):
store=True,
related="service_id.is_board_service",
)
name = fields.Text(
string="Description",
help="Description of folio sale line",
@@ -259,13 +269,6 @@ class FolioSaleLine(models.Model):
index=True,
related="folio_id.company_id",
)
folio_partner_id = fields.Many2one(
string="Customer",
help="Related customer with Folio Sale Line",
readonly=False,
store=True,
related="folio_id.partner_id",
)
origin_agency_id = fields.Many2one(
string="Origin Agency",
help="The agency where the folio sale line originates",
@@ -330,14 +333,38 @@ class FolioSaleLine(models.Model):
store=True,
compute="_compute_date_order",
)
default_invoice_to = fields.Many2one(
string="Invoice to",
help="""Indicates the contact to which this line will be
billed by default, if it is not established,
a guest or the generic contact will be used instead""",
comodel_name="res.partner",
ondelete="restrict",
)
autoinvoice_date = fields.Date(
string="Autoinvoice Date",
compute="_compute_autoinvoice_date",
store=True,
)
@api.depends(
"folio_id.agency_id",
"reservation_line_ids",
"reservation_id.agency_id",
"service_line_ids",
)
def _compute_origin_agency_id(self):
"""
Set the origin agency if the origin lines channel
match with the agency's channel
"""
for rec in self:
rec.origin_agency_id = rec.folio_id.agency_id
# TODO: ServiceLines agency
if rec.folio_id.agency_id and list(
set(rec.reservation_line_ids.mapped("sale_channel_id.id"))
) == rec.folio_id.agency_id.mapped("sale_channel_id.id"):
rec.origin_agency_id = rec.folio_id.agency_id
else:
rec.origin_agency_id = False
@api.depends("qty_to_invoice")
def _compute_service_order(self):
@@ -370,6 +397,54 @@ class FolioSaleLine(models.Model):
else:
record.date_order = 0
@api.depends(
"default_invoice_to",
"invoice_status",
"folio_id.last_checkout",
"reservation_id.checkout",
"service_id.reservation_id.checkout",
)
def _compute_autoinvoice_date(self):
self.autoinvoice_date = False
for record in self.filtered(lambda r: r.invoice_status == "to_invoice"):
record.autoinvoice_date = record._get_to_invoice_date()
def _get_to_invoice_date(self):
self.ensure_one()
partner = self.default_invoice_to
if self.reservation_id:
last_checkout = self.reservation_id.checkout
elif self.service_id and self.service_id.reservation_id:
last_checkout = self.service_id.reservation_id.checkout
else:
last_checkout = self.folio_id.last_checkout
invoicing_policy = (
self.pms_property_id.default_invoicing_policy
if not partner or partner.invoicing_policy == "property"
else partner.invoicing_policy
)
if invoicing_policy == "manual":
return False
if invoicing_policy == "checkout":
margin_days = (
self.pms_property_id.margin_days_autoinvoice
if not partner or partner.invoicing_policy == "property"
else partner.margin_days_autoinvoice
)
return last_checkout + timedelta(days=margin_days)
if invoicing_policy == "month_day":
month_day = (
self.pms_property_id.invoicing_month_day
if not partner or partner.invoicing_policy == "property"
else partner.invoicing_month_day
)
if last_checkout.day <= month_day:
self.autoinvoice_date = last_checkout.replace(day=month_day)
else:
self.autoinvoice_date = (
last_checkout + relativedelta.relativedelta(months=1)
).replace(day=month_day)
@api.depends("date_order")
def _compute_reservation_order(self):
for record in self:

View File

@@ -952,7 +952,7 @@ class PmsCheckinPartner(models.Model):
)[self.id]
self.reservation_id.message_post(body=body)
if self.reservation_id.to_send_mail:
if self.reservation_id.to_send_exit_mail:
emails = self.reservation_id.checkin_partner_ids.mapped("email")
if (
self.reservation_id.partner_id
@@ -972,4 +972,4 @@ class PmsCheckinPartner(models.Model):
"body_html", [6, 0, self.id], compute_lang=True, post_process=True
)[self.id]
self.reservation_id.message_post(body=body)
self.reservation_id.to_send_mail = False
self.reservation_id.to_send_exit_mail = False

View File

@@ -4,11 +4,8 @@
import datetime
import logging
from datetime import timedelta
from itertools import groupby
from dateutil import relativedelta
from odoo import _, api, fields, models
from odoo.exceptions import AccessError, UserError, ValidationError
from odoo.tools import float_compare, float_is_zero
@@ -204,17 +201,19 @@ class PmsFolio(models.Model):
ondelete="restrict",
check_pms_properties=True,
)
channel_type_id = fields.Many2one(
string="Direct Sale Channel",
help="Only allowed if the field of sale channel channel_type is 'direct'",
readonly=False,
sale_channel_ids = fields.Many2many(
string="Sale Channels",
help="Sale Channels through which reservations were managed",
store=True,
compute="_compute_sale_channel_ids",
comodel_name="pms.sale.channel",
domain=[("channel_type", "=", "direct")],
ondelete="restrict",
compute="_compute_channel_type_id",
check_pms_properties=True,
)
sale_channel_origin_id = fields.Many2one(
string="Sale Channel Origin",
help="Sale Channel through which folio was created, the original",
comodel_name="pms.sale.channel",
)
transaction_ids = fields.Many2many(
string="Transactions",
help="Payments made through payment acquirer",
@@ -623,13 +622,11 @@ class PmsFolio(models.Model):
folio_lines_to_invoice = folio.sale_line_ids.filtered(
lambda l: l.id in list(lines_to_invoice.keys())
)
folio_partner_invoice_id = partner_invoice_id
if not folio_partner_invoice_id:
folio_partner_invoice_id = folio._get_default_partner_invoice_id()
folio._set_default_partner_invoice_id(
folio_lines_to_invoice, partner_invoice_id
)
groups_invoice_lines = folio._get_groups_invoice_lines(
lines_to_invoice=folio_lines_to_invoice,
partner_invoice_id=folio_partner_invoice_id,
)
for group in groups_invoice_lines:
folio = folio.with_company(folio.company_id)
@@ -696,60 +693,49 @@ class PmsFolio(models.Model):
invoice_vals_list.append(invoice_vals)
return invoice_vals_list
def _get_groups_invoice_lines(self, lines_to_invoice, partner_invoice_id):
def _get_groups_invoice_lines(self, lines_to_invoice):
self.ensure_one()
target_lines = lines_to_invoice
if self._context.get("lines_auto_add") and partner_invoice_id:
folio_partner_invoice = self.env["res.partner"].browse(partner_invoice_id)
if folio_partner_invoice.default_invoice_lines == "overnights":
target_lines = target_lines.filtered(
lambda r: r.is_board_service
or (r.reservation_line_ids and r.reservation_id.overnight_room)
)
elif folio_partner_invoice.default_invoice_lines == "reservations":
target_lines = target_lines.filtered(
lambda r: r.is_board_service or r.reservation_line_ids
)
elif folio_partner_invoice.default_invoice_lines == "services":
target_lines = target_lines.filtered(
lambda r: not r.is_board_service or r.service_line_ids
)
groups_invoice_lines = [
{
"partner_id": partner_invoice_id,
"lines": target_lines,
}
]
if (
self.autoinvoice_date
and self.autoinvoice_date <= fields.Date.today()
and len(target_lines) < len(lines_to_invoice)
):
other_partner_to_invoice = self.partner_invoice_ids.filtered(
lambda p: p.id != partner_invoice_id
)
if not other_partner_to_invoice:
other_partner_to_invoice = self.env.ref("pms.various_pms_partner")
groups_invoice_lines = []
partners = lines_to_invoice.mapped("default_invoice_to")
for partner in partners:
groups_invoice_lines.append(
{
"partner_id": other_partner_to_invoice.id,
"lines": lines_to_invoice - target_lines,
"partner_id": partner.id,
"lines": lines_to_invoice.filtered(
lambda l: l.default_invoice_to == partner
),
}
)
return groups_invoice_lines
def _get_default_partner_invoice_id(self):
def _set_default_partner_invoice_id(
self, lines_to_invoice, folio_partner_invoice_id=False
):
# By priotiy:
# 1º- Partner set in parameter,
# 2º- Partner in default_invoice_to in line
# 3º- Partner in folio,
# 4º- Partner in checkins,
# 5º- Generic various partner
self.ensure_one()
folio_partner_invoice_id = False
if self.partner_id and self.partner_id.vat:
folio_partner_invoice_id = self.partner_id.id
if not folio_partner_invoice_id:
folio_partner_invoice_id = (
self.partner_invoice_ids[0].id if self.partner_invoice_ids else False
for line in lines_to_invoice:
if not folio_partner_invoice_id and line.default_invoice_to:
folio_partner_invoice_id = line.default_invoice_to
if (
not folio_partner_invoice_id
and self.partner_id
and self.partner_id._check_enought_invoice_data()
and not self.partner_id.is_agency
):
folio_partner_invoice_id = self.partner_id.id
checkin_invoice_partner = self.checkin_partner_ids.filtered(
lambda c: c.partner_id and c.partner_id._check_enought_invoice_data()
)
if not folio_partner_invoice_id:
folio_partner_invoice_id = self.env.ref("pms.various_pms_partner").id
return folio_partner_invoice_id
if not folio_partner_invoice_id and checkin_invoice_partner:
folio_partner_invoice_id = checkin_invoice_partner[0].partner_id
if not folio_partner_invoice_id:
folio_partner_invoice_id = self.env.ref("pms.various_pms_partner").id
line.default_invoice_to = folio_partner_invoice_id
def _get_tax_amount_by_group(self):
self.ensure_one()
@@ -787,42 +773,6 @@ class PmsFolio(models.Model):
else:
return False
@api.depends("partner_id", "invoice_status", "last_checkout", "partner_invoice_ids")
def _compute_autoinvoice_date(self):
self.autoinvoice_date = False
for record in self.filtered(lambda r: r.invoice_status == "to_invoice"):
record.autoinvoice_date = record._get_to_invoice_date()
def _get_to_invoice_date(self):
self.ensure_one()
partner = self.partner_id
invoicing_policy = (
self.pms_property_id.default_invoicing_policy
if not partner or partner.invoicing_policy == "property"
else partner.invoicing_policy
)
if invoicing_policy == "manual":
return False
if invoicing_policy == "checkout":
margin_days = (
self.pms_property_id.margin_days_autoinvoice
if not partner or partner.invoicing_policy == "property"
else partner.margin_days_autoinvoice
)
return self.last_checkout + timedelta(days=margin_days)
if invoicing_policy == "month_day":
month_day = (
self.pms_property_id.invoicing_month_day
if not partner or partner.invoicing_policy == "property"
else partner.invoicing_month_day
)
if self.last_checkout.day <= month_day:
self.autoinvoice_date = self.last_checkout.replace(day=month_day)
else:
self.autoinvoice_date = (
self.last_checkout + relativedelta.relativedelta(months=1)
).replace(day=month_day)
@api.depends("reservation_ids", "reservation_ids.state")
def _compute_number_of_rooms(self):
for folio in self:
@@ -846,6 +796,7 @@ class PmsFolio(models.Model):
"reservation_ids",
"service_ids",
"service_ids.reservation_id",
"service_ids.default_invoice_to",
"service_ids.service_line_ids.price_day_total",
"service_ids.service_line_ids.discount",
"service_ids.service_line_ids.cancel_discount",
@@ -855,6 +806,7 @@ class PmsFolio(models.Model):
"reservation_ids.reservation_line_ids.price",
"reservation_ids.reservation_line_ids.discount",
"reservation_ids.reservation_line_ids.cancel_discount",
"reservation_ids.reservation_line_ids.default_invoice_to",
"reservation_ids.tax_ids",
)
def _compute_sale_line_ids(self):
@@ -1048,11 +1000,23 @@ class PmsFolio(models.Model):
if reservation.commission_amount != 0:
folio.commission = folio.commission + reservation.commission_amount
@api.depends("agency_id")
def _compute_channel_type_id(self):
for folio in self:
if folio.agency_id:
folio.channel_type_id = folio.agency_id.sale_channel_id.id
@api.depends(
"reservation_ids",
"reservation_ids.sale_channel_ids",
"service_ids",
"service_ids.sale_channel_origin_id",
)
def _compute_sale_channel_ids(self):
for record in self:
sale_channel_ids = []
if record.reservation_ids:
for sale in record.reservation_ids.mapped("sale_channel_ids.id"):
sale_channel_ids.append(sale)
if record.service_ids:
for sale in record.service_ids.mapped("sale_channel_origin_id.id"):
sale_channel_ids.append(sale)
sale_channel_ids = list(set(sale_channel_ids))
record.sale_channel_ids = [(6, 0, sale_channel_ids)]
@api.depends("sale_line_ids.invoice_lines")
def _compute_get_invoiced(self):
@@ -1427,7 +1391,7 @@ class PmsFolio(models.Model):
record.days_to_checkin = (record.first_checkin - fields.Date.today()).days
def _search_days_to_checkin(self, operator, value):
target_date = fields.Date.today() + timedelta(days=value)
target_date = fields.Date.today() + datetime.timedelta(days=value)
if operator in ("=", ">=", ">", "<=", "<"):
return [("first_checkin", operator, target_date)]
raise UserError(
@@ -1446,7 +1410,7 @@ class PmsFolio(models.Model):
record.days_to_checkout = (record.last_checkout - fields.Date.today()).days
def _search_days_to_checkout(self, operator, value):
target_date = fields.Date.today() + timedelta(days=value)
target_date = fields.Date.today() + datetime.timedelta(days=value)
if operator in ("=", ">=", ">", "<=", "<"):
return [("last_checkout", operator, target_date)]
raise UserError(
@@ -1491,18 +1455,6 @@ class PmsFolio(models.Model):
("sale_line_ids.invoice_lines.move_id", operator, value),
]
@api.constrains("agency_id", "channel_type_id")
def _check_only_one_channel(self):
for record in self:
if (
record.agency_id
and record.channel_type_id.channel_type
!= record.agency_id.sale_channel_id.channel_type
):
raise models.ValidationError(
_("The Sale Channel does not correspond to the agency's")
)
@api.constrains("name")
def _check_required_partner_name(self):
for record in self:
@@ -1523,6 +1475,52 @@ class PmsFolio(models.Model):
result.access_token = result._portal_ensure_token()
return result
def write(self, vals):
reservations_to_update = self.env["pms.reservation"]
services_to_update = self.env["pms.service"]
if "sale_channel_origin_id" in vals:
reservations_to_update = self.get_reservations_to_update_channel(vals)
services_to_update = self.get_services_to_update_channel(vals)
res = super(PmsFolio, self).write(vals)
if reservations_to_update:
reservations_to_update.sale_channel_origin_id = vals[
"sale_channel_origin_id"
]
if services_to_update:
services_to_update.sale_channel_origin_id = vals["sale_channel_origin_id"]
return res
def get_reservations_to_update_channel(self, vals):
reservations_to_update = self.env["pms.reservation"]
for record in self:
for reservation in record.reservation_ids:
if (
reservation.sale_channel_origin_id == self.sale_channel_origin_id
) and (
vals["sale_channel_origin_id"]
!= reservation.sale_channel_origin_id.id
):
reservations_to_update += reservation
return reservations_to_update
def get_services_to_update_channel(self, vals):
services_to_update = self.env["pms.service"]
for record in self:
for service in record.service_ids:
if (
not service.reservation_id
and (service.sale_channel_origin_id == self.sale_channel_origin_id)
and (
vals["sale_channel_origin_id"]
!= service.sale_channel_origin_id.id
)
):
services_to_update += service
return services_to_update
def action_pay(self):
self.ensure_one()
self.ensure_one()
@@ -1860,9 +1858,17 @@ class PmsFolio(models.Model):
self = self.with_context(lines_auto_add=True)
lines_to_invoice = dict()
for line in self.sale_line_ids:
lines_to_invoice[line.id] = (
0 if line.display_type else line.qty_to_invoice
)
if not self._context.get("autoinvoice"):
lines_to_invoice[line.id] = (
0 if line.display_type else line.qty_to_invoice
)
elif (
line.autoinvoice_date
and line.autoinvoice_date <= fields.Date.today()
):
lines_to_invoice[line.id] = (
0 if line.display_type else line.qty_to_invoice
)
invoice_vals_list = self.get_invoice_vals_list(
final=final,
lines_to_invoice=lines_to_invoice,
@@ -2325,8 +2331,8 @@ class PmsFolio(models.Model):
("reservation_id", "=", reservation.id),
("cancel_discount", "<", 100),
],
["price", "discount", "cancel_discount"],
["price", "discount", "cancel_discount"],
["price", "discount", "cancel_discount", "default_invoice_to"],
["price", "discount", "cancel_discount", "default_invoice_to"],
lazy=False,
)
current_sale_line_ids = reservation.sale_line_ids.filtered(
@@ -2341,13 +2347,17 @@ class PmsFolio(models.Model):
final_discount = self.concat_discounts(
item["discount"], item["cancel_discount"]
)
partner_invoice = lines_to.mapped("default_invoice_to")
if current_sale_line_ids and index <= (len(current_sale_line_ids) - 1):
current = {
"price_unit": item["price"],
"discount": final_discount,
"reservation_line_ids": [(6, 0, lines_to.ids)],
"sequence": sequence,
"default_invoice_to": partner_invoice[0].id
if partner_invoice
else current_sale_line_ids[index].default_invoice_to,
}
sale_reservation_vals.append(
(1, current_sale_line_ids[index].id, current)
@@ -2362,6 +2372,9 @@ class PmsFolio(models.Model):
"tax_ids": [(6, 0, reservation.tax_ids.ids)],
"reservation_line_ids": [(6, 0, lines_to.ids)],
"sequence": sequence,
"default_invoice_to": partner_invoice[0].id
if partner_invoice
else False,
}
sale_reservation_vals.append((0, 0, new))
folio_sale_lines_to_remove = []
@@ -2384,8 +2397,8 @@ class PmsFolio(models.Model):
("service_id", "=", service.id),
("cancel_discount", "<", 100),
],
["price_unit", "discount", "cancel_discount"],
["price_unit", "discount", "cancel_discount"],
["price_unit", "discount", "cancel_discount", "default_invoice_to"],
["price_unit", "discount", "cancel_discount", "default_invoice_to"],
lazy=False,
)
current_sale_service_ids = reservation.sale_line_ids.filtered(
@@ -2399,7 +2412,7 @@ class PmsFolio(models.Model):
final_discount = self.concat_discounts(
item["discount"], item["cancel_discount"]
)
partner_invoice = lines_to.mapped("default_invoice_to")
if current_sale_service_ids and index <= (
len(current_sale_service_ids) - 1
):
@@ -2408,6 +2421,9 @@ class PmsFolio(models.Model):
"discount": final_discount,
"service_line_ids": [(6, 0, lines_to.ids)],
"sequence": sequence,
"default_invoice_to": partner_invoice[0].id
if partner_invoice
else current_sale_service_ids[index].default_invoice_to,
}
sale_service_vals.append(
(1, current_sale_service_ids[index].id, current)
@@ -2423,6 +2439,9 @@ class PmsFolio(models.Model):
"product_id": service.product_id.id,
"tax_ids": [(6, 0, service.tax_ids.ids)],
"sequence": sequence,
"default_invoice_to": partner_invoice[0].id
if partner_invoice
else False,
}
sale_service_vals.append((0, 0, new))
sequence = sequence + 1

View File

@@ -607,7 +607,7 @@ class PmsProperty(models.Model):
"""
folios = self.env["pms.folio"].search(
[
("autoinvoice_date", "=", fields.date.today()),
("sale_line_ids.autoinvoice_date", "=", fields.date.today()),
("invoice_status", "=", "to_invoice"),
]
)

View File

@@ -124,13 +124,33 @@ class PmsReservation(models.Model):
depends=["folio_id.agency_id"],
tracking=True,
)
channel_type_id = fields.Many2one(
string="Channel Type",
help="Sales Channel through which the reservation was managed",
readonly=False,
sale_channel_ids = fields.Many2many(
string="Sale Channels",
help="Sale Channels through which reservation lines were managed",
store=True,
related="folio_id.channel_type_id",
tracking=True,
compute="_compute_sale_channel_ids",
comodel_name="pms.sale.channel",
)
sale_channel_origin_id = fields.Many2one(
string="Sale Channel Origin",
help="Sale Channel through which reservation was created, the original",
default=lambda self: self._get_default_sale_channel_origin(),
comodel_name="pms.sale.channel",
)
force_update_origin = fields.Boolean(
string="Update Sale Channel Origin",
help="This field is for force update in sale channel "
"origin of folio and another reservations",
store=True,
readonly=False,
compute="_compute_force_update_origin",
)
is_origin_channel_check_visible = fields.Boolean(
string="Check force update origin visible",
help="Technical field to make visible update " "origin channel check",
store=True,
readonly=False,
compute="_compute_is_origin_channel_check_visible",
)
closure_reason_id = fields.Many2one(
string="Closure Reason",
@@ -1314,7 +1334,13 @@ class PmsReservation(models.Model):
reservation.preferred_room_id = False
else:
reservation.splitted = False
if room_ids:
# Set automatically preferred_room_id if, and only if,
# all nights has the same room
if (
len(room_ids) == 1
and len(reservation.reservation_line_ids)
== (reservation.checkout - reservation.checkin).days
):
reservation.preferred_room_id = room_ids[0]
@api.depends(
@@ -1608,6 +1634,50 @@ class PmsReservation(models.Model):
else:
record.lang = self.env["res.lang"].get_installed()
@api.depends(
"reservation_line_ids",
"reservation_line_ids.sale_channel_id",
"service_ids",
"service_ids.sale_channel_origin_id",
)
def _compute_sale_channel_ids(self):
for record in self:
sale_channel_ids = []
if record.reservation_line_ids:
for sale in record.reservation_line_ids.mapped("sale_channel_id.id"):
sale_channel_ids.append(sale)
if record.service_ids:
for sale in record.service_ids.mapped("sale_channel_origin_id.id"):
sale_channel_ids.append(sale)
sale_channel_ids = list(set(sale_channel_ids))
record.sale_channel_ids = [(6, 0, sale_channel_ids)]
@api.depends("agency_id")
def _compute_sale_channel_origin_id(self):
for record in self:
# if record.folio_id.sale_channel_origin_id and not record.sale_channel_origin_id:
# record.sale_channel_origin_id = record.folio_id.sale_channel_origin_id
if record.agency_id:
record.sale_channel_origin_id = record.agency_id.sale_channel_id
@api.depends("sale_channel_origin_id")
def _compute_is_origin_channel_check_visible(self):
for record in self:
if (
record.sale_channel_origin_id != record.folio_id.sale_channel_origin_id
and record.folio_id
# and isinstance(self.id, int)
and record._origin.sale_channel_origin_id.id
):
record.is_origin_channel_check_visible = True
else:
record.is_origin_channel_check_visible = False
@api.depends("sale_channel_origin_id")
def _compute_force_update_origin(self):
for record in self:
record.force_update_origin = True
def _search_allowed_checkin(self, operator, value):
if operator not in ("=",):
raise UserError(
@@ -1674,6 +1744,17 @@ class PmsReservation(models.Model):
segmentation_ids = folio.segmentation_ids
return segmentation_ids
def _get_default_sale_channel_origin(self):
folio = False
sale_channel_origin_id = False
if "default_folio_id" in self._context:
folio = self.env["pms.folio"].search(
[("id", "=", self._context["default_folio_id"])]
)
if folio and folio.sale_channel_origin_id:
sale_channel_origin_id = folio.sale_channel_origin_id
return sale_channel_origin_id
def check_in_out_dates(self):
"""
1.-When date_order is less then checkin date or
@@ -1812,6 +1893,19 @@ class PmsReservation(models.Model):
)
)
@api.constrains("sale_channel_ids")
def _check_lines_with_sale_channel_id(self):
for record in self.filtered("sale_channel_origin_id"):
if record.reservation_line_ids:
if record.sale_channel_origin_id not in record.sale_channel_ids:
raise ValidationError(
_(
"Reservation must have one reservation line "
"with sale channel equal to sale channel origin of reservation."
"Change sale_channel_origin of reservation before"
)
)
# Action methods
def open_partner(self):
"""Utility method used to add an "View Customer" button in reservation views"""
@@ -1942,36 +2036,23 @@ class PmsReservation(models.Model):
default_vals["email"] = folio.email
elif vals.get("reservation_type") != "out":
raise ValidationError(_("Partner contact name is required"))
if folio.sale_channel_origin_id and "sale_channel_origin_id" not in vals:
default_vals["sale_channel_origin_id"] = folio.sale_channel_origin_id.id
vals.update(default_vals)
elif "pms_property_id" in vals and (
"partner_name" in vals or "partner_id" in vals or "agency_id" in vals
elif (
"pms_property_id" in vals
and "sale_channel_origin_id" in vals
and ("partner_name" in vals or "partner_id" in vals or "agency_id" in vals)
):
folio_vals = {
"pms_property_id": vals["pms_property_id"],
}
if vals.get("partner_id"):
folio_vals["partner_id"] = vals.get("partner_id")
elif vals.get("agency_id"):
folio_vals["agency_id"] = vals.get("agency_id")
elif vals.get("partner_name"):
folio_vals["partner_name"] = vals.get("partner_name")
folio_vals["mobile"] = vals.get("mobile")
folio_vals["email"] = vals.get("email")
elif vals.get("reservation_type") != "out":
raise ValidationError(_("Partner contact name is required"))
folio_vals = self._get_folio_vals(vals)
self._check_clousure_reason(
reservation_type=vals.get("reservation_type"),
closure_reason_id=vals.get("closure_reason_id"),
)
# Create the folio in case of need
# (To allow to create reservations direct)
if vals.get("reservation_type"):
folio_vals["reservation_type"] = vals.get("reservation_type")
if vals.get("reservation_type") == "out" and not vals.get(
"closure_reason_id"
):
raise ValidationError(
_(
"A closure reason is mandatory when reservation"
" type is 'out of service'"
)
)
folio = self.env["pms.folio"].create(folio_vals)
vals.update(
{
@@ -1981,7 +2062,11 @@ class PmsReservation(models.Model):
)
else:
raise ValidationError(_("The Property are mandatory in the reservation"))
raise ValidationError(
_(
"The Property and Sale Channel Origin are mandatory in the reservation"
)
)
if vals.get("name", _("New")) == _("New") or "name" not in vals:
folio_sequence = (
max(folio.mapped("reservation_ids.folio_sequence")) + 1
@@ -2004,13 +2089,62 @@ class PmsReservation(models.Model):
return record
def write(self, vals):
asset = super(PmsReservation, self).write(vals)
folios_to_update_channel = self.env["pms.folio"]
lines_to_update_channel = self.env["pms.reservation.line"]
services_to_update_channel = self.env["pms.service"]
if "sale_channel_origin_id" in vals:
folios_to_update_channel = self.get_folios_to_update_channel(vals)
lines_to_update_channel = self.get_lines_to_update_channel(vals)
services_to_update_channel = self.get_services_to_update_channel(vals)
res = super(PmsReservation, self).write(vals)
if folios_to_update_channel:
folios_to_update_channel.sale_channel_origin_id = vals[
"sale_channel_origin_id"
]
if lines_to_update_channel:
lines_to_update_channel.sale_channel_id = vals["sale_channel_origin_id"]
if services_to_update_channel:
services_to_update_channel.sale_channel_origin_id = vals[
"sale_channel_origin_id"
]
self._check_services(vals)
# Only check if adult to avoid to check capacity in intermediate states (p.e. flush)
# that not take access to possible extra beds service in vals
if "adults" in vals:
self._check_capacity()
return asset
return res
def _get_folio_vals(self, reservation_vals):
folio_vals = {
"pms_property_id": reservation_vals["pms_property_id"],
}
if reservation_vals.get("sale_channel_origin_id"):
folio_vals["sale_channel_origin_id"] = reservation_vals.get(
"sale_channel_origin_id"
)
if reservation_vals.get("partner_id"):
folio_vals["partner_id"] = reservation_vals.get("partner_id")
elif reservation_vals.get("agency_id"):
folio_vals["agency_id"] = reservation_vals.get("agency_id")
elif reservation_vals.get("partner_name"):
folio_vals["partner_name"] = reservation_vals.get("partner_name")
folio_vals["mobile"] = reservation_vals.get("mobile")
folio_vals["email"] = reservation_vals.get("email")
elif reservation_vals.get("reservation_type") != "out":
raise ValidationError(_("Partner contact name is required"))
if reservation_vals.get("reservation_type"):
folio_vals["reservation_type"] = reservation_vals.get("reservation_type")
return folio_vals
def _check_clousure_reason(self, reservation_type, closure_reason_id):
if reservation_type == "out" and not closure_reason_id:
raise ValidationError(
_(
"A closure reason is mandatory when reservation"
" type is 'out of service'"
)
)
def _check_services(self, vals):
# If we create a reservation with board service and other service at the same time,
@@ -2019,6 +2153,47 @@ class PmsReservation(models.Model):
if "board_service_room_id" in vals and "service_ids" in vals:
self._compute_service_ids()
def get_folios_to_update_channel(self, vals):
folios_to_update_channel = self.env["pms.folio"]
for folio in self.mapped("folio_id"):
if (
any(
res.sale_channel_origin_id == folio.sale_channel_origin_id
for res in self.filtered(lambda r: r.folio_id == folio)
)
and vals["sale_channel_origin_id"] != folio.sale_channel_origin_id.id
and (
("force_update_origin" in vals and vals.get("force_update_origin"))
or len(folio.reservation_ids) == 1
)
):
folios_to_update_channel += folio
return folios_to_update_channel
def get_lines_to_update_channel(self, vals):
lines_to_update_channel = self.env["pms.reservation.line"]
for record in self:
for line in record.reservation_line_ids:
if line.sale_channel_id == record.sale_channel_origin_id and (
vals["sale_channel_origin_id"] != line.sale_channel_id.id
):
lines_to_update_channel += line
return lines_to_update_channel
def get_services_to_update_channel(self, vals):
services_to_update_channel = self.env["pms.service"]
for record in self:
for service in record.service_ids:
if (
service.sale_channel_origin_id == record.sale_channel_origin_id
and (
vals["sale_channel_origin_id"]
!= service.sale_channel_origin_id.id
)
):
services_to_update_channel += service
return services_to_update_channel
def update_prices(self):
self.ensure_one()
for line in self.reservation_line_ids:

View File

@@ -45,8 +45,7 @@ class PmsReservationLine(models.Model):
)
pms_property_id = fields.Many2one(
string="Property",
help="Property with access to the element;"
" if not set, all properties can access",
help="Property with access to the element",
readonly=True,
store=True,
comodel_name="pms.property",
@@ -113,6 +112,24 @@ class PmsReservationLine(models.Model):
readonly=False,
compute="_compute_overbooking",
)
sale_channel_id = fields.Many2one(
string="Sale Channel",
help="Sale Channel through which reservation line was created",
comodel_name="pms.sale.channel",
check_pms_properties=True,
)
default_invoice_to = fields.Many2one(
string="Invoice to",
help="""Indicates the contact to which this line will be
billed by default, if it is not established,
a guest or the generic contact will be used instead""",
readonly=False,
store=True,
compute="_compute_default_invoice_to",
comodel_name="res.partner",
ondelete="restrict",
)
_sql_constraints = [
(
"rule_availability",
@@ -480,9 +497,19 @@ class PmsReservationLine(models.Model):
@api.model_create_multi
def create(self, vals_list):
for vals in vals_list:
if vals.get("reservation_id") and not vals.get("sale_channel_id"):
reservation = self.env["pms.reservation"].browse(
vals.get("reservation_id")
)
vals["sale_channel_id"] = reservation.sale_channel_origin_id.id
records = super().create(vals_list)
for line in records:
reservation = line.reservation_id
# Set default channel
if not line.sale_channel_id:
line.sale_channel_id = reservation.sale_channel_origin_id.id
# Update quota
self.env["pms.availability.plan"].update_quota(
pricelist_id=reservation.pricelist_id.id,
room_type_id=reservation.room_type_id.id,
@@ -491,6 +518,19 @@ class PmsReservationLine(models.Model):
)
return records
@api.depends("sale_channel_id", "reservation_id.agency_id")
def _compute_default_invoice_to(self):
for record in self:
agency = record.reservation_id.agency_id
if (
agency
and agency.invoice_to_agency == "always"
and agency.sale_channel_id == record.sale_channel_id
):
record.default_invoice_to = agency
elif not record.default_invoice_to:
record.default_invoice_to = False
# Constraints and onchanges
@api.constrains("date")
def constrains_duplicated_date(self):

View File

@@ -146,17 +146,11 @@ class PmsService(models.Model):
("no", "Nothing to Invoice"),
],
)
channel_type = fields.Selection(
string="Sales Channel",
help="sales channel through which the service was sold."
"It can be 'door', 'mail', 'phone', 'call' or 'web'",
selection=[
("door", "Door"),
("mail", "Mail"),
("phone", "Phone"),
("call", "Call Center"),
("web", "Web"),
],
sale_channel_origin_id = fields.Many2one(
string="Sale Channel Origin",
help="Sale Channel through which service was created, the original",
comodel_name="pms.sale.channel",
check_pms_properties=True,
)
price_subtotal = fields.Monetary(
string="Subtotal",
@@ -197,6 +191,17 @@ class PmsService(models.Model):
""",
default=False,
)
default_invoice_to = fields.Many2one(
string="Invoice to",
help="""Indicates the contact to which this line will be
billed by default, if it is not established,
a guest or the generic contact will be used instead""",
readonly=False,
store=True,
compute="_compute_default_invoice_to",
comodel_name="res.partner",
ondelete="restrict",
)
# Compute and Search methods
@api.depends("product_id")
@@ -425,6 +430,19 @@ class PmsService(models.Model):
line.discount = record.discount
line.cancel_discount = 0
@api.depends("sale_channel_origin_id", "folio_id.agency_id")
def _compute_default_invoice_to(self):
for record in self:
agency = record.folio_id.agency_id
if (
agency
and agency.invoice_to_agency == "always"
and agency.sale_channel_id == record.sale_channel_origin_id
):
record.default_invoice_to = agency
elif not record.default_invoice_to:
record.default_invoice_to = False
def name_get(self):
result = []
for rec in self:
@@ -534,3 +552,49 @@ class PmsService(models.Model):
)
else:
return 0
@api.model
def create(self, vals):
if vals.get("reservation_id") and not vals.get("sale_channel_origin_id"):
reservation = self.env["pms.reservation"].browse(vals["reservation_id"])
if reservation.sale_channel_origin_id:
vals["sale_channel_origin_id"] = reservation.sale_channel_origin_id.id
elif (
vals.get("folio_id")
and not vals.get("reservation_id")
and not vals.get("sale_channel_origin_id")
):
folio = self.env["pms.folio"].browse(vals["folio_id"])
if folio.sale_channel_origin_id:
vals["sale_channel_origin_id"] = folio.sale_channel_origin_id.id
record = super(PmsService, self).create(vals)
return record
def write(self, vals):
folios_to_update_channel = self.env["pms.folio"]
lines_to_update_channel = self.env["pms.service.line"]
if "sale_channel_origin_id" in vals:
folios_to_update_channel = self.get_folios_to_update_channel(vals)
res = super(PmsService, self).write(vals)
if folios_to_update_channel:
folios_to_update_channel.sale_channel_origin_id = vals[
"sale_channel_origin_id"
]
if lines_to_update_channel:
lines_to_update_channel.sale_channel_id = vals["sale_channel_origin_id"]
return res
def get_folios_to_update_channel(self, vals):
folios_to_update_channel = self.env["pms.folio"]
for folio in self.mapped("folio_id"):
if (
any(
service.sale_channel_origin_id == folio.sale_channel_origin_id
for service in self.filtered(lambda r: r.folio_id == folio)
)
and vals["sale_channel_origin_id"] != folio.sale_channel_origin_id.id
and (len(folio.reservation_ids) == 0)
and (len(folio.service_ids) == 1)
):
folios_to_update_channel += folio
return folios_to_update_channel

View File

@@ -133,6 +133,16 @@ class PmsServiceLine(models.Model):
readonly=False,
store=True,
)
default_invoice_to = fields.Many2one(
string="Invoice to",
help="""Indicates the contact to which this line will be
billed by default, if it is not established,
a guest or the generic contact will be used instead""",
comodel_name="res.partner",
store=True,
related="service_id.default_invoice_to",
ondelete="restrict",
)
@api.depends("day_qty", "discount", "price_unit", "tax_ids")
def _compute_day_amount_service(self):

View File

@@ -25,5 +25,5 @@ class ResCompany(models.Model):
string="Check minimum partner data for invoices",
help="""Check minimum partner data for invoices:
- VAT, name, street, city, country""",
default=True,
default=False,
)

View File

@@ -192,22 +192,6 @@ class ResPartner(models.Model):
string="Days from Checkout",
help="Days from Checkout to generate the invoice",
)
default_invoice_lines = fields.Selection(
string="Invoice...",
help="""Use to preconfigure the sale lines to autoinvoice
for this partner. All (invoice reservations and services),
Only overnights to invoice only the reservations
with overnight and board services(exclude parkings, salon, etc...),
All reservations to include all reservations,
and Services only include services not boards""",
selection=[
("all", "All"),
("overnights", "Only Overnights"),
("reservations", "All reservations"),
("services", "Services"),
],
default="all",
)
vat_document_type = fields.Selection(
string="Document Type",
help="""The vat document type of the partner,

View File

@@ -40,3 +40,4 @@ from . import test_pms_multiproperty
from . import test_shared_room
# from . import test_automated_mails
from . import test_pms_service

View File

@@ -25,7 +25,13 @@ class TestPmsRoomTypeAvailabilityRules(TestPms):
],
}
)
# pms.sale.channel
self.sale_channel_direct1 = self.env["pms.sale.channel"].create(
{
"name": "Door",
"channel_type": "direct",
}
)
# pms.availability.plan
self.test_room_type_availability1 = self.env["pms.availability.plan"].create(
{
@@ -164,6 +170,7 @@ class TestPmsRoomTypeAvailabilityRules(TestPms):
"checkout": checkout,
"partner_id": self.partner1.id,
"room_type_id": room_type.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
result = self.test_room_type_availability_rule1.plan_avail
@@ -209,6 +216,7 @@ class TestPmsRoomTypeAvailabilityRules(TestPms):
"checkout": checkout,
"partner_id": self.partner1.id,
"room_type_id": room_type.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
self.env["pms.reservation"].create(
@@ -218,6 +226,7 @@ class TestPmsRoomTypeAvailabilityRules(TestPms):
"checkout": checkout,
"partner_id": self.partner1.id,
"room_type_id": room_type.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
result = self.test_room_type_availability_rule1.plan_avail
@@ -258,6 +267,7 @@ class TestPmsRoomTypeAvailabilityRules(TestPms):
"checkin": checkin,
"checkout": checkout,
"partner_id": self.partner1.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
@@ -586,6 +596,7 @@ class TestPmsRoomTypeAvailabilityRules(TestPms):
"room_type_id": self.test_room_type_double.id,
"pricelist_id": self.pricelist2.id,
"partner_id": self.partner1.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
r1.flush()

View File

@@ -57,9 +57,13 @@ class TestPmsCheckinPartner(TestPms):
"gender": "male",
}
)
self.id_category = self.env["res.partner.id_category"].create(
{"name": "DNI", "code": "D"}
self.id_category = self.env["res.partner.id_category"].search(
[("code", "=", "D")]
)
if not self.id_category:
self.id_category = self.env["res.partner.id_category"].create(
{"name": "DNI", "code": "D"}
)
self.env["res.partner.id_number"].create(
{
"category_id": self.id_category.id,
@@ -68,6 +72,12 @@ class TestPmsCheckinPartner(TestPms):
"partner_id": self.host1.id,
}
)
self.sale_channel_direct1 = self.env["pms.sale.channel"].create(
{
"name": "Door",
"channel_type": "direct",
}
)
reservation_vals = {
"checkin": datetime.date.today(),
"checkout": datetime.date.today() + datetime.timedelta(days=3),
@@ -75,6 +85,7 @@ class TestPmsCheckinPartner(TestPms):
"partner_id": self.host1.id,
"adults": 3,
"pms_property_id": self.pms_property1.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
self.reservation_1 = self.env["pms.reservation"].create(reservation_vals)
self.checkin1 = self.env["pms.checkin.partner"].create(
@@ -1091,6 +1102,7 @@ class TestPmsCheckinPartner(TestPms):
"pms_property_id": self.pms_property1.id,
"partner_name": partner.name,
"email": partner.email,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
# ACT
@@ -1133,6 +1145,7 @@ class TestPmsCheckinPartner(TestPms):
"room_type_id": self.room_type1.id,
"pms_property_id": self.pms_property1.id,
"partner_name": partner.name,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
# ACT
@@ -1178,6 +1191,7 @@ class TestPmsCheckinPartner(TestPms):
"room_type_id": self.room_type1.id,
"pms_property_id": self.pms_property1.id,
"partner_name": partner.name,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
checkin = self.env["pms.checkin.partner"].create(
@@ -1239,6 +1253,7 @@ class TestPmsCheckinPartner(TestPms):
"room_type_id": self.room_type1.id,
"pms_property_id": self.pms_property1.id,
"partner_name": partner1.name,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
@@ -1286,6 +1301,7 @@ class TestPmsCheckinPartner(TestPms):
"room_type_id": self.room_type1.id,
"pms_property_id": self.pms_property1.id,
"partner_name": "Rosa Costa",
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
checkin = self.env["pms.checkin.partner"].create(
@@ -1539,6 +1555,7 @@ class TestPmsCheckinPartner(TestPms):
"partner_id": self.host1.id,
"adults": 1,
"pms_property_id": self.pms_property1.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
checkin_partner_id = self.reservation.checkin_partner_ids[0]
@@ -1596,6 +1613,7 @@ class TestPmsCheckinPartner(TestPms):
"partner_id": self.host1.id,
"adults": 1,
"pms_property_id": self.pms_property1.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
checkin_partner_id = self.reservation.checkin_partner_ids[0]

View File

@@ -55,6 +55,14 @@ class TestPmsFolio(TestPms):
)
journals.allowed_pms_payments = True
# create sale channel direct
self.sale_channel_direct1 = self.env["pms.sale.channel"].create(
{
"name": "Door",
"channel_type": "direct",
}
)
def create_sale_channel_scenario(self):
"""
Method to simplified scenario on sale channel tests:
@@ -410,6 +418,7 @@ class TestPmsFolio(TestPms):
"adults": 2,
"partner_id": self.env.ref("base.res_partner_12").id,
"room_type_id": self.demo_room_type_double.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
@@ -456,6 +465,7 @@ class TestPmsFolio(TestPms):
"adults": 2,
"partner_id": self.env.ref("base.res_partner_12").id,
"room_type_id": self.demo_room_type_double.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
@@ -542,6 +552,7 @@ class TestPmsFolio(TestPms):
"pms_property_id": self.pms_property1.id,
"pricelist_id": self.pricelist1.id,
"reservation_type": "staff",
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
# ASSERT
@@ -582,6 +593,7 @@ class TestPmsFolio(TestPms):
"pricelist_id": self.pricelist1.id,
"reservation_type": "out",
"closure_reason_id": closure_reason.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
# ASSERT
@@ -1108,3 +1120,419 @@ class TestPmsFolio(TestPms):
folio1.partner_invoice_ids.ids,
"A checkin partner was not added as a billing contact",
)
@freeze_time("2001-10-10")
def test_folio_sale_channel_origin_in_reservation(self):
"""
Check that the reservation has sale_channel_origin_id
as the folio sale_channel_origin_id in
which reservation was created
When a reservation is created on a folio
that already has a sale_channel_origin
that reservation will have the same sale_channel_origin
"""
# ARRANGE
partner1 = self.env["res.partner"].create({"name": "partner1"})
folio1 = self.env["pms.folio"].create(
{
"pms_property_id": self.pms_property1.id,
"partner_name": partner1.name,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
# ACT
reservation1 = self.env["pms.reservation"].create(
{
"checkin": datetime.datetime.now(),
"checkout": datetime.datetime.now() + datetime.timedelta(days=1),
"adults": 2,
"room_type_id": self.room_type_double.id,
"folio_id": folio1.id,
}
)
# ASSERT
self.assertEqual(
reservation1.sale_channel_origin_id.id,
folio1.sale_channel_origin_id.id,
"Sale channel of reservation must be the same that it folio",
)
@freeze_time("2001-10-19")
def test_folio_sale_channel_ids(self):
"""
Check if sale_channel_ids of folio correspond to
sale_channel_origin_id of its reservations at the
time of creating a new reservation in the folio
"""
# ARRANGE
sale_channel_phone = self.env["pms.sale.channel"].create(
{
"name": "phone",
"channel_type": "direct",
}
)
partner1 = self.env["res.partner"].create({"name": "partner1"})
folio1 = self.env["pms.folio"].create(
{
"pms_property_id": self.pms_property1.id,
"partner_name": partner1.name,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
self.env["pms.reservation"].create(
{
"checkin": datetime.datetime.now(),
"checkout": datetime.datetime.now() + datetime.timedelta(days=1),
"adults": 2,
"room_type_id": self.room_type_double.id,
"folio_id": folio1.id,
}
)
self.env["pms.reservation"].create(
{
"checkin": datetime.datetime.now(),
"checkout": datetime.datetime.now() + datetime.timedelta(days=1),
"adults": 2,
"room_type_id": self.room_type_double.id,
"folio_id": folio1.id,
"sale_channel_origin_id": sale_channel_phone.id,
}
)
# ACT
expected_sale_channels = []
for reservation in folio1.reservation_ids:
expected_sale_channels.append(reservation.sale_channel_origin_id.id)
# ASSERT
self.assertItemsEqual(
folio1.sale_channel_ids.ids,
list(set(expected_sale_channels)),
"Sale_channel_ids of folio must be the same as "
"sale_channel_origin of its reservation ",
)
@freeze_time("2001-10-22")
def test_folio_sale_channel_ids_reservations_several_origin(self):
"""
Check that sale_channel_ids of folio correspond to sale_channel_origin_id
of its reservations
In this case, folio1 has two reservations(reservation1, reservation2)
with the same sale_channel_origin.
sale_channel_origin_id sale_channel_ids
-------------------------
Folio1 --------> sale_channel_direct1 || sale_channel_direct1
reservation1 --> sale_channel_direct1
reservation2 --> sale_channel_direct1
Then, reservation2 update sale_channel_origin_id for a diferent one. So the folio
has several reservations with different sale_channel_origin_id.
It should be noted that the check would force having to update
the folio sale_channel_origin_id (force_update_origin) isn't marked.
Expected result:
sale_channel_origin_id sale_channel_ids
----------------------
Folio1 --------> sale_channel_direct1 | (sale_channel_direct1, sale_channel_phone)
reservation1 --> sale_channel_direct1
reservation2 --> sale_channel_phone
In this test case, sale_channel_ids will be checked
"""
# ARRANGE
sale_channel_phone = self.env["pms.sale.channel"].create(
{
"name": "phone",
"channel_type": "direct",
}
)
partner1 = self.env["res.partner"].create({"name": "partner1"})
folio1 = self.env["pms.folio"].create(
{
"pms_property_id": self.pms_property1.id,
"partner_name": partner1.name,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
self.env["pms.reservation"].create(
{
"checkin": datetime.datetime.now(),
"checkout": datetime.datetime.now() + datetime.timedelta(days=1),
"adults": 2,
"room_type_id": self.room_type_double.id,
"folio_id": folio1.id,
}
)
reservation2 = self.env["pms.reservation"].create(
{
"checkin": datetime.datetime.now(),
"checkout": datetime.datetime.now() + datetime.timedelta(days=1),
"adults": 2,
"room_type_id": self.room_type_double.id,
"folio_id": folio1.id,
}
)
# ACT
reservation_vals = {
"sale_channel_origin_id": sale_channel_phone.id,
"force_update_origin": False,
}
reservation2.write(reservation_vals)
expected_sale_channels = []
for reservation in folio1.reservation_ids:
expected_sale_channels.append(reservation.sale_channel_origin_id.id)
# ASSERT
self.assertItemsEqual(
folio1.sale_channel_ids.ids,
list(set(expected_sale_channels)),
"Sale_channel_ids of folio must be the same as "
"sale_channel_origin of its reservation ",
)
@freeze_time("2001-10-22")
def test_sale_channel_origin_id_reservation_not_update_origin(self):
"""
Check that sale_channel_origin_id of folio doesn't change
when sale_channel_origin_id of one of its reservations is updated
but the check isn't checked
In this case, folio1 has two reservations(reservation1, reservation2)
with the same sale_channel_origin.
sale_channel_origin_id
-------------------------
Folio1 --------> sale_channel_direct1
reservation1 --> sale_channel_direct1
reservation2 --> sale_channel_direct1
Then, reservation2 update sale_channel_origin_id for a diferent one. So the folio
has several reservations with different sale_channel_origin_id.
And the check would force having to update
the folio sale_channel_origin_id (force_update_origin) isn't marked.
So sale_channel_origin_id of folio shouldn't change.
Expected result:
sale_channel_origin_id
-------------------------
Folio1 --------> sale_channel_direct1
reservation1 --> sale_channel_direct1
reservation2 --> sale_channel_phone
In this test case, sale_channel_origin_id of folio will be checked
"""
# ARRANGE
sale_channel_phone = self.env["pms.sale.channel"].create(
{
"name": "phone",
"channel_type": "direct",
}
)
partner1 = self.env["res.partner"].create({"name": "partner1"})
folio1 = self.env["pms.folio"].create(
{
"pms_property_id": self.pms_property1.id,
"partner_name": partner1.name,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
self.env["pms.reservation"].create(
{
"checkin": datetime.datetime.now(),
"checkout": datetime.datetime.now() + datetime.timedelta(days=1),
"adults": 2,
"room_type_id": self.room_type_double.id,
"folio_id": folio1.id,
}
)
reservation2 = self.env["pms.reservation"].create(
{
"checkin": datetime.datetime.now(),
"checkout": datetime.datetime.now() + datetime.timedelta(days=1),
"adults": 2,
"room_type_id": self.room_type_double.id,
"folio_id": folio1.id,
}
)
# ACT
reservation_vals = {
"sale_channel_origin_id": sale_channel_phone.id,
"force_update_origin": False,
}
reservation2.write(reservation_vals)
# ASSERT
self.assertNotEqual(
folio1.sale_channel_origin_id,
reservation2.sale_channel_origin_id,
"Sale_channel_origin_id of folio shouldn't be the same as "
"sale_channel_origin of reservation2",
)
@freeze_time("2001-10-25")
def test_sale_channel_origin_id_reservation_update_origin(self):
"""
Check that sale_channel_origin_id of the folio changes when
you change sale_channel_origin_id of one of its reservations
and check that forces the update of sale_channel_origin_id of folio
sale_channel_origin_id
-------------------------
Folio1 --------> sale_channel_direct1
reservation1 --> sale_channel_direct1
reservation2 --> sale_channel_direct1
Then, reservation2 update sale_channel_origin_id for a diferent one. So the folio
has several reservations with different sale_channel_origin_id.
And the check would force having to update
the folio sale_channel_origin_id (force_update_origin) is marked.
So sale_channel_origin_id of folio must change.
Expected result:
sale_channel_origin_id
-------------------------
Folio1 --------> sale_channel_phone
reservation1 --> sale_channel_phone
reservation2 --> sale_channel_phone
In this test case, sale_channel_origin_id of folio1 will be checked
"""
# ARRANGE
sale_channel_phone = self.env["pms.sale.channel"].create(
{
"name": "phone",
"channel_type": "direct",
}
)
partner1 = self.env["res.partner"].create({"name": "partner1"})
folio1 = self.env["pms.folio"].create(
{
"pms_property_id": self.pms_property1.id,
"partner_name": partner1.name,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
self.env["pms.reservation"].create(
{
"checkin": datetime.datetime.now(),
"checkout": datetime.datetime.now() + datetime.timedelta(days=1),
"adults": 2,
"room_type_id": self.room_type_double.id,
"folio_id": folio1.id,
}
)
reservation2 = self.env["pms.reservation"].create(
{
"checkin": datetime.datetime.now(),
"checkout": datetime.datetime.now() + datetime.timedelta(days=1),
"adults": 2,
"room_type_id": self.room_type_double.id,
"folio_id": folio1.id,
}
)
# ACT
reservation_vals = {
"sale_channel_origin_id": sale_channel_phone.id,
"force_update_origin": True,
}
reservation2.write(reservation_vals)
# ASSERT
self.assertEqual(
folio1.sale_channel_origin_id,
reservation2.sale_channel_origin_id,
"Sale_channel_origin_id of folio should be updated",
)
@freeze_time("2001-10-25")
def test_sale_channel_origin_id_reservation_update_reservations(self):
"""
Check that sale_channel_origin_id of a reservation changes when
another reservation of the same folio changes sale_channel_origin_id
and marks the check.
By changing sale_channel_origin_ id of a reservation and marking the check
that forces the update, changes both sale_channel_origin of folio and
sale_channel_origin of reservations that had the same
sale_channel_origin_id
-------------------------
Folio1 --------> sale_channel_direct1
reservation1 --> sale_channel_direct1
reservation2 --> sale_channel_direct1
Then, reservation2 update sale_channel_origin_id for a diferent one.
And the check would force having to update
the folio sale_channel_origin_id (force_update_origin) is marked.
So sale_channel_origin_id of folio and other reservations with the same
sale_channel_origin must change.
Expected result:
sale_channel_origin_id
-------------------------
Folio1 --------> sale_channel_phone
reservation1 --> sale_channel_phone
reservation2 --> sale_channel_phone
In this test case, sale_channel_origin_id of reservation1 will be checked
"""
# ARRANGE
sale_channel_phone = self.env["pms.sale.channel"].create(
{
"name": "phone",
"channel_type": "direct",
}
)
partner1 = self.env["res.partner"].create({"name": "partner1"})
folio1 = self.env["pms.folio"].create(
{
"pms_property_id": self.pms_property1.id,
"partner_name": partner1.name,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
reservation1 = self.env["pms.reservation"].create(
{
"checkin": datetime.datetime.now(),
"checkout": datetime.datetime.now() + datetime.timedelta(days=1),
"adults": 2,
"room_type_id": self.room_type_double.id,
"folio_id": folio1.id,
}
)
reservation2 = self.env["pms.reservation"].create(
{
"checkin": datetime.datetime.now(),
"checkout": datetime.datetime.now() + datetime.timedelta(days=1),
"adults": 2,
"room_type_id": self.room_type_double.id,
"folio_id": folio1.id,
}
)
# ACT
reservation_vals = {
"sale_channel_origin_id": sale_channel_phone.id,
"force_update_origin": True,
}
reservation2.write(reservation_vals)
# ASSERT
self.assertEqual(
reservation1.sale_channel_origin_id,
reservation2.sale_channel_origin_id,
"sale_channel_origin_id of reservations that coincided "
"with sale_channel_origin_id of folio de should be updated",
)

View File

@@ -84,6 +84,14 @@ class TestPmsFolioInvoice(TestPms):
}
)
# create a sale channel
self.sale_channel_direct1 = self.env["pms.sale.channel"].create(
{
"name": "Door",
"channel_type": "direct",
}
)
def create_configuration_accounting_scenario(self):
"""
Method to simplified scenario to payments and accounting:
@@ -153,6 +161,7 @@ class TestPmsFolioInvoice(TestPms):
"adults": 2,
"room_type_id": self.room_type_double.id,
"partner_id": self.partner_id.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
state_expected = "invoiced"
@@ -183,6 +192,7 @@ class TestPmsFolioInvoice(TestPms):
"adults": 2,
"room_type_id": self.room_type_double.id,
"partner_id": self.partner_id.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
dict_lines = dict()
@@ -208,6 +218,7 @@ class TestPmsFolioInvoice(TestPms):
"adults": 2,
"room_type_id": self.room_type_double.id,
"partner_id": self.partner_id.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
dict_lines = dict()
@@ -228,7 +239,6 @@ class TestPmsFolioInvoice(TestPms):
r1.folio_id.invoice_status,
"The status after a partial invoicing is not correct",
)
# qty to 2 to 1st folio sale line
dict_lines[
r1.folio_id.sale_line_ids.filtered(lambda l: not l.display_type)[0].id
@@ -260,6 +270,7 @@ class TestPmsFolioInvoice(TestPms):
"adults": 2,
"room_type_id": self.room_type_double.id,
"partner_id": self.env.ref("base.res_partner_12").id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
tcs = [-1, 0, 3]
@@ -294,6 +305,7 @@ class TestPmsFolioInvoice(TestPms):
"adults": 2,
"room_type_id": self.room_type_double.id,
"partner_id": self.partner_id.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
@@ -321,6 +333,7 @@ class TestPmsFolioInvoice(TestPms):
"adults": 2,
"room_type_id": self.room_type_double.id,
"partner_id": self.partner_id.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
qty_to_invoice_expected = sum(
@@ -348,6 +361,7 @@ class TestPmsFolioInvoice(TestPms):
"adults": 2,
"room_type_id": self.room_type_double.id,
"partner_id": self.partner_id.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
r1.folio_id._create_invoices()
@@ -376,6 +390,7 @@ class TestPmsFolioInvoice(TestPms):
"adults": 2,
"room_type_id": self.room_type_double.id,
"partner_id": self.partner_id.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
@@ -418,6 +433,7 @@ class TestPmsFolioInvoice(TestPms):
"adults": 2,
"room_type_id": self.room_type_double.id,
"partner_id": self.partner_id.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
@@ -461,6 +477,7 @@ class TestPmsFolioInvoice(TestPms):
"adults": 2,
"room_type_id": self.room_type_double.id,
"partner_id": self.partner_id.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
@@ -523,6 +540,7 @@ class TestPmsFolioInvoice(TestPms):
"room_type_id": self.room_type_double.id,
"partner_id": self.partner_id.id,
"board_service_room_id": self.board_service_room_type1.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
dict_lines = dict()
@@ -578,6 +596,7 @@ class TestPmsFolioInvoice(TestPms):
"room_type_id": self.room_type_double.id,
"partner_id": self.partner_id.id,
"board_service_room_id": self.board_service_room_type1.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
dict_lines = dict()
@@ -634,6 +653,7 @@ class TestPmsFolioInvoice(TestPms):
"room_type_id": self.room_type_double.id,
"partner_id": self.partner_id.id,
"board_service_room_id": self.board_service_room_type1.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
dict_lines = dict()
@@ -673,13 +693,14 @@ class TestPmsFolioInvoice(TestPms):
"adults": 2,
"room_type_id": self.room_type_double.id,
"partner_id": self.partner_id.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
# ASSERT
self.assertEqual(
self.assertIn(
datetime.date.today() + datetime.timedelta(days=3),
self.reservation1.folio_id.autoinvoice_date,
self.reservation1.folio_id.mapped("sale_line_ids.autoinvoice_date"),
"The autoinvoice date in folio with property checkout policy is wrong",
)
@@ -704,20 +725,24 @@ class TestPmsFolioInvoice(TestPms):
"adults": 2,
"room_type_id": self.room_type_double.id,
"partner_id": self.partner_id.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
self.reservation1.reservation_line_ids.default_invoice_to = self.partner_id
# ASSERT
self.assertEqual(
datetime.date.today() + datetime.timedelta(days=5),
self.reservation1.folio_id.autoinvoice_date,
self.reservation1.folio_id.sale_line_ids.filtered(
lambda l: l.invoice_status == "to_invoice"
)[0].autoinvoice_date,
"The autoinvoice date in folio with property checkout policy is wrong",
)
def test_autoinvoice_paid_folio_overnights_partner_policy(self):
"""
Test create and invoice the cron by partner preconfig automation
with only overnights reservations (included board services)
with partner setted as default invoiced to in reservation lines
--------------------------------------
Set partner invoicing_policy to checkout, create a reservation
with room, board service and normal service, run autoinvoicing
@@ -727,9 +752,18 @@ class TestPmsFolioInvoice(TestPms):
"""
# ARRANGE
self.create_configuration_accounting_scenario()
self.partner_id2 = self.env["res.partner"].create(
{
"name": "Sara",
"vat": "ES123456787",
"country_id": self.env.ref("base.es").id,
"city": "Madrid",
"zip": "28013",
"street": "Street 321",
}
)
self.partner_id.invoicing_policy = "checkout"
self.partner_id.margin_days_autoinvoice = 0
self.partner_id.default_invoice_lines = "overnights"
self.product1 = self.env["product.product"].create(
{
"name": "Test Product 1",
@@ -773,8 +807,9 @@ class TestPmsFolioInvoice(TestPms):
"checkout": datetime.date.today(),
"adults": 2,
"room_type_id": self.demo_room_type_double.id,
"partner_id": self.partner_id.id,
"partner_id": self.partner_id2.id,
"board_service_room_id": self.board_service_room_type1.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
self.service = self.env["pms.service"].create(
@@ -786,6 +821,11 @@ class TestPmsFolioInvoice(TestPms):
)
folio = self.reservation1.folio_id
reservation1 = self.reservation1
reservation1.reservation_line_ids.default_invoice_to = self.partner_id
reservation1.service_ids.filtered(
"is_board_service"
).default_invoice_to = self.partner_id
folio.do_payment(
journal=self.env["account.journal"].browse(
reservation1.folio_id.pms_property_id._get_payment_methods().ids[0]
@@ -826,7 +866,6 @@ class TestPmsFolioInvoice(TestPms):
# ARRANGE
self.partner_id.invoicing_policy = "checkout"
self.partner_id.margin_days_autoinvoice = 0
self.partner_id.default_invoice_lines = "overnights"
self.product1 = self.env["product.product"].create(
{
"name": "Test Product 1",
@@ -872,6 +911,7 @@ class TestPmsFolioInvoice(TestPms):
"room_type_id": self.room_type_double.id,
"partner_id": self.partner_id.id,
"board_service_room_id": self.board_service_room_type1.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
self.service = self.env["pms.service"].create(

View File

@@ -81,6 +81,13 @@ class TestPmsFolioSaleLine(TestPms):
}
)
self.sale_channel_direct1 = self.env["pms.sale.channel"].create(
{
"name": "Door",
"channel_type": "direct",
}
)
# RESERVATION LINES
def test_comp_fsl_rooms_all_same_group(self):
"""
@@ -129,6 +136,7 @@ class TestPmsFolioSaleLine(TestPms):
"adults": 2,
"room_type_id": self.room_type_double.id,
"partner_id": self.env.ref("base.res_partner_12").id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
@@ -160,6 +168,7 @@ class TestPmsFolioSaleLine(TestPms):
"adults": 2,
"room_type_id": self.room_type_double.id,
"partner_id": self.env.ref("base.res_partner_12").id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
@@ -196,6 +205,7 @@ class TestPmsFolioSaleLine(TestPms):
"adults": 2,
"room_type_id": self.room_type_double.id,
"partner_id": self.env.ref("base.res_partner_12").id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
@@ -234,6 +244,7 @@ class TestPmsFolioSaleLine(TestPms):
"adults": 2,
"room_type_id": self.room_type_double.id,
"partner_id": self.env.ref("base.res_partner_12").id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
@@ -268,6 +279,7 @@ class TestPmsFolioSaleLine(TestPms):
"adults": 2,
"room_type_id": self.room_type_double.id,
"partner_id": self.env.ref("base.res_partner_12").id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
@@ -304,6 +316,7 @@ class TestPmsFolioSaleLine(TestPms):
"adults": 2,
"room_type_id": self.room_type_double.id,
"partner_id": self.env.ref("base.res_partner_12").id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
r_test.flush()
@@ -342,6 +355,7 @@ class TestPmsFolioSaleLine(TestPms):
"adults": 2,
"room_type_id": self.room_type_double.id,
"partner_id": self.env.ref("base.res_partner_12").id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
r_test.flush()
@@ -383,6 +397,7 @@ class TestPmsFolioSaleLine(TestPms):
"adults": 2,
"room_type_id": self.room_type_double.id,
"partner_id": self.env.ref("base.res_partner_12").id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
r_test.flush()
@@ -426,6 +441,7 @@ class TestPmsFolioSaleLine(TestPms):
"room_type_id": self.room_type_double.id,
"partner_id": self.env.ref("base.res_partner_12").id,
"board_service_room_id": self.board_service_room_type.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
@@ -464,6 +480,7 @@ class TestPmsFolioSaleLine(TestPms):
"room_type_id": self.room_type_double.id,
"partner_id": self.env.ref("base.res_partner_12").id,
"board_service_room_id": self.board_service_room_type.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
r_test.service_ids[0].service_line_ids[0].price_unit = 1.0
@@ -503,6 +520,7 @@ class TestPmsFolioSaleLine(TestPms):
"room_type_id": self.room_type_double.id,
"partner_id": self.env.ref("base.res_partner_12").id,
"board_service_room_id": self.board_service_room_type.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
@@ -545,6 +563,7 @@ class TestPmsFolioSaleLine(TestPms):
"room_type_id": self.room_type_double.id,
"partner_id": self.env.ref("base.res_partner_12").id,
"board_service_room_id": self.board_service_room_type.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
@@ -586,6 +605,7 @@ class TestPmsFolioSaleLine(TestPms):
"room_type_id": self.room_type_double.id,
"partner_id": self.env.ref("base.res_partner_12").id,
"board_service_room_id": self.board_service_room_type.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
@@ -628,6 +648,7 @@ class TestPmsFolioSaleLine(TestPms):
"room_type_id": self.room_type_double.id,
"partner_id": self.env.ref("base.res_partner_12").id,
"board_service_room_id": self.board_service_room_type.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
previous_folio_board_service_sale_line = r_test.folio_id.sale_line_ids.filtered(
@@ -670,6 +691,7 @@ class TestPmsFolioSaleLine(TestPms):
"room_type_id": self.room_type_double.id,
"partner_id": self.env.ref("base.res_partner_12").id,
"board_service_room_id": self.board_service_room_type.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
@@ -713,6 +735,7 @@ class TestPmsFolioSaleLine(TestPms):
"room_type_id": self.room_type_double.id,
"partner_id": self.env.ref("base.res_partner_12").id,
"board_service_room_id": self.board_service_room_type.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
@@ -756,6 +779,7 @@ class TestPmsFolioSaleLine(TestPms):
"adults": 2,
"room_type_id": self.room_type_double.id,
"partner_id": self.env.ref("base.res_partner_12").id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
# ACT
@@ -797,6 +821,7 @@ class TestPmsFolioSaleLine(TestPms):
"adults": 2,
"room_type_id": self.room_type_double.id,
"partner_id": self.env.ref("base.res_partner_12").id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
r_test.service_ids = [(4, self.extra_service.id)]
@@ -841,6 +866,7 @@ class TestPmsFolioSaleLine(TestPms):
"adults": 2,
"room_type_id": self.room_type_double.id,
"partner_id": self.env.ref("base.res_partner_12").id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
r_test.service_ids = [(4, self.extra_service.id)]
@@ -886,6 +912,7 @@ class TestPmsFolioSaleLine(TestPms):
"adults": 2,
"room_type_id": self.room_type_double.id,
"partner_id": self.env.ref("base.res_partner_12").id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
r_test.service_ids = [(4, self.extra_service.id)]
@@ -929,6 +956,7 @@ class TestPmsFolioSaleLine(TestPms):
"adults": 2,
"room_type_id": self.room_type_double.id,
"partner_id": self.env.ref("base.res_partner_12").id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
r_test.service_ids = [(4, self.extra_service.id)]
@@ -973,6 +1001,7 @@ class TestPmsFolioSaleLine(TestPms):
"adults": 2,
"room_type_id": self.room_type_double.id,
"partner_id": self.env.ref("base.res_partner_12").id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
r_test.service_ids = [(4, self.extra_service.id)]
@@ -1016,6 +1045,7 @@ class TestPmsFolioSaleLine(TestPms):
"adults": 2,
"room_type_id": self.room_type_double.id,
"partner_id": self.env.ref("base.res_partner_12").id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
r_test.service_ids = [(4, self.extra_service.id)]
@@ -1066,6 +1096,7 @@ class TestPmsFolioSaleLine(TestPms):
"adults": 2,
"room_type_id": self.room_type_double.id,
"partner_id": self.env.ref("base.res_partner_12").id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
r_test.service_ids = [(4, self.extra_service.id)]
@@ -1114,6 +1145,7 @@ class TestPmsFolioSaleLine(TestPms):
"adults": 2,
"room_type_id": self.room_type_double.id,
"partner_id": self.env.ref("base.res_partner_12").id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
@@ -1160,6 +1192,7 @@ class TestPmsFolioSaleLine(TestPms):
"adults": 2,
"room_type_id": self.room_type_double.id,
"partner_id": self.env.ref("base.res_partner_12").id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
@@ -1212,6 +1245,7 @@ class TestPmsFolioSaleLine(TestPms):
"pms_property_id": self.pms_property1.id,
"pricelist_id": self.pricelist1.id,
"reservation_type": "staff",
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
# ASSERT
@@ -1251,6 +1285,7 @@ class TestPmsFolioSaleLine(TestPms):
"pricelist_id": self.pricelist1.id,
"reservation_type": "out",
"closure_reason_id": closure_reason.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
# ASSERT

View File

@@ -828,12 +828,19 @@ class TestPmsMultiproperty(TestPms):
"email": "miguel@example.com",
}
)
self.sale_channel_direct1 = self.env["pms.sale.channel"].create(
{
"name": "Door",
"channel_type": "direct",
}
)
self.reservation1 = self.env["pms.reservation"].create(
{
"checkin": fields.date.today(),
"checkout": fields.date.today() + datetime.timedelta(days=1),
"pms_property_id": self.pms_property1.id,
"partner_id": host1.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)

View File

@@ -83,6 +83,14 @@ class TestPmsPricelist(TestPms):
self.partner1 = self.env["res.partner"].create({"name": "Carles"})
# create a sale channel
self.sale_channel_direct1 = self.env["pms.sale.channel"].create(
{
"name": "Door",
"channel_type": "direct",
}
)
@freeze_time("2000-01-01")
def test_board_service_pricelist_item_apply_sale_dates(self):
"""
@@ -120,6 +128,7 @@ class TestPmsPricelist(TestPms):
"pms_property_id": self.pms_property1.id,
"pricelist_id": self.pricelist2.id,
"board_service_room_id": self.board_service_room_type1.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
# ASSERT
@@ -167,6 +176,7 @@ class TestPmsPricelist(TestPms):
"pms_property_id": self.pms_property1.id,
"pricelist_id": self.pricelist2.id,
"board_service_room_id": self.board_service_room_type1.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
# ASSERT
@@ -211,6 +221,7 @@ class TestPmsPricelist(TestPms):
"pms_property_id": self.pms_property1.id,
"pricelist_id": self.pricelist2.id,
"board_service_room_id": self.board_service_room_type1.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
# ASSERT
@@ -259,6 +270,7 @@ class TestPmsPricelist(TestPms):
"pms_property_id": self.pms_property1.id,
"pricelist_id": self.pricelist2.id,
"board_service_room_id": self.board_service_room_type1.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
# ASSERT
@@ -305,6 +317,7 @@ class TestPmsPricelist(TestPms):
"preferred_room_id": self.room1.id,
"pms_property_id": self.pms_property1.id,
"pricelist_id": self.pricelist2.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
# ASSERT
@@ -351,6 +364,7 @@ class TestPmsPricelist(TestPms):
"preferred_room_id": self.room1.id,
"pms_property_id": self.pms_property1.id,
"pricelist_id": self.pricelist2.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
# ASSERT
@@ -393,6 +407,7 @@ class TestPmsPricelist(TestPms):
"preferred_room_id": self.room1.id,
"pms_property_id": self.pms_property1.id,
"pricelist_id": self.pricelist2.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
# ASSERT
@@ -439,6 +454,7 @@ class TestPmsPricelist(TestPms):
"preferred_room_id": self.room1.id,
"pms_property_id": self.pms_property1.id,
"pricelist_id": self.pricelist2.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
# ASSERT
@@ -485,6 +501,7 @@ class TestPmsPricelist(TestPms):
"pms_property_id": self.pms_property1.id,
"pricelist_id": self.pricelist2.id,
"service_ids": [(0, 0, {"product_id": self.product1.id})],
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
# ASSERT
@@ -531,6 +548,7 @@ class TestPmsPricelist(TestPms):
"pms_property_id": self.pms_property1.id,
"pricelist_id": self.pricelist2.id,
"service_ids": [(0, 0, {"product_id": self.product1.id})],
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
# ASSERT
@@ -573,6 +591,7 @@ class TestPmsPricelist(TestPms):
"pms_property_id": self.pms_property1.id,
"pricelist_id": self.pricelist2.id,
"service_ids": [(0, 0, {"product_id": self.product1.id})],
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
# ASSERT
@@ -619,6 +638,7 @@ class TestPmsPricelist(TestPms):
"pms_property_id": self.pms_property1.id,
"pricelist_id": self.pricelist2.id,
"service_ids": [(0, 0, {"product_id": self.product1.id})],
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
# ASSERT
@@ -782,6 +802,7 @@ class TestPmsPricelist(TestPms):
"preferred_room_id": self.room.id,
"pms_property_id": self.pms_property1.id,
"partner_id": self.partner1.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
# ACT
@@ -1230,6 +1251,7 @@ class TestPmsPricelist(TestPms):
"preferred_room_id": self.room.id,
"pms_property_id": self.pms_property1.id,
"pricelist_id": self.pricelist1.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
reservation_price = reservation.price_subtotal

File diff suppressed because it is too large Load Diff

View File

@@ -56,6 +56,7 @@ class TestPmsSaleChannel(TestPms):
"checkout": datetime.datetime.now() + datetime.timedelta(days=3),
"agency_id": agency1.id,
"pms_property_id": self.pms_property1.id,
"sale_channel_origin_id": sale_channel1.id,
}
)
@@ -66,66 +67,6 @@ class TestPmsSaleChannel(TestPms):
"Reservation with a valid agency should be created.",
)
def test_reservation_with_partner_direct(self):
"""
Reservation create with partner (no agency) and sale channel
'direct' must be set reservation sale channel to 'direct'.
A reservation with partner and sale channel as 'direct'
should be created.
"""
# ARRANGE
PmsReservation = self.env["pms.reservation"]
PmsSaleChannel = self.env["pms.sale.channel"]
# ACT
sale_channel1 = PmsSaleChannel.create({"channel_type": "direct"})
partner1 = self.env["res.partner"].create({"name": "partner1"})
reservation1 = PmsReservation.create(
{
"checkin": datetime.datetime.now(),
"checkout": datetime.datetime.now() + datetime.timedelta(days=3),
"channel_type_id": sale_channel1.id,
"partner_id": partner1.id,
"pms_property_id": self.pms_property1.id,
}
)
# ASSERT
self.assertEqual(
reservation1.channel_type_id.channel_type,
"direct",
"A reservation with partner and sale channel as 'direct'"
"should be created a 'direct' reservation.",
)
def test_reservation_with_partner_indirect(self):
"""
Reservation create with partner (no agency) and sale channel
'indirect' must be set reservation sale channel to 'direct'.
A reservation with partner and sale channel as 'direct'
should be created.
"""
# ARRANGE
PmsReservation = self.env["pms.reservation"]
PmsSaleChannel = self.env["pms.sale.channel"]
# ACT
sale_channel1 = PmsSaleChannel.create({"channel_type": "indirect"})
partner1 = self.env["res.partner"].create({"name": "partner1"})
reservation1 = PmsReservation.create(
{
"checkin": datetime.datetime.now(),
"checkout": datetime.datetime.now() + datetime.timedelta(days=3),
"channel_type_id": sale_channel1.id,
"partner_id": partner1.id,
"pms_property_id": self.pms_property1.id,
}
)
# ASSERT
self.assertEqual(
reservation1.channel_type_id.channel_type,
"indirect",
"A reservation with partner and sale channel as 'direct'"
"should be created a 'indirect' reservation.",
)
def test_create_agency_with_sale_channel_indirect(self):
"""
Agency should be created as partner setted as 'agency'

File diff suppressed because it is too large Load Diff

View File

@@ -56,6 +56,14 @@ class TestPmsWizardSplitJoinSwapReservation(TestPms):
self.partner1 = self.env["res.partner"].create({"name": "Antón"})
# create a sale channel
self.sale_channel_direct1 = self.env["pms.sale.channel"].create(
{
"name": "Door",
"channel_type": "direct",
}
)
# UNIFY TESTS # review
def test_unify_reservation_avail_should(self):
"""
@@ -83,6 +91,7 @@ class TestPmsWizardSplitJoinSwapReservation(TestPms):
"adults": 2,
"preferred_room_id": self.room1.id,
"partner_id": self.partner1.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
r1.flush()
@@ -119,6 +128,7 @@ class TestPmsWizardSplitJoinSwapReservation(TestPms):
"adults": 2,
"preferred_room_id": self.room2.id,
"partner_id": self.partner1.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
r2 = self.env["pms.reservation"].create(
@@ -129,6 +139,7 @@ class TestPmsWizardSplitJoinSwapReservation(TestPms):
"adults": 2,
"preferred_room_id": self.room1.id,
"partner_id": self.partner1.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
r1 = self.env["pms.reservation"].create(
@@ -139,6 +150,7 @@ class TestPmsWizardSplitJoinSwapReservation(TestPms):
"adults": 2,
"room_type_id": self.test_room_type_double.id,
"partner_id": self.partner1.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
r2.flush()
@@ -164,6 +176,7 @@ class TestPmsWizardSplitJoinSwapReservation(TestPms):
"adults": 2,
"preferred_room_id": self.room1.id,
"partner_id": self.partner1.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
r2 = self.env["pms.reservation"].create(
@@ -174,6 +187,7 @@ class TestPmsWizardSplitJoinSwapReservation(TestPms):
"adults": 2,
"preferred_room_id": self.room2.id,
"partner_id": self.partner1.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
r2.flush()
@@ -215,6 +229,7 @@ class TestPmsWizardSplitJoinSwapReservation(TestPms):
"adults": 2,
"preferred_room_id": self.room1.id,
"partner_id": self.partner1.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
r2 = self.env["pms.reservation"].create(
@@ -225,6 +240,7 @@ class TestPmsWizardSplitJoinSwapReservation(TestPms):
"adults": 2,
"preferred_room_id": self.room2.id,
"partner_id": self.partner1.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
r1.flush()
@@ -274,6 +290,7 @@ class TestPmsWizardSplitJoinSwapReservation(TestPms):
"adults": 2,
"preferred_room_id": self.room1.id,
"partner_id": self.partner1.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
r2 = self.env["pms.reservation"].create(
@@ -284,6 +301,7 @@ class TestPmsWizardSplitJoinSwapReservation(TestPms):
"adults": 2,
"preferred_room_id": self.room2.id,
"partner_id": self.partner1.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
r1.flush()
@@ -332,6 +350,7 @@ class TestPmsWizardSplitJoinSwapReservation(TestPms):
"adults": 2,
"preferred_room_id": self.room1.id,
"partner_id": self.partner1.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
r2 = self.env["pms.reservation"].create(
@@ -342,6 +361,7 @@ class TestPmsWizardSplitJoinSwapReservation(TestPms):
"adults": 2,
"preferred_room_id": self.room2.id,
"partner_id": self.partner1.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
r1.flush()
@@ -394,6 +414,7 @@ class TestPmsWizardSplitJoinSwapReservation(TestPms):
"adults": 2,
"preferred_room_id": self.room1.id,
"partner_id": self.partner1.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
r2 = self.env["pms.reservation"].create(
@@ -404,6 +425,7 @@ class TestPmsWizardSplitJoinSwapReservation(TestPms):
"adults": 2,
"preferred_room_id": self.room2.id,
"partner_id": self.partner1.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
r1.flush()
@@ -456,6 +478,7 @@ class TestPmsWizardSplitJoinSwapReservation(TestPms):
"adults": 2,
"preferred_room_id": self.room1.id,
"partner_id": self.partner1.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
r2 = self.env["pms.reservation"].create(
@@ -466,6 +489,7 @@ class TestPmsWizardSplitJoinSwapReservation(TestPms):
"adults": 2,
"preferred_room_id": self.room2.id,
"partner_id": self.partner1.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
r1.flush()
@@ -515,6 +539,7 @@ class TestPmsWizardSplitJoinSwapReservation(TestPms):
"adults": 2,
"preferred_room_id": self.room2.id,
"partner_id": self.partner1.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
@@ -561,6 +586,7 @@ class TestPmsWizardSplitJoinSwapReservation(TestPms):
"adults": 2,
"preferred_room_id": self.room1.id,
"partner_id": self.partner1.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
@@ -572,6 +598,7 @@ class TestPmsWizardSplitJoinSwapReservation(TestPms):
"adults": 2,
"preferred_room_id": self.room1.id,
"partner_id": self.partner1.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
r2 = self.env["pms.reservation"].create(
@@ -582,6 +609,7 @@ class TestPmsWizardSplitJoinSwapReservation(TestPms):
"adults": 2,
"preferred_room_id": self.room2.id,
"partner_id": self.partner1.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
r1.flush()
@@ -633,6 +661,7 @@ class TestPmsWizardSplitJoinSwapReservation(TestPms):
"adults": 2,
"preferred_room_id": self.room1.id,
"partner_id": self.partner1.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
@@ -644,6 +673,7 @@ class TestPmsWizardSplitJoinSwapReservation(TestPms):
"adults": 2,
"preferred_room_id": self.room1.id,
"partner_id": self.partner1.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
r2 = self.env["pms.reservation"].create(
@@ -654,6 +684,7 @@ class TestPmsWizardSplitJoinSwapReservation(TestPms):
"adults": 2,
"preferred_room_id": self.room2.id,
"partner_id": self.partner1.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
r1.flush()
@@ -699,6 +730,7 @@ class TestPmsWizardSplitJoinSwapReservation(TestPms):
"adults": 2,
"preferred_room_id": self.room2.id,
"partner_id": self.partner1.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
@@ -736,6 +768,7 @@ class TestPmsWizardSplitJoinSwapReservation(TestPms):
"adults": 2,
"preferred_room_id": self.room1.id,
"partner_id": self.partner1.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
r1.flush()
@@ -773,6 +806,7 @@ class TestPmsWizardSplitJoinSwapReservation(TestPms):
"adults": 2,
"preferred_room_id": self.room1.id,
"partner_id": self.partner1.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
r1.flush()
@@ -819,6 +853,7 @@ class TestPmsWizardSplitJoinSwapReservation(TestPms):
"adults": 2,
"preferred_room_id": self.room1.id,
"partner_id": self.partner1.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
r1.flush()
@@ -861,6 +896,7 @@ class TestPmsWizardSplitJoinSwapReservation(TestPms):
"adults": 2,
"preferred_room_id": self.room1.id,
"partner_id": self.partner1.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
r1.flush()
@@ -900,6 +936,7 @@ class TestPmsWizardSplitJoinSwapReservation(TestPms):
"adults": 2,
"preferred_room_id": self.room1.id,
"partner_id": self.partner1.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
r1.flush()
@@ -930,6 +967,7 @@ class TestPmsWizardSplitJoinSwapReservation(TestPms):
"adults": 2,
"preferred_room_id": self.room1.id,
"partner_id": self.partner1.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
r1.flush()
@@ -959,6 +997,7 @@ class TestPmsWizardSplitJoinSwapReservation(TestPms):
"adults": 2,
"preferred_room_id": self.room2.id,
"partner_id": self.partner1.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
r1 = self.env["pms.reservation"].create(
@@ -969,6 +1008,7 @@ class TestPmsWizardSplitJoinSwapReservation(TestPms):
"adults": 2,
"preferred_room_id": self.room1.id,
"partner_id": self.partner1.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
r1.flush()

View File

@@ -31,6 +31,13 @@ class TestProductTemplate(TestPms):
"default_code": "BST",
}
)
# create a sale channel
self.sale_channel_direct1 = self.env["pms.sale.channel"].create(
{
"name": "Door",
"channel_type": "direct",
}
)
def test_bs_consumed_on_after(self):
"""
@@ -69,6 +76,7 @@ class TestProductTemplate(TestPms):
"pms_property_id": self.pms_property1.id,
"partner_id": self.partner.id,
"board_service_room_id": board_service_room_type.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
# ASSERT
@@ -115,6 +123,7 @@ class TestProductTemplate(TestPms):
"pms_property_id": self.pms_property1.id,
"partner_id": self.partner.id,
"board_service_room_id": board_service_room_type.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
# ASSERT
@@ -162,6 +171,7 @@ class TestProductTemplate(TestPms):
"pms_property_id": self.pms_property1.id,
"partner_id": self.partner.id,
"board_service_room_id": board_service_room_type.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
reservation.flush()
@@ -211,6 +221,7 @@ class TestProductTemplate(TestPms):
"pms_property_id": self.pms_property1.id,
"partner_id": self.partner.id,
"board_service_room_id": board_service_room_type.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
reservation.flush()
@@ -267,6 +278,7 @@ class TestProductTemplate(TestPms):
"partner_id": self.partner.id,
"board_service_room_id": board_service_room_type.id,
"adults": 2,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
@@ -298,6 +310,7 @@ class TestProductTemplate(TestPms):
"pms_property_id": self.pms_property1.id,
"partner_id": self.partner.id,
"service_ids": [extra_bed_service.id],
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
reservation._check_adults()

View File

@@ -85,6 +85,14 @@ class TestPmsSharedRoom(TestPms):
}
)
# create a sale channel
self.sale_channel_direct1 = self.env["pms.sale.channel"].create(
{
"name": "Door",
"channel_type": "direct",
}
)
def test_count_avail_beds_with_room_occupied(self):
"""
Check that not allow to create a bed reservation with a room occupied
@@ -104,6 +112,7 @@ class TestPmsSharedRoom(TestPms):
"checkin": today,
"checkout": tomorrow,
"pms_property_id": self.pms_property1.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
@@ -137,6 +146,7 @@ class TestPmsSharedRoom(TestPms):
"checkin": today,
"checkout": tomorrow,
"pms_property_id": self.pms_property1.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
@@ -182,6 +192,7 @@ class TestPmsSharedRoom(TestPms):
"checkin": today,
"checkout": tomorrow,
"pms_property_id": self.pms_property1.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
@@ -217,6 +228,7 @@ class TestPmsSharedRoom(TestPms):
"checkin": today,
"checkout": tomorrow,
"pms_property_id": self.pms_property1.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
res1.flush()
@@ -250,6 +262,7 @@ class TestPmsSharedRoom(TestPms):
"checkin": today,
"checkout": tomorrow,
"pms_property_id": self.pms_property1.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
@@ -285,6 +298,7 @@ class TestPmsSharedRoom(TestPms):
"checkin": today,
"checkout": tomorrow,
"pms_property_id": self.pms_property1.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
@@ -321,6 +335,7 @@ class TestPmsSharedRoom(TestPms):
"checkin": today,
"checkout": tomorrow,
"pms_property_id": self.pms_property1.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
@@ -355,6 +370,7 @@ class TestPmsSharedRoom(TestPms):
"checkin": today,
"checkout": tomorrow,
"pms_property_id": self.pms_property1.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
@@ -370,6 +386,7 @@ class TestPmsSharedRoom(TestPms):
"checkin": today,
"checkout": tomorrow,
"pms_property_id": self.pms_property1.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
r_test.flush()
@@ -394,6 +411,7 @@ class TestPmsSharedRoom(TestPms):
"checkin": today,
"checkout": tomorrow,
"pms_property_id": self.pms_property1.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
@@ -410,6 +428,7 @@ class TestPmsSharedRoom(TestPms):
"checkin": today,
"checkout": tomorrow,
"pms_property_id": self.pms_property1.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
r_test.flush()
@@ -435,6 +454,7 @@ class TestPmsSharedRoom(TestPms):
"checkin": today,
"checkout": tomorrow,
"pms_property_id": self.pms_property1.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
r1.action_cancel()
@@ -471,6 +491,7 @@ class TestPmsSharedRoom(TestPms):
"checkin": today,
"checkout": tomorrow,
"pms_property_id": self.pms_property1.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
r1.action_cancel()

View File

@@ -348,13 +348,15 @@
name="agency_id"
attrs="{'invisible': [('reservation_type', 'not in', 'normal')]}"
/>
<field name="sale_channel_origin_id" />
<field
name="external_reference"
attrs="{'invisible': [('agency_id', '=', False)]}"
/>
<field
name="channel_type_id"
attrs="{'readonly':[('agency_id','!=', False)], 'invisible':[('reservation_type', 'not in', 'normal')]}"
name="sale_channel_ids"
widget="many2many_tags"
options="{'no_create': True,'no_open': True}"
/>
</group>
<div class="oe_clear" />
@@ -786,12 +788,12 @@
name="group_customer"
context="{'group_by':'partner_id'}"
/>
<filter
string="Channel"
domain="[]"
name="group_channel"
context="{'group_by':'channel_type_id'}"
/>
<!-- <filter-->
<!-- string="Channel"-->
<!-- domain="[]"-->
<!-- name="group_channel"-->
<!-- context="{'group_by':'sale_channel_ids'}"-->
<!-- />-->
<filter
string="Agency"
domain="[]"
@@ -842,13 +844,6 @@
enable_counters="1"
select="multi"
/>
<field
name="channel_type_id"
string="Channel"
enable_counters="1"
icon="fa-sitemap"
expand="1"
/>
</searchpanel>
</search>
</field>

View File

@@ -441,17 +441,28 @@
options="{'no_create': True,'no_open': True}"
attrs="{'invisible': [('reservation_type','in',('out'))]}"
/>
<field
name="agency_id"
attrs="{'invisible': [('reservation_type', '!=', 'normal')]}"
/>
<field
name="external_reference"
attrs="{'invisible': [('agency_id', '=', False)]}"
/>
<field
name="channel_type_id"
attrs="{'readonly':[('agency_id','!=', False)], 'invisible': [('reservation_type', '!=', 'normal')]}"
name="agency_id"
attrs="{'invisible': [('reservation_type', '!=', 'normal')]}"
/>
<field name="sale_channel_origin_id" />
<field
class="oe_edit_only"
name="force_update_origin"
attrs="{'invisible': [('is_origin_channel_check_visible','=',False)]}"
/>
<field
name="is_origin_channel_check_visible"
invisible="1"
/>
<field
name="sale_channel_ids"
widget="many2many_tags"
options="{'no_create': True,'no_open': True}"
/>
<field placeholder="Arrival Hour" name="arrival_hour" />
<field placeholder="Departure Hour" name="departure_hour" />
@@ -491,6 +502,8 @@
name="cancel_discount"
attrs="{'column_invisible': [('parent.state','!=','cancel')]}"
/>
<field name="sale_channel_id" />
<field name="default_invoice_to" />
<field name="pms_property_id" invisible="1" />
</tree>
</field>
@@ -554,6 +567,11 @@
attrs="{'readonly': [('per_day','=',True)]}"
force_save="1"
/>
<field name="sale_channel_origin_id" />
<field
name="default_invoice_to"
optional="hide"
/>
<button
type="object"
class="oe_stat_button"
@@ -786,7 +804,8 @@
<field name="checkin_partner_pending_count" invisible="1" />
<field name="tax_ids" invisible="1" />
<field name="agency_id" optional="show" />
<field name="channel_type_id" optional="show" />
<field name="sale_channel_origin_id" optional="show" />
<field name="sale_channel_ids" optional="show" />
<field name="price_subtotal" invisible="1" />
<field name="price_total" optional="hide" sum="Total" />
<field name="commission_amount" optional="hide" sum="Commission" />
@@ -1014,12 +1033,12 @@
name="agency"
context="{'group_by':'agency_id'}"
/>
<filter
string="Channel"
domain="[]"
name="channel"
context="{'group_by':'channel_type_id'}"
/>
<!-- <filter-->
<!-- string="Channel"-->
<!-- domain="[]"-->
<!-- name="channel"-->
<!-- context="{'group_by':'sale_channel_ids'}"-->
<!-- />-->
<filter
string="Room Type"
domain="[]"
@@ -1078,13 +1097,6 @@
icon="fa-bookmark"
color="#875A7B"
/>
<field
name="channel_type_id"
string="Channel"
enable_counters="1"
icon="fa-sitemap"
expand="1"
/>
</searchpanel>
</search>
</field>

View File

@@ -27,7 +27,10 @@
attrs="{'readonly': [('per_day','=',True)]}"
force_save="1"
/>
<field name="sale_channel_origin_id" />
<field name="default_invoice_to" />
</group>
<field name="tax_ids" widget="many2many_tags" invisible="1" />
<field name="price_subtotal" invisible="1" />
<field name="price_tax" invisible="1" />
@@ -43,6 +46,7 @@
/>
<field name="price_day_total" />
<field name="is_board_service" invisible="1" />
<field name="pms_property_id" invisible="1" />
</tree>
</field>
</sheet>
@@ -85,6 +89,8 @@
attrs="{'readonly': [('per_day','=',True)]}"
force_save="1"
/>
<field name="sale_channel_origin_id" />
<field name="default_invoice_to" />
<button
type="object"
class="oe_stat_button"
@@ -106,6 +112,7 @@
/>
<field name="price_unit" />
<field name="is_board_service" invisible="1" />
<field name="pms_property_id" invisible="1" />
</tree>
</field>
</tree>

View File

@@ -157,7 +157,6 @@
name="margin_days_autoinvoice"
attrs="{'invisible': [('invoicing_policy', '!=', 'checkout')]}"
/>
<field name="default_invoice_lines" />
</group>
</xpath>
</field>

View File

@@ -145,7 +145,9 @@ class BookingDuplicate(models.TransientModel):
def _compute_channel_type_id(self):
for record in self.filtered("reference_folio_id"):
if record.reference_folio_id.agency_id == record.agency_id:
record.channel_type_id = record.reference_folio_id.channel_type_id
record.channel_type_id = (
record.reference_folio_id.sale_channel_origin_id
)
elif record.agency_id:
record.channel_type_id = record.agency_id.sale_channel_id.id
@@ -301,7 +303,7 @@ class BookingDuplicate(models.TransientModel):
"partner_name": self.partner_name,
"pms_property_id": self.pms_property_id.id,
"agency_id": self.agency_id.id,
"channel_type_id": self.channel_type_id.id,
"sale_channel_origin_id": self.channel_type_id.id,
"segmentation_ids": [(6, 0, self.segmentation_ids.ids)],
"internal_comment": self.internal_comment,
}

View File

@@ -237,7 +237,7 @@ class BookingEngine(models.TransientModel):
"partner_name": record.partner_name,
"pms_property_id": record.pms_property_id.id,
"agency_id": record.agency_id.id,
"channel_type_id": record.channel_type_id.id,
"sale_channel_origin_id": record.channel_type_id.id,
"segmentation_ids": [(6, 0, record.segmentation_ids.ids)],
"internal_comment": record.internal_comment,
}
@@ -310,7 +310,7 @@ class AvailabilityWizard(models.TransientModel):
num_rooms_available = fields.Integer(
string="Available rooms",
help="Number of rooms that are available",
store="true",
store=True,
compute="_compute_num_rooms_available",
)
num_rooms_selected = fields.Many2one(
@@ -429,7 +429,6 @@ class AvailabilityWizard(models.TransientModel):
checkin + datetime.timedelta(days=x)
for x in range(0, (checkout - checkin).days)
]:
product = room_type.product_id
product = product.with_company(pms_property.company_id).with_context(
quantity=1,
@@ -450,5 +449,4 @@ class AvailabilityWizard(models.TransientModel):
room_type_total_price_per_room += (
board_service_room.amount * nights * adults
)
return room_type_total_price_per_room

View File

@@ -11,6 +11,14 @@ from .common import TestPms
class TestWizardINE(TestPms):
def setUp(self):
super().setUp()
self.sale_channel_direct1 = self.env["pms.sale.channel"].create(
{
"name": "Door",
"channel_type": "direct",
}
)
# number of seats established in the property
self.pms_property1.ine_seats = 50
@@ -235,6 +243,7 @@ class TestWizardINE(TestPms):
"partner_id": self.partner_1.id,
"adults": 2,
"pms_property_id": self.pms_property1.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
self.checkin1 = self.env["pms.checkin.partner"].create(
@@ -259,6 +268,7 @@ class TestWizardINE(TestPms):
"partner_id": self.partner_3.id,
"adults": 2,
"pms_property_id": self.pms_property1.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
self.checkin3 = self.env["pms.checkin.partner"].create(
@@ -282,6 +292,7 @@ class TestWizardINE(TestPms):
"partner_id": self.partner_5.id,
"adults": 1,
"pms_property_id": self.pms_property1.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
self.checkin5 = self.env["pms.checkin.partner"].create(
@@ -299,6 +310,7 @@ class TestWizardINE(TestPms):
"partner_id": self.partner_5.id,
"adults": 1,
"pms_property_id": self.pms_property2.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
self.checkin5_other_property = self.env["pms.checkin.partner"].create(
@@ -331,6 +343,7 @@ class TestWizardINE(TestPms):
"adults": 2,
"pms_property_id": self.pms_property1.id,
"service_ids": [(0, 0, vals_service_extra_bed)],
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
self.checkin6 = self.env["pms.checkin.partner"].create(
@@ -431,6 +444,7 @@ class TestWizardINE(TestPms):
"partner_id": self.partner_russia_1.id,
"adults": 2,
"pms_property_id": self.pms_property1.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
self.reservation_2 = self.env["pms.reservation"].create(
@@ -441,6 +455,7 @@ class TestWizardINE(TestPms):
"partner_id": self.partner_russia_2.id,
"adults": 2,
"pms_property_id": self.pms_property1.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
self.reservation_3 = self.env["pms.reservation"].create(
@@ -451,6 +466,7 @@ class TestWizardINE(TestPms):
"partner_id": self.partner_russia_3.id,
"adults": 2,
"pms_property_id": self.pms_property1.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
# Create 3 checkin partners (1 russian -> r1, 2 russian -> r3 )

View File

@@ -9,6 +9,13 @@ from .common import TestPms
class TestWizardTravellerReport(TestPms):
def setUp(self):
super().setUp()
self.sale_channel_direct1 = self.env["pms.sale.channel"].create(
{
"name": "Door",
"channel_type": "direct",
}
)
# number of seats established in the property
self.pms_property1.ine_seats = 50
@@ -108,6 +115,7 @@ class TestWizardTravellerReport(TestPms):
"partner_id": self.partner_1.id,
"adults": 1,
"pms_property_id": self.pms_property1.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
self.checkin1 = self.env["pms.checkin.partner"].create(
@@ -127,6 +135,7 @@ class TestWizardTravellerReport(TestPms):
"partner_id": self.partner_2.id,
"adults": 1,
"pms_property_id": self.pms_property2.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
self.checkin2 = self.env["pms.checkin.partner"].create(
@@ -169,6 +178,7 @@ class TestWizardTravellerReport(TestPms):
"partner_id": self.partner_1.id,
"adults": 1,
"pms_property_id": self.pms_property1.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
self.checkin1 = self.env["pms.checkin.partner"].create(
@@ -189,6 +199,7 @@ class TestWizardTravellerReport(TestPms):
"partner_id": self.partner_2.id,
"adults": 1,
"pms_property_id": self.pms_property2.id,
"sale_channel_origin_id": self.sale_channel_direct1.id,
}
)
self.checkin2 = self.env["pms.checkin.partner"].create(