Files
pms/pms_rooming_xls/report/rooming_checkin_xlsx.py
Miguel Padin 8b429b4da5 [IMP] pms: xls checkin partners export & validate fields import (#34)
* [FIX] pms: fix xls checkin partners export & validate fields import

* [FIX] pms: fix last commit file missing
2021-01-07 11:20:07 +01:00

115 lines
3.7 KiB
Python

# Copyright 2020 Commitsun.
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import models
from odoo.addons.report_xlsx_helper.report.report_xlsx_format import (
FORMATS,
XLS_HEADERS,
)
class RoomingCheckinXlsx(models.AbstractModel):
_name = "report.pms_rooming_xls.rooming_export_xlsx"
_description = "Rooming list"
_inherit = "report.report_xlsx.abstract"
def _get_ws_params(self, wb, data, folios):
CheckinPartner = self.env["pms.checkin.partner"]
checkin_template = {
"code": {
"header": {
"value": "Code",
},
"data": {
"value": self._render("checkin.identifier"),
},
"width": 10,
"hidden": True,
},
"folio": {
"header": {
"value": "Folio",
},
"data": {
"type": "string",
"value": self._render("checkin.folio_id.name"),
},
"width": 10,
},
"room": {
"header": {
"value": "Room",
},
"data": {
"value": self._render("checkin.reservation_id.rooms"),
},
"width": 20,
},
}
wanted_list = ["code", "folio", "room"]
for field_str in self.env["pms.checkin.partner"]._checkin_partner_fields():
render_field_str = (
"checkin." + field_str + " if checkin." + field_str + " else ''"
)
checkin_template[field_str] = {
"header": {
"value": CheckinPartner._fields[field_str].string,
},
"data": {
"value": self._render(render_field_str) or "",
},
"width": 10,
}
wanted_list.append(field_str)
ws_params = {
"ws_name": "Rooming",
"generate_ws_method": "_roomlist_report",
"wanted_list": wanted_list,
"col_specs": checkin_template,
}
return [ws_params]
def _roomlist_report(self, workbook, ws, ws_params, data, checkins):
ws.set_portrait()
ws.fit_to_pages(1, 0)
ws.set_header(XLS_HEADERS["xls_headers"]["standard"])
ws.set_footer(XLS_HEADERS["xls_footers"]["standard"])
FORMATS["format_ws_reservation_group"] = workbook.add_format(
{"bg_color": "#D8D8D8", "align": "left"}
)
self._set_column_width(ws, ws_params)
row_pos = 0
row_pos = self._write_line(
ws,
row_pos,
ws_params,
col_specs_section="header",
default_format=FORMATS["format_theader_blue_left"],
)
ws.freeze_panes(row_pos, 0)
reservation_id = False
format_row = FORMATS["format_tcell_left"]
for checkin in checkins.sorted("reservation_id"):
if checkin.reservation_id.id != reservation_id:
reservation_id = checkin.reservation_id.id
format_row = (
FORMATS["format_ws_reservation_group"]
if format_row == FORMATS["format_tcell_left"]
else FORMATS["format_tcell_left"]
)
row_pos = self._write_line(
ws,
row_pos,
ws_params,
col_specs_section="data",
render_space={
"checkin": checkin,
},
default_format=format_row,
)