Browse Source

Initial Commit

pull/11/merge
SHEREEF PT 8 years ago
parent
commit
7777bb6f1c
  1. 35
      project_status_report/README.rst
  2. 45
      project_status_report/__openerp__.py
  3. 44
      project_status_report/models/status_report_wizard.py
  4. 323
      project_status_report/models/status_report_xls.py
  5. BIN
      project_status_report/static/description/banner.jpg
  6. BIN
      project_status_report/static/description/bar_chart_budget.png
  7. BIN
      project_status_report/static/description/bar_chart_time.png
  8. BIN
      project_status_report/static/description/disply.png
  9. BIN
      project_status_report/static/description/gantt_chart_task.png
  10. BIN
      project_status_report/static/description/icon.png
  11. 136
      project_status_report/static/description/index.html
  12. BIN
      project_status_report/static/description/pie_chart_task.png
  13. BIN
      project_status_report/static/description/project_menu_view.png
  14. BIN
      project_status_report/static/description/project_wizard.png
  15. BIN
      project_status_report/static/description/sheet_1.png
  16. BIN
      project_status_report/static/description/sheet_2.png
  17. 12
      project_status_report/views/report.xml
  18. 43
      project_status_report/views/status_wizard_view.xml
  19. 3
      sent_mails/__init__.py
  20. 19
      sent_mails/__openerp__.py
  21. 0
      sent_mails/static/description/cybro_logo.png
  22. BIN
      sent_mails/static/description/icon.png
  23. 45
      sent_mails/static/description/index.html
  24. BIN
      sent_mails/static/description/sent_mails_demo.png
  25. 39
      sent_mails/views/get_sent_mails.xml

35
project_status_report/README.rst

@ -1,35 +0,0 @@
Project Status Report v8
========================
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 Settings --> Invoicing --> Accounting & Finance --> Features --> Check Analytic accounting
Go to Settings --> Project --> Project management --> Task --> Check Record timesheet lines per 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
=======
Developer: Mufeeda C K @ cybrosys
Guidance: Nilmar Shereef @ cybrosys, shereef@cybrosys.in

45
project_status_report/__openerp__.py

@ -1,45 +0,0 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2008-TODAY Cybrosys Technologies(<http://www.cybrosys.com>).
# Author: Nilmar Shereef(<http://www.cybrosys.com>)
# you can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# It is forbidden to publish, distribute, sublicense, or sell copies
# of the Software or modified copies of the Software.
#
# 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# GENERAL PUBLIC LICENSE (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
{
'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': '1.0',
'depends': ['base', 'sale', 'project', 'report_xlsx', 'hr_timesheet', 'analytic', 'hr_timesheet_sheet'],
'data': [
'views/status_wizard_view.xml',
'views/report.xml'
],
'license': 'AGPL-3',
'images': ['static/description/banner.jpg'],
'installable': True,
'auto_install': False,
}

44
project_status_report/models/status_report_wizard.py

@ -1,44 +0,0 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2008-TODAY Cybrosys Technologies(<http://www.cybrosys.com>).
# Author: Nilmar Shereef(<http://www.cybrosys.com>)
# you can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# It is forbidden to publish, distribute, sublicense, or sell copies
# of the Software or modified copies of the Software.
#
# 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# GENERAL PUBLIC LICENSE (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
from openerp import models, fields, api
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]
return {'type': 'ir.actions.report.xml',
'report_name': 'project_status_report',
'datas': datas,
}

323
project_status_report/models/status_report_xls.py

@ -1,323 +0,0 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2008-TODAY Cybrosys Technologies(<http://www.cybrosys.com>).
# Author: Nilmar Shereef(<http://www.cybrosys.com>)
# you can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# It is forbidden to publish, distribute, sublicense, or sell copies
# of the Software or modified copies of the Software.
#
# 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# GENERAL PUBLIC LICENSE (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
from openerp import fields
from openerp.exceptions import except_orm
import datetime
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)
worksheet3 = workbook.add_worksheet()
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-------------------------- #
if ValueError:
raise except_orm('Warning', 'Select exactly one project')
report_date = datetime.datetime.now().strftime("%m/%d/%Y")
if objects.effective_hours and objects.planned_hours:
completed = str(int((objects.effective_hours * 100) / objects.planned_hours)) + " %"
else:
completed = "Unknown"
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, "Project Status", left_header)
col += 3
worksheet1.merge_range(row, col, row, col + 3, objects.state, 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, completed, format_cell)
row += 1
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)])
elif date_to and not date_from:
task = tasks.search([('date_start', '<=', date_to)])
elif date_from and date_to:
task = tasks.search([('date_start', '<=', date_to), ('date_start', '>=', date_from)])
else:
task = tasks.search([])
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:
if objects.name == data.project_id.name:
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'})
planned_time = objects.planned_hours
actual_time = objects.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 = 0
get_product = self.env['product.product'].browse(1)
cost_price = get_product.standard_price
planned_amount = cost_price * objects.planned_hours
account_obj = self.env['hr.analytic.timesheet'].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:
if objects.name == data.project_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, data.user_id.name, 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")
print "start_date: ", datetime.datetime.date(start_date).toordinal()
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 = "-"
if objects.name == data.project_id.name:
worksheet2.merge_range(row, col, row, col + 3, data.name, format_cell)
col += 4
worksheet2.merge_range(row, col, row, col + 1, data.user_id.name, 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-------------------------- #
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 objects.name == data.project_id.name:
if objects.date:
project_end = datetime.datetime.date(fields.Datetime.from_string(objects.date))
else:
if data.date_end:
date_end_fmt = datetime.datetime.date(fields.Datetime.from_string(data.date_end))
if date_end_fmt > project_end:
project_end = date_end_fmt
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()
ProjectReportXlsx('report.project_status_report', 'project.project')

BIN
project_status_report/static/description/banner.jpg

Binary file not shown.

Before

Width:  |  Height:  |  Size: 158 KiB

BIN
project_status_report/static/description/bar_chart_budget.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

BIN
project_status_report/static/description/bar_chart_time.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

BIN
project_status_report/static/description/disply.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.4 KiB

BIN
project_status_report/static/description/gantt_chart_task.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 61 KiB

BIN
project_status_report/static/description/icon.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

136
project_status_report/static/description/index.html

@ -1,136 +0,0 @@
<section class="oe_container">
<div class="oe_row oe_spaced">
<h2 class="oe_slogan">Project Status Report</h2>
<h3 class="oe_slogan">Graphical information of Project from various aspects.</h3>
<h4 class="oe_slogan">Cybrosys Technologies , www.cybrosys.com</h4>
</div>
<!--<div>-->
<!--<center>-->
<!--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.-->
<!--</center>-->
<!--</div>-->
</section>
<section class="oe_container">
<div class="row oe_row oe_spaced">
<div class="col-md-6">
&#9728; This Module Helps to Analyse Project in Various Aspects.<br>
&#9728; Complete Project Status XLS Report with Budget Analysis.<br>
&#9728; Tasks, Gantt chart XLS Analysis.<br>
&#9728; Project Breakdown Charter Analysis.<br>
</div>
<div class="col-md-6">
<div class="oe_bg_img">
<img class="oe_picture oe_screenshot center-block" src="icon.png" style="margin-top: 0px !important;">
</div>
</div>
</div>
</section>
<section class="oe_container">
<div class="oe_row oe_spaced">
<div class="oe_span6">
<div class="oe_demo oe_picture oe_screenshot">
<p><center>Menu View</center></p>
<img src="project_menu_view.png">
</div>
</div>
<div class="oe_span6">
<div class="oe_demo oe_picture oe_screenshot">
<p><center>Wizard View</center></p>
<img src="project_wizard.png">
</div>
</div>
</div>
</section>
<section class="oe_container">
<h3 class="oe_slogan">Project Graphical Overview</h3>
<div class="oe_bg_img">
<img class="oe_picture oe_screenshot" src="sheet_1.png">
</div>
</section>
<section class="oe_container">
<h3 class="oe_slogan">Project Information</h3>
<div class="oe_bg_img">
<img class="oe_picture oe_screenshot" src="sheet_2.png">
</div>
</section>
<section class="oe_container">
<div class="oe_row oe_spaced">
<h4 class="oe_slogan">Pie Chart for Task Status</h4>
<div class="oe_span6">
<div class="oe_demo oe_picture oe_screenshot">
<img src="pie_chart_task.png">
</div>
</div>
<div class="oe_span6">
<p class='oe_mt32'>
&#x261B; The Pie Chart of Overall Task Status.
</p>
</div>
</div>
</section>
<section class="oe_container">
<div class="oe_row oe_spaced">
<h4 class="oe_slogan">Bar Chart for Time Comparison</h4>
<div class="oe_span6">
<p class='oe_mt32'>
&#x261B; End User Can Easily Compare the Actual & Planned Time of the Project.
</p>
</div>
<div class="oe_span6">
<div class="oe_demo oe_picture oe_screenshot">
<img src="bar_chart_time.png">
</div>
</div>
</div>
</section>
<section class="oe_container">
<div class="oe_row oe_spaced">
<h4 class="oe_slogan">Bar Chart for Budget</h4>
<div class="oe_span6">
<div class="oe_demo oe_picture oe_screenshot">
<img src="bar_chart_budget.png">
</div>
</div>
<div class="oe_span6">
<p class='oe_mt32'>
&#x261B; To compare the Actual & Planned Budget of the Project.
</p>
</div>
</div>
</section>
<section class="oe_container">
<div class="oe_row oe_spaced">
<h4 class="oe_slogan">Project Task Bar Chart</h4>
<div class="oe_span6">
<p class='oe_mt32'>
&#x261B; Project Task Information & Bar Charts are there. End User Can Easily Analyse the Tasks.
</p>
</div>
<div class="oe_span6">
<div class="oe_demo oe_picture oe_screenshot">
<img src="gantt_chart_task.png">
</div>
</div>
</div>
</section>
<section class="oe_container oe_dark">
<h2 class="oe_slogan" style="margin-top:20px;" >Need Any Help.?</h2>
<div class="oe_slogan" style="margin-top:10px !important;">
<a class="btn btn-primary btn-lg mt8"
style="color: #FFFFFF !important;" href="http://www.cybrosys.com"><i
class="fa fa-envelope"></i> Email </a> <a
class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;"
href="http://www.cybrosys.com/contact/"><i
class="fa fa-phone"></i> Contact Us </a> <a
class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;"
href="http://www.cybrosys.com/odoo-customization-and-installation/"><i
class="fa fa-check-square"></i> Request Customization </a>
</div>
<img src="cybro_logo.png" style="width: 190px; margin-bottom: 20px;" class="center-block">
</section>

BIN
project_status_report/static/description/pie_chart_task.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

BIN
project_status_report/static/description/project_menu_view.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 82 KiB

BIN
project_status_report/static/description/project_wizard.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 61 KiB

BIN
project_status_report/static/description/sheet_1.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 119 KiB

BIN
project_status_report/static/description/sheet_2.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 90 KiB

12
project_status_report/views/report.xml

@ -1,12 +0,0 @@
<openerp>
<data>
<report id="project_status_report_new"
model="project.project"
string="Project Status Report"
report_type="xlsx"
name="project_status_report"
file="project_status_report"
menu="False"
/>
</data>
</openerp>

43
project_status_report/views/status_wizard_view.xml

@ -1,43 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<openerp>
<data>
<record id="project_report_print_wizard_view" model="ir.ui.view">
<field name="name">project.status.report</field>
<field name="model">project.status_report</field>
<field name="arch" type="xml">
<form>
<group>
<group>
<field name="date_from"/>
<field name="date_to"/>
</group>
</group>
<footer>
<button name="print_report_xls" string="Generate" type="object" class="oe_highlight"
style="margin: 0 5px;" context="{'xls_export':1}" icon='gtk-print' widget="url"/>
or
<button string="Cancel" class="oe_link" special="cancel" />
</footer>
</form>
</field>
</record>
<record id="project_report_wizard_view_action" model="ir.actions.act_window">
<field name="name">Project Status Report</field>
<field name="res_model">project.status_report</field>
<field name="view_type">form</field>
<field name="view_id" ref="project_report_print_wizard_view"/>
<field name="target">new</field>
<field name="context">{}</field>
</record>
<record id="project_status_report" model="ir.values">
<field name="model">project.status_report</field>
<field name="name">xls report</field>
<field name="key2">client_print_multi</field>
<field name="value" eval="'ir.actions.act_window,' + str(ref('project_report_wizard_view_action'))" />
<field name="key">action</field>
<field name="model">project.project</field>
</record>
</data>
</openerp>

3
project_status_report/__init__.py → sent_mails/__init__.py

@ -2,7 +2,7 @@
##############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2008-TODAY Cybrosys Technologies(<http://www.cybrosys.com>).
# Copyright (C) 2009-TODAY Cybrosys Technologies(<http://www.cybrosys.com>).
# Author: Nilmar Shereef(<http://www.cybrosys.com>)
# you can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
@ -20,4 +20,3 @@
# If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
import models

19
project_status_report/models/__init__.py → sent_mails/__openerp__.py

@ -2,7 +2,7 @@
##############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2008-TODAY Cybrosys Technologies(<http://www.cybrosys.com>).
# Copyright (C) 2009-TODAY Cybrosys Technologies(<http://www.cybrosys.com>).
# Author: Nilmar Shereef(<http://www.cybrosys.com>)
# you can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
@ -20,5 +20,18 @@
# If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
import status_report_wizard
import status_report_xls
{
'name': 'Sent Mails',
'version': '1.0',
'author': 'Cybrosys Techno Solutions',
'company': 'Cybrosys Techno Solutions',
'website': 'http://www.cybrosys.com',
"category": "Discuss",
'depends': ['base', 'mail'],
'license': 'AGPL-3',
'data': [
'views/get_sent_mails.xml',
],
'installable': True,
'auto_install': False
}

0
project_status_report/static/description/cybro_logo.png → sent_mails/static/description/cybro_logo.png

Before

Width:  |  Height:  |  Size: 50 KiB

After

Width:  |  Height:  |  Size: 50 KiB

BIN
sent_mails/static/description/icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

45
sent_mails/static/description/index.html

@ -0,0 +1,45 @@
<section class="oe_container">
<div class="oe_row oe_spaced">
<h2 class="oe_slogan">Show sent mails</h2>
<h3 class="oe_slogan">Shows the mails or discussions sent by current user</h3>
<h4 class="oe_slogan">Author : Cybrosys Techno Solutions, www.cybrosys.com</h4>
</div>
<div class="oe_row oe_spaced">
<div class="oe_span12">
<p class='oe_mt32'>
&#x261B;This module enables the feature to display the mails and discussions done by current user
</p>
<div class="oe_centeralign oe_websiteonly">
</div>
</div>
</div>
</section>
<section class="oe_container oe_dark">
<div class="oe_row">
<h2 class="oe_slogan">Sent Mail Menu Under Discuss</h2>
<div class="oe_span6">
<div class="oe_row_img oe_centered">
<img class="oe_picture oe_screenshot" src="sent_mails_demo.png">
</div>
</div>
</div>
</section>
<section class="oe_container oe_dark">
<h2 class="oe_slogan" style="margin-top:20px;" >Need Any Help?</h2>
<div class="oe_slogan" style="margin-top:10px !important;">
<a class="btn btn-primary btn-lg mt8"
style="color: #FFFFFF !important;" href="http://www.cybrosys.com"><i
class="fa fa-envelope"></i> Email </a> <a
class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;"
href="http://www.cybrosys.com/contact/"><i
class="fa fa-phone"></i> Contact Us </a> <a
class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;"
href="http://www.cybrosys.com/odoo-customization-and-installation/"><i
class="fa fa-check-square"></i> Request Customization </a>
</div>
<img src="cybro_logo.png" style="width: 190px; margin-bottom: 20px;" class="center-block">
</section>

BIN
sent_mails/static/description/sent_mails_demo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

39
sent_mails/views/get_sent_mails.xml

@ -0,0 +1,39 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<record id="action_mail_outgoing" model="ir.actions.client">
<field name="name">Inbox</field>
<field name="tag">mail.wall</field>
<field name="res_model">mail.message</field>
<field name="context">{
'default_model': 'res.users',
'default_res_id': uid,
'thread_model': 'res.partner',
'needaction_menu_ref': ['mail.mail_tomefeeds', 'mail.mail_starfeeds']
}</field>
<field name="params" eval="&quot;{
'domain': [
('author_id.user_ids', 'in', [uid]),
],
'view_mailbox': True,
'view_inbox': True,
'read_action': 'read',
'show_compose_message': False
}&quot;"/>
<field name="help" type="html">
<p>
<b>Good Job!</b> Your inbox is empty.
</p><p>
Your inbox contains private messages or emails sent to you
as well as information related to documents or people you
follow.
</p>
</field>
</record>
<menuitem name="Sent" id="menu_sent_mails" parent="mail.mail_feeds"
action="action_mail_outgoing" sequence="20"/>
</data>
</openerp>
Loading…
Cancel
Save