diff --git a/project_status_level_report/README.rst b/project_status_level_report/README.rst new file mode 100644 index 000000000..27930867f --- /dev/null +++ b/project_status_level_report/README.rst @@ -0,0 +1,46 @@ +Project Status Report v10 +======================== + +This module helps to analyse project from various aspects. The excel report will +contain complete project status report with budget, +task analysis, gantt chart and project breakdown charter. + +Features +======== + +* Graphical analysis of overall task. +* Comparison of actual and planned time for the project. +* Comparison of actual and planned budget amount. +* Gantt chart view of task. + +Installation +============ +To install this module, the libraries called python-xlsxwriter and base64 need to be installed in the system. +You need also the **report_xlsx** +module located in: https://github.com/OCA/reporting-engine/ + +Configuration +============= +To configure timesheet for task, +Go to Project --> Configuration --> Settings --> Project Management --> Time on Tasks --> Select Manage time estimation on tasks + +To print project status report, +* Select any project +* Go to print action menu and select project status report. +* specify the date range +* Click on Generate button and download the file + + +Credits +======= +* Cybrosys Techno Solutions + + +Authors +======= + +* Developer V9: Mufeeda C K @ cybrosys +* Guidance: Nilmar Shereef @ cybrosys, shereef@cybrosys.in +* Developer v10: Vinaya S B @ cybrosys, odoo@cybrosys.com + + diff --git a/project_status_level_report/__init__.py b/project_status_level_report/__init__.py new file mode 100644 index 000000000..5c1e1808f --- /dev/null +++ b/project_status_level_report/__init__.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2019-TODAY Cybrosys Technologies(). +# Author: Cybrosys Techno Solutions() +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +############################################################################# +import models diff --git a/project_status_level_report/__manifest__.py b/project_status_level_report/__manifest__.py new file mode 100644 index 000000000..b27372c20 --- /dev/null +++ b/project_status_level_report/__manifest__.py @@ -0,0 +1,44 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2019-TODAY Cybrosys Technologies(). +# Author: Cybrosys Techno Solutions() +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +############################################################################# +{ + 'name': "Project Status Report", + 'summary': """ + Detailed Project Analysis with XLS Diagrams""", + 'description': """ + Graphical information of Project from various aspects. Project Task list, Comparison of planned and + actual budget and time duration for the project. + """, + 'author': "Cybrosys Techno Solutions", + 'company': "Cybrosys Techno Solutions", + 'website': "http://www.cybrosys.com", + 'category': 'Project', + 'version': '10.0.1.0.0', + 'depends': ['base', 'project', 'report_xlsx', 'hr_timesheet', 'analytic'], + 'data': [ + 'views/status_wizard_view.xml', + 'views/report.xml' + ], + 'license': 'AGPL-3', + 'images': ['static/description/banner.jpg'], + 'installable': True, + 'auto_install': False, +} diff --git a/project_status_level_report/doc/RELEASE_NOTES.md b/project_status_level_report/doc/RELEASE_NOTES.md new file mode 100644 index 000000000..1dc86f831 --- /dev/null +++ b/project_status_level_report/doc/RELEASE_NOTES.md @@ -0,0 +1,6 @@ +## Module + +#### 21.08.2019 +#### Version 10.0.1.0.0 +##### ADD +- Initial commit for Project Status Report diff --git a/project_status_level_report/models/__init__.py b/project_status_level_report/models/__init__.py new file mode 100644 index 000000000..9fe4d13e2 --- /dev/null +++ b/project_status_level_report/models/__init__.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2019-TODAY Cybrosys Technologies(). +# Author: Cybrosys Techno Solutions() +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +############################################################################# +import status_report_wizard +import status_report_xls diff --git a/project_status_level_report/models/status_report_wizard.py b/project_status_level_report/models/status_report_wizard.py new file mode 100644 index 000000000..6a4c1df18 --- /dev/null +++ b/project_status_level_report/models/status_report_wizard.py @@ -0,0 +1,53 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2019-TODAY Cybrosys Technologies(). +# Author: Cybrosys Techno Solutions() +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +############################################################################# +from odoo import models, fields, api +from odoo.exceptions import except_orm + + +class ProjectExtended(models.Model): + _inherit = 'project.project' + + planned_amount = fields.Float('Initially Planned Amount', help='Estimated cost to do the task.') + + +class StatusReportWizard(models.Model): + _name = 'project.status_report' + + date_from = fields.Datetime('Start Date') + date_to = fields.Datetime('End Date') + + @api.multi + def print_report_xls(self): + context = self._context + datas = {'ids': context.get('active_ids', [])} + datas['model'] = 'project.project' + datas['form'] = self.read()[0] + for field in datas['form'].keys(): + if isinstance(datas['form'][field], tuple): + datas['form'][field] = datas['form'][field][0] + if len(datas['ids']) > 1: + raise except_orm('Warning', 'Selection of multiple record is not allowed') + else: + return {'type': 'ir.actions.report.xml', + 'report_name': 'project_status_level_report', + 'datas': datas, + } diff --git a/project_status_level_report/models/status_report_xls.py b/project_status_level_report/models/status_report_xls.py new file mode 100644 index 000000000..f108a39cc --- /dev/null +++ b/project_status_level_report/models/status_report_xls.py @@ -0,0 +1,326 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2019-TODAY Cybrosys Technologies(). +# Author: Cybrosys Techno Solutions() +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +############################################################################# +from odoo import fields +import datetime +from odoo.exceptions import except_orm +from dateutil.relativedelta import relativedelta +try: + from openerp.addons.report_xlsx.report.report_xlsx import ReportXlsx +except ImportError: + class ReportXlsx(object): + def __init__(self, *args, **kwargs): + pass + + +class ProjectReportXlsx(ReportXlsx): + + def generate_xlsx_report(self, workbook, data, objects): + sheet1 = "Project plan" + sheet2 = "Notes" + worksheet1 = workbook.add_worksheet(sheet1) + worksheet2 = workbook.add_worksheet(sheet2) + format_main_header = workbook.add_format({'font_size': 14, 'bg_color': 'silver', 'bold': 1, 'border': 1, + 'align': 'center', 'valign': 'vcenter'}) + format_header = workbook.add_format({'bold': 1, 'border': 1, 'align': 'center', + 'valign': 'vcenter', 'bg_color': 'silver'}) + header = workbook.add_format({'bold': 1, 'border': 1, 'align': 'center', + 'valign': 'vcenter', 'bg_color': 'silver'}) + left_header = workbook.add_format({'bold': 1, 'border': 1, 'align': 'center', + 'valign': 'vcenter'}) + format_cell = workbook.add_format({'border': 1, 'align': 'center'}) + + # ---------------------Project details-------------------------- # + + date_from = data['form']['date_from'] + date_to = data['form']['date_to'] + tasks = self.env['project.task'].search([]) + if date_from and not date_to: + task = tasks.search([('date_start', '>=', date_from), ('project_id', '=', objects.name)]) + elif date_to and not date_from: + task = tasks.search([('date_start', '<=', date_to), ('project_id', '=', objects.name)]) + elif date_from and date_to: + task = tasks.search([('date_start', '<=', date_to), ('date_start', '>=', date_from), + ('project_id', '=', objects.name)]) + else: + task = tasks.search([('project_id', '=', objects.name)]) + + report_date = datetime.datetime.now().strftime("%m/%d/%Y") + completed = effective_hours = planned_hours = 0 + for data in task: + if data.effective_hours: + effective_hours += data.effective_hours + if data.planned_hours: + planned_hours += data.planned_hours + if planned_hours != 0: + completed = str(int((effective_hours * 100) / planned_hours)) + row = col = 0 + worksheet1.merge_range(row, col, row + 1, col + 25, "Project Plan", format_main_header) + row += 4 + worksheet1.merge_range(row, col, row, col + 6, self.env.user.company_id.name, left_header) + row += 2 + worksheet1.merge_range(row, col, row, col + 2, "Project Name", left_header) + col += 3 + worksheet1.merge_range(row, col, row, col + 3, objects.name, format_cell) + col = 0 + row += 1 + worksheet1.merge_range(row, col, row, col + 2, "Report Date", left_header) + col += 3 + worksheet1.merge_range(row, col, row, col + 3, report_date, format_cell) + col = 0 + row += 1 + worksheet1.merge_range(row, col, row, col + 2, "Completed", left_header) + col += 3 + worksheet1.merge_range(row, col, row, col + 3, str(completed) + " %", format_cell) + row += 1 + + if task: + + # ---------------------Pie chart for overall task status-------------------------- # + stage_obj = self.env['project.task.type'].search([]) + stages_all = {} + for obj in stage_obj: + stages_all[obj.name] = 0 + for data in task: + stages_all[data.stage_id.name] += 1 + stages = stages_all.keys() + count = stages_all.values() + percentage = [] + total = sum(count) + for item in range(len(count)): + percentage.append((float(count[item]) / total) * 100) + row = 0 + col = 0 + worksheet2.merge_range(row, col, row + 1, col + 3, "Percentage of Task complete", header) + row += 2 + for item in range(len(stages)): + worksheet2.merge_range(row, col, row, col + 1, stages[item], format_cell) + col += 2 + worksheet2.merge_range(row, col, row, col + 1, int(percentage[item]), format_cell) + col = 0 + row += 1 + chart_pie = workbook.add_chart({'type': 'pie'}) + chart_pie.add_series({ + 'categories': '=' + sheet2 + '!$A$3:$A$10', + 'values': '=' + sheet2 + '!$C$3:$C$10', + 'points': [], + }) + chart_pie.set_title({'name': 'Overall Task Status'}) + worksheet1.insert_chart('A13', chart_pie) + + # # ---------------------Bar chart for Time duration-------------------------- # + chart_bar_t = workbook.add_chart({'type': 'bar'}) + actual_time = planned_time = 0 + for data in task: + if data.planned_hours: + planned_time += data.planned_hours + actual_time += data.effective_hours + data_bar_t = [ + ['Planned time', 'Actual time'], + [planned_time, actual_time], + ] + col = 6 + row = 0 + worksheet2.merge_range(row, col, row + 1, col + 3, "Time Duration(Hours)", header) + row += 2 + for item in range(2): + worksheet2.merge_range(row, col, row, col + 1, data_bar_t[0][item], format_cell) + col += 2 + worksheet2.merge_range(row, col, row, col + 1, data_bar_t[1][item], format_cell) + col = 6 + row += 1 + chart_bar_t.add_series({'name': 'Time', + 'categories': '=' + sheet2 + '!$G$3:$G$4', + 'values': '=' + sheet2 + '!$I$3:$I$4', + }) + chart_bar_t.set_title({'name': 'Time Duration'}) + worksheet1.insert_chart('I13', chart_bar_t) + + # # ---------------------Bar chart for Budget-------------------------- # + chart_bar_b = workbook.add_chart({'type': 'bar'}) + actual_amount = planned_amount = 0 + if objects.planned_amount: + planned_amount = objects.planned_amount + account_obj = self.env['account.analytic.line'].search([]) + for acc in account_obj: + if acc.account_id == objects.analytic_account_id: + actual_amount += acc.amount + data_bar_b = [ + ['Planned', 'Actual'], + [planned_amount, abs(actual_amount)], + ] + col = 6 + row = 6 + worksheet2.merge_range(row, col, row + 1, col + 3, "Budget", header) + row += 2 + for item in range(2): + worksheet2.merge_range(row, col, row, col + 1, data_bar_b[0][item], format_cell) + col += 2 + worksheet2.merge_range(row, col, row, col + 1, data_bar_b[1][item], format_cell) + col = 6 + row += 1 + chart_bar_b.add_series({'name': 'Amount', + 'categories': '=' + sheet2 + '!$G$9:$G$10', + 'values': '=' + sheet2 + '!$I$9:$I$10', + }) + chart_bar_b.set_title({'name': 'Budget'}) + worksheet1.insert_chart('Q13', chart_bar_b) + + # # ---------------------Task description table 1 -------------------------- # + row = 31 + col = 0 + worksheet1.merge_range(row, col, row, col + 3, "Task", format_header) + col += 4 + worksheet1.merge_range(row, col, row, col + 1, "Assigned to", format_header) + col += 2 + worksheet1.write(row, col, "Priority", format_header) + col += 1 + worksheet1.merge_range(row, col, row, col + 1, "Status", format_header) + col += 2 + row += 1 + for data in task: + assigned_to = "-" + if data.user_id.name: + assigned_to = data.user_id.name + col = 0 + worksheet1.merge_range(row, col, row, col + 3, data.name, format_cell) + col += 4 + worksheet1.merge_range(row, col, row, col + 1, assigned_to, format_cell) + col += 2 + priority = "" + for i in range(int(data.priority)): + priority += "*" + worksheet1.write(row, col, priority, format_cell) + col += 1 + worksheet1.merge_range(row, col, row, col + 1, data.stage_id.name, format_cell) + row += 1 + + # ---------------------Task description table 2 -------------------------- # + row = 14 + col = 0 + worksheet2.merge_range(row, col, row, col + 3, "Task", format_header) + col += 4 + worksheet2.merge_range(row, col, row, col + 1, "Assigned to", format_header) + col += 2 + worksheet2.merge_range(row, col, row, col + 1, "Start", format_header) + col += 2 + worksheet2.merge_range(row, col, row, col + 1, "End", format_header) + col += 2 + worksheet2.write(row, col, "Days", format_header) + col += 1 + worksheet2.merge_range(row, col, row, col + 1, "Status", format_header) + row += 1 + col = 0 + for data in task: + start_date = fields.Datetime.from_string(data.date_start) + start_date1 = start_date.strftime("%m-%d-%Y") + if data.date_end and data.date_end > data.date_start: + end_date = fields.Datetime.from_string(data.date_end) + date_difference = relativedelta(end_date, start_date).days + end_date1 = end_date.strftime("%m-%d-%Y") + else: + date_difference = "-" + end_date1 = "-" + assigned_to = "-" + if data.user_id.name: + assigned_to = data.user_id.name + worksheet2.merge_range(row, col, row, col + 3, data.name, format_cell) + col += 4 + worksheet2.merge_range(row, col, row, col + 1, assigned_to, format_cell) + col += 2 + worksheet2.merge_range(row, col, row, col + 1, start_date1, format_cell) + col += 2 + worksheet2.merge_range(row, col, row, col + 1, end_date1, format_cell) + col += 2 + worksheet2.write(row, col, date_difference, format_cell) + col += 1 + worksheet2.merge_range(row, col, row, col + 1, data.stage_id.name, format_cell) + col = 0 + row += 1 + + # ---------------------Gantt chart view-------------------------- # + worksheet3 = workbook.add_worksheet() + if objects.date_start: + project_start = datetime.datetime.date(fields.Datetime.from_string(objects.date_start)) + else: + project_start = datetime.datetime.date(fields.Datetime.from_string(objects.create_date)) + start_list = [] + days_list = [] + task_list = [] + task_item = 0 + project_end = datetime.datetime.date(datetime.datetime.now()) + for data in task: + if data.date_deadline: + date_end_fmt = datetime.datetime.date(fields.Datetime.from_string(data.date_deadline)) + if date_end_fmt > project_end: + project_end = date_end_fmt + else: + project_end = project_end + datetime.timedelta(days=30) + task_item += 1 + start_date = fields.Datetime.from_string(data.date_start) + start_date1 = datetime.datetime.date(start_date) + if data.date_end and data.date_end > data.date_start: + end_date = fields.Datetime.from_string(data.date_end) + else: + end_date = datetime.datetime.today() + days = relativedelta(end_date, start_date).days + task_list.append(data.name) + start_list.append(start_date1) + days_list.append(days) + headings = ['Number', 'Start date', 'Days'] + data = [ + task_list, + start_list, + days_list, + ] + worksheet3.write_row('A1', headings) + worksheet3.write_column('A2', data[0]) + worksheet3.write_column('B2', data[1]) + worksheet3.write_column('C2', data[2]) + chart2 = workbook.add_chart({'type': 'bar', 'subtype': 'stacked'}) + start = 2 + end = start + task_item - 1 + chart2.add_series({ + 'name': '=Sheet3!$B$1', + 'categories': '=Sheet3!$A$' + str(start) + ':$A$' + str(end), + 'fill': {'none': True}, + 'values': '=Sheet3!$B$' + str(start) + ':$B$' + str(end), + }) + chart2.add_series({ + 'name': '=Sheet3!$C$1', + 'categories': '=Sheet3!$A$' + str(start) + ':$A$' + str(end), + 'fill': {'color': '#4E73B7'}, + 'values': '=Sheet3!$C$' + str(start) + ':$C$' + str(end), + }) + chart2.set_title({'none': True}) + chart2.set_x_axis({'date_axis': True, 'min': project_start, 'max': project_end, + 'minor_unit': 2, 'minor_unit_type': 'days', 'major_unit': 1, + 'major_unit_type': 'days', 'num_format': 'dd/mm/yyyy'}) + chart2.set_y_axis({'none': True}) + chart2.set_legend({'none': True}) + worksheet1.insert_chart('K31', chart2, {'x_scale': 2, 'y_scale': 1}) + worksheet3.hide() + + else: + raise except_orm('Warning', 'No task to display') + + +ProjectReportXlsx('report.project_status_level_report', 'project.project') diff --git a/project_status_level_report/static/description/icon.png b/project_status_level_report/static/description/icon.png new file mode 100644 index 000000000..3ac779301 Binary files /dev/null and b/project_status_level_report/static/description/icon.png differ diff --git a/project_status_level_report/static/description/images/banner.png b/project_status_level_report/static/description/images/banner.png new file mode 100644 index 000000000..d1b689710 Binary files /dev/null and b/project_status_level_report/static/description/images/banner.png differ diff --git a/project_status_level_report/static/description/images/bar_chart_budget .png b/project_status_level_report/static/description/images/bar_chart_budget .png new file mode 100644 index 000000000..0494739c5 Binary files /dev/null and b/project_status_level_report/static/description/images/bar_chart_budget .png differ diff --git a/project_status_level_report/static/description/images/bar_chart_budget.png b/project_status_level_report/static/description/images/bar_chart_budget.png new file mode 100644 index 000000000..0494739c5 Binary files /dev/null and b/project_status_level_report/static/description/images/bar_chart_budget.png differ diff --git a/project_status_level_report/static/description/images/bar_chart_time.png b/project_status_level_report/static/description/images/bar_chart_time.png new file mode 100644 index 000000000..44741942d Binary files /dev/null and b/project_status_level_report/static/description/images/bar_chart_time.png differ diff --git a/project_status_level_report/static/description/images/checked.png b/project_status_level_report/static/description/images/checked.png new file mode 100644 index 000000000..578cedb80 Binary files /dev/null and b/project_status_level_report/static/description/images/checked.png differ diff --git a/project_status_level_report/static/description/images/colour_code_project.jpeg b/project_status_level_report/static/description/images/colour_code_project.jpeg new file mode 100644 index 000000000..be93e07b4 Binary files /dev/null and b/project_status_level_report/static/description/images/colour_code_project.jpeg differ diff --git a/project_status_level_report/static/description/images/cybrosys.png b/project_status_level_report/static/description/images/cybrosys.png new file mode 100644 index 000000000..d76b5bafb Binary files /dev/null and b/project_status_level_report/static/description/images/cybrosys.png differ diff --git a/project_status_level_report/static/description/images/essential_report.jpeg b/project_status_level_report/static/description/images/essential_report.jpeg new file mode 100644 index 000000000..9507a8730 Binary files /dev/null and b/project_status_level_report/static/description/images/essential_report.jpeg differ diff --git a/project_status_level_report/static/description/images/gantt_chart_task.png b/project_status_level_report/static/description/images/gantt_chart_task.png new file mode 100644 index 000000000..b7c2c58f0 Binary files /dev/null and b/project_status_level_report/static/description/images/gantt_chart_task.png differ diff --git a/project_status_level_report/static/description/images/order_types_in_pos.png b/project_status_level_report/static/description/images/order_types_in_pos.png new file mode 100644 index 000000000..2554ded45 Binary files /dev/null and b/project_status_level_report/static/description/images/order_types_in_pos.png differ diff --git a/project_status_level_report/static/description/images/pie_chart_task.png b/project_status_level_report/static/description/images/pie_chart_task.png new file mode 100644 index 000000000..1d611368b Binary files /dev/null and b/project_status_level_report/static/description/images/pie_chart_task.png differ diff --git a/project_status_level_report/static/description/images/project-satus-level-cybrosys-1.png b/project_status_level_report/static/description/images/project-satus-level-cybrosys-1.png new file mode 100644 index 000000000..b94a5b5f6 Binary files /dev/null and b/project_status_level_report/static/description/images/project-satus-level-cybrosys-1.png differ diff --git a/project_status_level_report/static/description/images/project-satus-level-cybrosys-2.png b/project_status_level_report/static/description/images/project-satus-level-cybrosys-2.png new file mode 100644 index 000000000..56c5b155e Binary files /dev/null and b/project_status_level_report/static/description/images/project-satus-level-cybrosys-2.png differ diff --git a/project_status_level_report/static/description/images/project-satus-level-cybrosys-3.png b/project_status_level_report/static/description/images/project-satus-level-cybrosys-3.png new file mode 100644 index 000000000..24630de94 Binary files /dev/null and b/project_status_level_report/static/description/images/project-satus-level-cybrosys-3.png differ diff --git a/project_status_level_report/static/description/images/project-satus-level-cybrosys-4.png b/project_status_level_report/static/description/images/project-satus-level-cybrosys-4.png new file mode 100644 index 000000000..07336ed8c Binary files /dev/null and b/project_status_level_report/static/description/images/project-satus-level-cybrosys-4.png differ diff --git a/project_status_level_report/static/description/images/project-satus-level-cybrosys-5.png b/project_status_level_report/static/description/images/project-satus-level-cybrosys-5.png new file mode 100644 index 000000000..b4764e0bb Binary files /dev/null and b/project_status_level_report/static/description/images/project-satus-level-cybrosys-5.png differ diff --git a/project_status_level_report/static/description/images/project-satus-level-cybrosys-6.png b/project_status_level_report/static/description/images/project-satus-level-cybrosys-6.png new file mode 100644 index 000000000..17bd82cd9 Binary files /dev/null and b/project_status_level_report/static/description/images/project-satus-level-cybrosys-6.png differ diff --git a/project_status_level_report/static/description/images/project-satus-level-cybrosys-7.png b/project_status_level_report/static/description/images/project-satus-level-cybrosys-7.png new file mode 100644 index 000000000..0e7959156 Binary files /dev/null and b/project_status_level_report/static/description/images/project-satus-level-cybrosys-7.png differ diff --git a/project_status_level_report/static/description/images/project-satus-level-cybrosys-8.png b/project_status_level_report/static/description/images/project-satus-level-cybrosys-8.png new file mode 100644 index 000000000..be13982eb Binary files /dev/null and b/project_status_level_report/static/description/images/project-satus-level-cybrosys-8.png differ diff --git a/project_status_level_report/static/description/images/project_menu_view.png b/project_status_level_report/static/description/images/project_menu_view.png new file mode 100644 index 000000000..14cdd0f11 Binary files /dev/null and b/project_status_level_report/static/description/images/project_menu_view.png differ diff --git a/project_status_level_report/static/description/images/project_wizard.png b/project_status_level_report/static/description/images/project_wizard.png new file mode 100644 index 000000000..aae5d7e91 Binary files /dev/null and b/project_status_level_report/static/description/images/project_wizard.png differ diff --git a/project_status_level_report/static/description/images/sheet_1.png b/project_status_level_report/static/description/images/sheet_1.png new file mode 100644 index 000000000..c55385050 Binary files /dev/null and b/project_status_level_report/static/description/images/sheet_1.png differ diff --git a/project_status_level_report/static/description/images/sheet_2.png b/project_status_level_report/static/description/images/sheet_2.png new file mode 100644 index 000000000..ead63f6a1 Binary files /dev/null and b/project_status_level_report/static/description/images/sheet_2.png differ diff --git a/project_status_level_report/static/description/images/task_reminder.jpeg b/project_status_level_report/static/description/images/task_reminder.jpeg new file mode 100644 index 000000000..998679818 Binary files /dev/null and b/project_status_level_report/static/description/images/task_reminder.jpeg differ diff --git a/project_status_level_report/static/description/images/task_timer.jpeg b/project_status_level_report/static/description/images/task_timer.jpeg new file mode 100644 index 000000000..1ce48898d Binary files /dev/null and b/project_status_level_report/static/description/images/task_timer.jpeg differ diff --git a/project_status_level_report/static/description/images/time_spend.jpeg b/project_status_level_report/static/description/images/time_spend.jpeg new file mode 100644 index 000000000..2c57cbb7b Binary files /dev/null and b/project_status_level_report/static/description/images/time_spend.jpeg differ diff --git a/project_status_level_report/static/description/images/youtube-video.png b/project_status_level_report/static/description/images/youtube-video.png new file mode 100644 index 000000000..e8de60298 Binary files /dev/null and b/project_status_level_report/static/description/images/youtube-video.png differ diff --git a/project_status_level_report/static/description/index.html b/project_status_level_report/static/description/index.html new file mode 100644 index 000000000..ecd0448a1 --- /dev/null +++ b/project_status_level_report/static/description/index.html @@ -0,0 +1,399 @@ + + +
cybrosys-logo
+ +
+
+
+

Project Status Report

+

Graphical representation of project from different aspects. +

+
+

Key Highlights

+
    +
  • checkProject status report for Odoo10 community edition.
  • +
  • checkProject Analysis
  • +
  • checkVarious graphical representations.
  • +
+ +
+
+
+
+ +
+
+
+ + + +
+
+ +

Overview

+
+

+ Get more refined control of projects via analyzing them from different aspects. Project status report application helps the business to get a detailed visual of project status from various dimensions.Business organizations can make use of the application to plan,track and collaborate their task. + +

+ +
+ +

Project Status Report

+
+
    + +
  • + checkHelps to analyse project from various aspects.
  • + +
  • + checkComplete project status report in XLS with budget analysis.
  • + +
  • + checkTasks, Gantt chart XLS Analysis.
  • + +
  • + checkProject Breakdown Charter Analysis.
  • +
+
+ + + +
+ +
+

Screenshots

+
+
+
+ + +
+
+
+ + + + +
+ +

Video

+
+

Project Status Report

+ + +
+ Cybrosys Cover Video +
+ +
+
+ + + +
+
    +
+
+ + + + + +
+

Suggested Products

+
+ +
+ + +
+

Our Service

+
+ +
+
+
+

Our Industries

+
+ +
+
+
+ +
+
+

Trading

+

Easily procure and sell your products.

+
+
+
+
+ +
+
+

Manufacturing

+

Plan, track and schedule your operations.

+
+
+
+
+ +
+
+

Restaurant

+

Run your bar or restaurant methodical.

+
+
+
+
+ +
+
+

POS

+

Easy configuring and convivial selling.

+
+
+
+
+ +
+
+

E-commerce & Website

+

Mobile friendly, awe-inspiring product pages.

+
+
+
+
+ +
+
+

Hotel Management

+

An all-inclusive hotel management application.

+
+
+
+
+ +
+
+

Education

+

A Collaborative platform for educational management.

+
+
+
+
+ +
+
+

Service Management

+

Keep track of services and invoice accordingly.

+
+
+
+
+ +
+ + + +
+
+
+

Need Any Help?

+
+ +

If you have anything to share with us based on your use of this module, please let us know. We are ready to offer our support.

+
+

Email us

+

odoo@cybrosys.com / info@cybrosys.com

+ +
+
+

Contact Us

+ www.cybrosys.com +
+
+ +
+
+ + +
+
+
+ + + + +
+
+ +
+ + + + + + + + +
+
+
+ + diff --git a/project_status_level_report/views/report.xml b/project_status_level_report/views/report.xml new file mode 100644 index 000000000..c3c6d8f6f --- /dev/null +++ b/project_status_level_report/views/report.xml @@ -0,0 +1,12 @@ + + + + + diff --git a/project_status_level_report/views/status_wizard_view.xml b/project_status_level_report/views/status_wizard_view.xml new file mode 100644 index 000000000..bd728832c --- /dev/null +++ b/project_status_level_report/views/status_wizard_view.xml @@ -0,0 +1,54 @@ + + + + + project.new.form + project.project + + + + + + + + + + project.status.report + project.status_report + +
+ + + + + + +
+
+
+
+
+ + + Project Status Report + project.status_report + form + + new + {} + + + + project.status_report + xls report + client_print_multi + + action + project.project + +
+
\ No newline at end of file