From 66a46d65f6883f7c93b40d52fc9cebc3faa5f33c Mon Sep 17 00:00:00 2001 From: Fabien BOURGEOIS Date: Fri, 25 May 2018 11:42:48 +0200 Subject: [PATCH] [REF]GOLEM Resource Report : global refactoring --- golem_resource_report/__init__.py | 4 +- golem_resource_report/__manifest__.py | 7 +- .../data/golem_resource_report_data.xml | 40 +++++++++ .../reports/golem_reservation_report.py | 77 +++++++---------- .../reports/golem_reservation_report.xml | 86 ++++++++++--------- .../reports/golem_reservation_report_menu.xml | 39 +++------ .../views/golem_resource_report_menu.xml | 22 ++--- .../wizard/golem_resource_report_wizard.py | 26 +++--- .../golem_resource_report_wizard_views.xml | 8 +- 9 files changed, 161 insertions(+), 148 deletions(-) create mode 100644 golem_resource_report/data/golem_resource_report_data.xml diff --git a/golem_resource_report/__init__.py b/golem_resource_report/__init__.py index f1d4cf2..d766ae4 100644 --- a/golem_resource_report/__init__.py +++ b/golem_resource_report/__init__.py @@ -16,6 +16,4 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . -#from . import models -from . import wizard -from . import reports +from . import reports, wizard diff --git a/golem_resource_report/__manifest__.py b/golem_resource_report/__manifest__.py index 4f65daa..8b40f73 100644 --- a/golem_resource_report/__manifest__.py +++ b/golem_resource_report/__manifest__.py @@ -20,14 +20,15 @@ 'name': 'GOLEM resources reports', 'summary': 'GOLEM resources reports', 'description': ''' GOLEM resources reports ''', - 'version': '10.0.0.0.0', + 'version': '10.0.0.1.0', 'category': 'GOLEM', 'author': 'Youssef El Ouahby, Fabien Bourgeois', 'license': 'AGPL-3', - 'application': True, + 'application': False, 'installable': True, 'depends': ['golem_resource'], - 'data': ['reports/golem_reservation_report.xml', + 'data': ['data/golem_resource_report_data.xml', + 'reports/golem_reservation_report.xml', 'reports/golem_reservation_report_menu.xml', 'wizard/golem_resource_report_wizard_views.xml', 'views/golem_resource_report_menu.xml'] diff --git a/golem_resource_report/data/golem_resource_report_data.xml b/golem_resource_report/data/golem_resource_report_data.xml new file mode 100644 index 0000000..2f00f40 --- /dev/null +++ b/golem_resource_report/data/golem_resource_report_data.xml @@ -0,0 +1,40 @@ + + + + + + + European A4 Landscape + + A4 + 0 + 0 + Landscape + 10 + 23 + 7 + 7 + + 35 + 90 + + + + diff --git a/golem_resource_report/reports/golem_reservation_report.py b/golem_resource_report/reports/golem_reservation_report.py index d482e8a..8e94b7a 100644 --- a/golem_resource_report/reports/golem_reservation_report.py +++ b/golem_resource_report/reports/golem_reservation_report.py @@ -15,66 +15,52 @@ # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . -""" Golem Reservation Report """ -import time +""" Golem Reservation Report """ + +import time from random import randint from odoo import models, api +def get_client_color(partner_number): + """ Get Client Color """ + colors = ['#FFFF5B', '#81EC54', '#47C8C8', '#FB5A66', '#E8E750', + '#CF4ACF', '#9655D2', '#FFA15B', '#5F68D5', '#60E652'] + color = "#000000" + if partner_number < 10: + color = colors[partner_number] + else: + red = randint(128, 255) + green = randint(128, 255) + blue = randint(128, 255) + color = "#" +hex(red)[2:]+hex(green)[2:]+hex(blue)[2:] + return color class GolemResevationReport(models.AbstractModel): - "Golem Reservation Report" + """ Golem Reservation Report """ _name = 'report.golem_resource_report.golem_reservation_report' - - def get_total_reservation(self, data): - "Get Reservation Count" - domain = [('date_start', '>', data['date_start']), - ('date_stop', '<', data['date_stop']), - ('resource_id', 'in', data['resource_ids'])] - return self.env['golem.resource.reservation'].search_count(domain) - - def get_resource(self, data): - "Get Resource List" - lst = [] - domain = [('date_start', '>', data['date_start']), - ('date_stop', '<', data['date_stop']), - ('resource_id', 'in', data['resource_ids'])] - reservations = self.env['golem.resource.reservation'].search(domain, order='date_start') - lst = reservations.mapped('resource_id.name') - return lst - - def get_client_color(self, partner_number): - "Get Client Color" - colors = ['#FFFF5B', '#81EC54', '#47C8C8', '#FB5A66', '#E8E750', - '#CF4ACF', '#9655D2', '#FFA15B', '#5F68D5', '#60E652'] - color = "#000000" - if partner_number < 10: - color = colors[partner_number] - else: - red = randint(128, 255) - green = randint(128, 255) - blue = randint(128, 255) - color = "#" +hex(red)[2:]+hex(green)[2:]+hex(blue)[2:] - return color + _description = 'Golem Reservation Report' def get_data(self, data): - "Get Resevation Data" - lst = [] + """ Get Resevation Data """ + res = [] domain = [('date_start', '>', data['date_start']), ('date_stop', '<', data['date_stop']), ('resource_id', 'in', data['resource_ids'])] reservations = self.env['golem.resource.reservation'].search(domain, order='date_start') + total_reservations = len(reservations) + resources = list(reservations.mapped('resource_id.name')) + partner_ids = reservations.mapped('partner_id.id') partner_colors = {} partner_number = 0 for partner_id in partner_ids: - partner_colors[str(partner_id)] = self.get_client_color(partner_number) + partner_colors[str(partner_id)] = get_client_color(partner_number) partner_number += 1 - res = {} for reservation in reservations: - res = { + line = { 'name': reservation.name, 'resource_name': reservation.resource_id.name, 'client': reservation.partner_id.name, @@ -83,14 +69,15 @@ class GolemResevationReport(models.AbstractModel): 'day_start': reservation.day_start, 'bgcolor': partner_colors[str(reservation.partner_id.id)] } - lst.append(res) - return lst + res.append(line) + return res, total_reservations, resources @api.model def render_html(self, docids, data=None): - "Render HTML" + """ Render HTML """ model = self.env.context.get('active_model') docs = self.env[model].browse(self.env.context.get('active_id')) + _data, total_reservations, resources = self.get_data(data) docargs = { 'doc_ids': self.ids, 'doc_model': model, @@ -99,9 +86,9 @@ class GolemResevationReport(models.AbstractModel): 'data': data, 'date_start': data['date_start'], 'date_stop': data['date_stop'], - 'get_total_reservation': self.get_total_reservation(data), - 'get_data': self.get_data(data), - 'get_resource': self.get_resource(data), + 'get_total_reservation': total_reservations, + 'get_data': _data, + 'get_resource': resources } return self.env['report'] \ .render('golem_resource_report.golem_reservation_report', docargs) diff --git a/golem_resource_report/reports/golem_reservation_report.xml b/golem_resource_report/reports/golem_reservation_report.xml index 0df78a7..e824b9f 100644 --- a/golem_resource_report/reports/golem_reservation_report.xml +++ b/golem_resource_report/reports/golem_reservation_report.xml @@ -17,46 +17,48 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . --> - - - + + + + + diff --git a/golem_resource_report/reports/golem_reservation_report_menu.xml b/golem_resource_report/reports/golem_reservation_report_menu.xml index d1090cd..5ef6c1d 100644 --- a/golem_resource_report/reports/golem_reservation_report_menu.xml +++ b/golem_resource_report/reports/golem_reservation_report_menu.xml @@ -18,32 +18,15 @@ along with this program. If not, see . --> - - European A4 Landscape - - A4 - 0 - 0 - Landscape - 10 - 23 - 7 - 7 - - 35 - 90 - - - + + + + diff --git a/golem_resource_report/views/golem_resource_report_menu.xml b/golem_resource_report/views/golem_resource_report_menu.xml index 14ba437..a75dc9a 100644 --- a/golem_resource_report/views/golem_resource_report_menu.xml +++ b/golem_resource_report/views/golem_resource_report_menu.xml @@ -20,19 +20,19 @@ along with this program. If not, see . - - Resources Reports - golem.resource.report.wizard - form - form - - {} - new - + + Resources Reports + golem.resource.report.wizard + form + form + + {} + new + - - + + diff --git a/golem_resource_report/wizard/golem_resource_report_wizard.py b/golem_resource_report/wizard/golem_resource_report_wizard.py index 684c41d..fd6a41e 100644 --- a/golem_resource_report/wizard/golem_resource_report_wizard.py +++ b/golem_resource_report/wizard/golem_resource_report_wizard.py @@ -30,17 +30,17 @@ class GolemResourceReportWizard(models.TransientModel): date_stop = fields.Datetime(required=True) @api.multi - def print_report(self): + def print_resource_report(self): """ Print Report """ - for record in self: - start_date = fields.Datetime.from_string(record.date_start) - stop_date = fields.Datetime.from_string(record.date_stop) - if start_date > stop_date: - raise ValidationError(_("Stop Date cannot be set before \ - Start Date.")) - else: - data = self.read( - ['resource_ids', 'date_start', 'date_stop'])[0] - return self.env['report'].get_action( - self, 'golem_resource_report.golem_reservation_report', - data=data) + self.ensure_one() + record = self[0] + start_date = fields.Datetime.from_string(record.date_start) + stop_date = fields.Datetime.from_string(record.date_stop) + if start_date > stop_date: + raise ValidationError(_('Stop Date cannot be set before Start Date.')) + else: + data = self.read( + ['resource_ids', 'date_start', 'date_stop'])[0] + return self.env['report'].get_action( + self, 'golem_resource_report.golem_reservation_report', + data=data) diff --git a/golem_resource_report/wizard/golem_resource_report_wizard_views.xml b/golem_resource_report/wizard/golem_resource_report_wizard_views.xml index 0d28277..af23086 100644 --- a/golem_resource_report/wizard/golem_resource_report_wizard_views.xml +++ b/golem_resource_report/wizard/golem_resource_report_wizard_views.xml @@ -18,6 +18,7 @@ along with this program. If not, see . --> + GOLEM resource Report Wizard Form @@ -27,7 +28,7 @@ along with this program. If not, see . - + @@ -38,12 +39,13 @@ along with this program. If not, see . +