@ -0,0 +1,24 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################## |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# Copyright (C) 2017-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Jesni Banu(<https://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/>. |
|||
# |
|||
############################################################################## |
|||
import models |
|||
import reports |
@ -0,0 +1,49 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################## |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# Copyright (C) 2017-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Jesni Banu(<https://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': 'Account Budget Report', |
|||
'version': '10.0.1.0.0', |
|||
'summary': """Enables Budget Summary Report""", |
|||
'description': """Providing budget analysis through different pdf reports. So we can take |
|||
quick budget analysis.""", |
|||
'category': 'Accounting', |
|||
'author': 'Cybrosys Techno Solutions', |
|||
'company': 'Cybrosys Techno Solutions', |
|||
'website': "https://www.cybrosys.com", |
|||
'depends': ['base', 'account_budget'], |
|||
'data': [ |
|||
'views/budget_report_view.xml', |
|||
'views/budget_summary_view.xml', |
|||
'views/budget_print_view.xml', |
|||
'views/analytic_budget_report_view.xml', |
|||
'reports/account_budget_report.xml', |
|||
'reports/report_crossovered_budget.xml', |
|||
'reports/report_analytic_account_budget.xml', |
|||
], |
|||
'images': ['static/description/banner.jpg'], |
|||
'license': 'AGPL-3', |
|||
'demo': [], |
|||
'installable': True, |
|||
'auto_install': False, |
|||
'application': False, |
|||
} |
@ -0,0 +1,28 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################## |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# Copyright (C) 2017-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Jesni Banu(<https://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/>. |
|||
# |
|||
############################################################################## |
|||
import budget_report |
|||
import budget_summary |
|||
import budget |
|||
import analytic_budget_report |
|||
|
|||
|
@ -0,0 +1,44 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################## |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# Copyright (C) 2017-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Jesni Banu(<https://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/>. |
|||
# |
|||
############################################################################## |
|||
import time |
|||
from odoo import fields, models |
|||
|
|||
|
|||
class AccountBudgetAnalytic(models.TransientModel): |
|||
|
|||
_name = 'account.budget.analytic' |
|||
_description = 'Account Budget report for analytic account' |
|||
|
|||
date_from = fields.Date('Start of period', required=True, default=lambda *a: time.strftime('%Y-01-01')) |
|||
date_to = fields.Date('End of period', required=True, default=lambda *a: time.strftime('%Y-%m-%d')) |
|||
|
|||
def check_report(self): |
|||
data = self.read()[0] |
|||
active_ids = self.env.context.get('active_ids', []) |
|||
datas = { |
|||
'ids': active_ids, |
|||
'model': 'account.analytic.account', |
|||
'form': data |
|||
} |
|||
datas['form']['ids'] = datas['ids'] |
|||
return self.env['report'].get_action([], 'account_budget_report.report_analytic_account_budget', data=datas) |
@ -0,0 +1,44 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################## |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# Copyright (C) 2017-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Jesni Banu(<https://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/>. |
|||
# |
|||
############################################################################## |
|||
import time |
|||
from odoo import models, fields |
|||
|
|||
|
|||
class AccountBudgetCrossOverReport(models.TransientModel): |
|||
_name = "account.budget.cross.over.report" |
|||
_description = "Account Budget cross over report" |
|||
|
|||
date_from = fields.Date('Start of period', required=True, default=lambda *a: time.strftime('%Y-01-01')) |
|||
date_to = fields.Date('End of period', required=True, default=lambda *a: time.strftime('%Y-%m-%d')) |
|||
|
|||
def check_report(self): |
|||
data = self.read()[0] |
|||
active_ids = self.env.context.get('active_ids', []) |
|||
datas = { |
|||
'ids': active_ids, |
|||
'model': 'crossovered.budget', |
|||
'form': data |
|||
} |
|||
datas['form']['ids'] = datas['ids'] |
|||
datas['form']['report'] = 'analytic-full' |
|||
return self.env['report'].get_action([], 'account_budget_report.report_cross_over_budget', data=datas) |
@ -0,0 +1,46 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################## |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# Copyright (C) 2017-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Jesni Banu(<https://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/>. |
|||
# |
|||
############################################################################## |
|||
import time |
|||
from odoo import models, fields |
|||
|
|||
|
|||
class AccountBudgetAnalytic(models.TransientModel): |
|||
_name = 'account.budget.report' |
|||
_description = 'Account Budget report for analytic account' |
|||
|
|||
date_from = fields.Date('Start of period', required=True, default=lambda *a: time.strftime('%Y-01-01')) |
|||
date_to = fields.Date('End of period', required=True, default=lambda *a: time.strftime('%Y-%m-%d')) |
|||
|
|||
def check_report(self): |
|||
active_ids = self.env.context.get('active_ids', []) |
|||
data = self.read()[0] |
|||
datas = { |
|||
'ids': active_ids, |
|||
'model': 'account.budget.post', |
|||
'form': data |
|||
} |
|||
datas['form']['ids'] = datas['ids'] |
|||
datas['form']['report'] = 'analytic-full' |
|||
return self.env['report'].get_action([], 'account_budget_report.report_budget', data=datas) |
|||
|
|||
|
@ -0,0 +1,44 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################## |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# Copyright (C) 2017-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Jesni Banu(<https://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/>. |
|||
# |
|||
############################################################################## |
|||
import time |
|||
from odoo import models, fields |
|||
|
|||
|
|||
class AccountBudgetCrossOverSummaryReport(models.TransientModel): |
|||
_name = 'account.budget.cross.over.summary.report' |
|||
_description = 'Account Budget cross over summary report' |
|||
|
|||
date_from = fields.Date('Start of period', required=True, default=lambda *a: time.strftime('%Y-01-01')) |
|||
date_to = fields.Date('End of period', required=True, default=lambda *a: time.strftime('%Y-%m-%d')) |
|||
|
|||
def check_report(self): |
|||
data = self.read()[0] |
|||
active_ids = self.env.context.get('active_ids', []) |
|||
datas = { |
|||
'ids': active_ids, |
|||
'model': 'crossovered.budget', |
|||
'form': data |
|||
} |
|||
datas['form']['ids'] = datas['ids'] |
|||
datas['form']['report'] = 'analytic-one' |
|||
return self.env['report'].get_action([], 'account_budget_report.report_cross_over_budget', data=datas) |
@ -0,0 +1,5 @@ |
|||
# -*- coding: utf-8 -*- |
|||
import budget_parser |
|||
import cross_overed_budget_report |
|||
import analytic_budget |
|||
|
@ -0,0 +1,85 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<odoo> |
|||
<template id="report_budget"> |
|||
<t t-call="report.html_container"> |
|||
<t t-foreach="docs" t-as="o"> |
|||
<t t-call="report.internal_layout"> |
|||
<div class="page"> |
|||
<h2>Budget</h2> |
|||
<div class="row mt32"> |
|||
<div class="col-xs-3"> |
|||
<strong>Currency:</strong> |
|||
<p t-esc="res_company.currency_id.name"/> |
|||
</div> |
|||
<div class="col-xs-3"> |
|||
<strong>Printed at:</strong> |
|||
<p><span t-esc="formatLang(time.strftime('%Y-%m-%d'), date=True)"/> at |
|||
<span t-esc="time.strftime('%H:%M:%S')"/></p> |
|||
</div> |
|||
<div class="col-xs-3"> |
|||
<strong>Analysis from:</strong> |
|||
<p><span t-esc="formatLang(data['form']['date_from'], date=True)"/> to |
|||
<span t-esc="formatLang(data['form']['date_to'], date=True)"/></p> |
|||
</div> |
|||
<div class="col-xs-3"> |
|||
<strong>Budget:</strong> |
|||
<p t-field="o.name"/> |
|||
</div> |
|||
</div> |
|||
|
|||
<table class="table table-condensed"> |
|||
<thead> |
|||
<tr> |
|||
<th>Description</th> |
|||
<th class="text-right">Theoretical Amount</th> |
|||
<th class="text-right">Planned Amount</th> |
|||
<th class="text-right">Practical Amount</th> |
|||
<th class="text-right">Perc(%)</th> |
|||
</tr> |
|||
</thead> |
|||
<tbody> |
|||
<t t-foreach="funct(o, data['form'])" t-as="line"> |
|||
<t t-if="line['status'] == 1"> |
|||
<tr> |
|||
<td><strong t-esc="line['name']"/></td> |
|||
<td class="text-right"> |
|||
<strong t-esc="formatLang(line['theo'], dp='Account', currency_obj = res_company.currency_id)"/> |
|||
</td> |
|||
<td class="text-right"><strong t-esc="formatLang(line['pln'], dp='Account', currency_obj=res_company.currency_id)"/></td> |
|||
<td class="text-right"><strong t-esc="formatLang(line['prac'], dp='Account', currency_obj=res_company.currency_id)"/></td> |
|||
<td class="text-right"><strong t-esc="formatLang(line['perc'],digits=2)"/> %</td> |
|||
</tr> |
|||
</t> |
|||
<tr t-if="line['status'] != 1"> |
|||
<td><span style="color: white;" t-esc="'.....'*(line['status'] - 1)"/><span t-esc="line['name']"/></td> |
|||
<td class="text-right"><span t-esc="formatLang(line['theo'], dp='Account', currency_obj=res_company.currency_id)"/></td> |
|||
<td class="text-right"><span t-esc="formatLang(line['pln'], dp='Account', currency_obj=res_company.currency_id)"/></td> |
|||
<td class="text-right"><span t-esc="formatLang(line['prac'], dp='Account', currency_obj=res_company.currency_id)"/></td> |
|||
<td class="text-right"><span t-esc="formatLang(line['perc'],digits=2)"/> % </td> |
|||
</tr> |
|||
</t> |
|||
<tr t-foreach="funct_total(data['form'])" t-as="tot"> |
|||
<td><strong>Total:</strong></td> |
|||
<td class="text-right"><strong t-esc="formatLang(tot['tot_theo'], dp='Account', currency_obj = res_company.currency_id)"/></td> |
|||
<td class="text-right"><strong t-esc="formatLang(tot['tot_pln'], dp='Account', currency_obj = res_company.currency_id)"/></td> |
|||
<td class="text-right"><strong t-esc="formatLang(tot['tot_prac'], dp='Account', currency_obj=res_company.currency_id)"/></td> |
|||
<td class="text-right"><strong t-esc="formatLang(tot['tot_perc'], digits=2)"/> %</td> |
|||
</tr> |
|||
</tbody> |
|||
</table> |
|||
</div> |
|||
</t> |
|||
</t> |
|||
</t> |
|||
</template> |
|||
|
|||
<report |
|||
id="action_report_budget" |
|||
model="account.budget.post" |
|||
string="Budget" |
|||
report_type="qweb-pdf" |
|||
name="account_budget_report.report_budget" |
|||
file="account_budget_report.report_budget" |
|||
menu="False" |
|||
/> |
|||
</odoo> |
@ -0,0 +1,156 @@ |
|||
# -*- coding: utf-8 -*- |
|||
import time |
|||
from odoo.osv import osv |
|||
from odoo.report import report_sxw |
|||
from odoo.http import request |
|||
|
|||
|
|||
class AnalyticAccountBudgetReport(report_sxw.rml_parse): |
|||
def __init__(self, cr, uid, name, context): |
|||
super(AnalyticAccountBudgetReport, self).__init__(cr, uid, name, context=context) |
|||
self.localcontext.update({ |
|||
'funct': self.funct, |
|||
'funct_total': self.funct_total, |
|||
'time': time, |
|||
}) |
|||
self.context = context |
|||
|
|||
def funct(self, object, form, ids=None, done=None, level=1): |
|||
if ids is None: |
|||
ids = {} |
|||
if not ids: |
|||
ids = self.ids |
|||
if not done: |
|||
done = {} |
|||
|
|||
global tot |
|||
tot = { |
|||
'theo': 0.00, |
|||
'pln': 0.00, |
|||
'prac': 0.00, |
|||
'perc': 0.00 |
|||
} |
|||
result = [] |
|||
accounts = request.env['account.analytic.account'].browse(object.id) |
|||
c_b_lines_obj = request.env['crossovered.budget.lines'] |
|||
obj_c_budget = request.env['crossovered.budget'] |
|||
|
|||
for account_id in accounts: |
|||
res = {} |
|||
b_line_ids = [] |
|||
for line in account_id.crossovered_budget_line: |
|||
b_line_ids.append(line.id) |
|||
if not b_line_ids: |
|||
return [] |
|||
d_from = form['date_from'] |
|||
d_to = form['date_to'] |
|||
self.cr.execute('SELECT DISTINCT(crossovered_budget_id) FROM ' |
|||
'crossovered_budget_lines WHERE id =ANY(%s)', (b_line_ids,)) |
|||
budget_ids = self.cr.fetchall() |
|||
|
|||
context = {'wizard_date_from': d_from, 'wizard_date_to': d_to} |
|||
for i in range(0, len(budget_ids)): |
|||
budget_name = obj_c_budget.browse([budget_ids[i][0]]) |
|||
res = { |
|||
'b_id': '-1', |
|||
'a_id': '-1', |
|||
'name': budget_name[0].name, |
|||
'status': 1, |
|||
'theo': 0.00, |
|||
'pln': 0.00, |
|||
'prac': 0.00, |
|||
'perc': 0.00 |
|||
} |
|||
result.append(res) |
|||
|
|||
line_ids = c_b_lines_obj.search([('id', 'in', b_line_ids), |
|||
('crossovered_budget_id', '=', budget_ids[i][0])]) |
|||
line_id = line_ids |
|||
tot_theo = tot_pln = tot_prac = tot_perc = 0 |
|||
|
|||
done_budget = [] |
|||
for line in line_id: |
|||
if line.id in b_line_ids: |
|||
theo = pract = 0.00 |
|||
theo = line.theoritical_amount |
|||
pract = line.practical_amount |
|||
if line.general_budget_id.id in done_budget: |
|||
for record in result: |
|||
if record['b_id'] == line.general_budget_id.id and \ |
|||
record['a_id'] == line.analytic_account_id.id: |
|||
record['theo'] += theo |
|||
record['pln'] += line.planned_amount |
|||
record['prac'] += pract |
|||
record['perc'] += line.percentage |
|||
tot_theo += theo |
|||
tot_pln += line.planned_amount |
|||
tot_prac += pract |
|||
tot_perc += line.percentage |
|||
else: |
|||
res1 = { |
|||
'b_id': line.general_budget_id.id, |
|||
'a_id': line.analytic_account_id.id, |
|||
'name': line.general_budget_id.name, |
|||
'status': 2, |
|||
'theo': theo, |
|||
'pln': line.planned_amount, |
|||
'prac': pract, |
|||
'perc': line.percentage |
|||
} |
|||
tot_theo += theo |
|||
tot_pln += line.planned_amount |
|||
tot_prac += pract |
|||
tot_perc += line.percentage |
|||
result.append(res1) |
|||
done_budget.append(line.general_budget_id.id) |
|||
else: |
|||
if line.general_budget_id.id in done_budget: |
|||
continue |
|||
else: |
|||
res1 = { |
|||
'b_id': line.general_budget_id.id, |
|||
'a_id': line.analytic_account_id.id, |
|||
'name': line.general_budget_id.name, |
|||
'status': 2, |
|||
'theo': 0.00, |
|||
'pln': 0.00, |
|||
'prac': 0.00, |
|||
'perc': 0.00 |
|||
} |
|||
result.append(res1) |
|||
done_budget.append(line.general_budget_id.id) |
|||
if tot_theo == 0.00: |
|||
tot_perc = 0.00 |
|||
else: |
|||
tot_perc = float(tot_prac / tot_theo) * 100 |
|||
|
|||
result[-(len(done_budget) + 1)]['theo'] = tot_theo |
|||
tot['theo'] += tot_theo |
|||
result[-(len(done_budget) + 1)]['pln'] = tot_pln |
|||
tot['pln'] += tot_pln |
|||
result[-(len(done_budget) + 1)]['prac'] = tot_prac |
|||
tot['prac'] += tot_prac |
|||
result[-(len(done_budget) + 1)]['perc'] = tot_perc |
|||
if tot['theo'] == 0.00: |
|||
tot['perc'] = 0.00 |
|||
else: |
|||
tot['perc'] = float(tot['prac'] / tot['theo']) * 100 |
|||
return result |
|||
|
|||
def funct_total(self, form): |
|||
result = [] |
|||
res = { |
|||
'tot_theo': tot['theo'], |
|||
'tot_pln': tot['pln'], |
|||
'tot_prac': tot['prac'], |
|||
'tot_perc': tot['perc'] |
|||
} |
|||
result.append(res) |
|||
return result |
|||
|
|||
|
|||
class ReportAnalyticAccountBudget(osv.AbstractModel): |
|||
_name = 'report.account_budget_report.report_analytic_account_budget' |
|||
_inherit = 'report.abstract_report' |
|||
_template = 'account_budget_report.report_analytic_account_budget' |
|||
_wrapped_report_class = AnalyticAccountBudgetReport |
@ -0,0 +1,177 @@ |
|||
# -*- coding: utf-8 -*- |
|||
import time |
|||
from odoo.osv import osv |
|||
from odoo.report import report_sxw |
|||
from odoo.http import request |
|||
|
|||
tot = {} |
|||
|
|||
|
|||
class BudgetReport(report_sxw.rml_parse): |
|||
def __init__(self, cr, uid, name, context): |
|||
super(BudgetReport, self).__init__(cr, uid, name, context=context) |
|||
self.localcontext.update({ |
|||
'funct': self.funct, |
|||
'funct_total': self.funct_total, |
|||
'time': time, |
|||
}) |
|||
self.context = context |
|||
|
|||
def funct(self, object, form, ids=None, done=None, level=1): |
|||
if ids is None: |
|||
ids = {} |
|||
if not ids: |
|||
ids = self.ids |
|||
if not done: |
|||
done = {} |
|||
global tot |
|||
tot = { |
|||
'theo': 0.00, |
|||
'pln': 0.00, |
|||
'prac': 0.00, |
|||
'perc': 0.00 |
|||
} |
|||
result = [] |
|||
|
|||
budgets = request.env['account.budget.post'].browse(object.id) |
|||
c_b_lines_obj = request.env['crossovered.budget.lines'] |
|||
acc_analytic_obj = request.env['account.analytic.account'] |
|||
for budget_id in budgets: |
|||
res = {} |
|||
budget_ids = [] |
|||
d_from = form['date_from'] |
|||
d_to = form['date_to'] |
|||
|
|||
for line in budget_id.crossovered_budget_line: |
|||
budget_ids.append(line.id) |
|||
|
|||
if not budget_ids: |
|||
return [] |
|||
self.cr.execute('SELECT DISTINCT(analytic_account_id) FROM ' |
|||
'crossovered_budget_lines WHERE id = ANY(%s)', (budget_ids,)) |
|||
an_ids = self.cr.fetchall() |
|||
context = {'wizard_date_from': d_from, 'wizard_date_to': d_to} |
|||
for i in range(0, len(an_ids)): |
|||
if not an_ids[i][0]: |
|||
continue |
|||
analytic_name = acc_analytic_obj.browse(an_ids[i][0]) |
|||
res= { |
|||
'b_id': '-1', |
|||
'a_id': '-1', |
|||
'name': analytic_name[0].name, |
|||
'status': 1, |
|||
'theo': 0.00, |
|||
'pln': 0.00, |
|||
'prac': 0.00, |
|||
'perc': 0.00 |
|||
} |
|||
result.append(res) |
|||
line_ids = c_b_lines_obj.search([('id', 'in', budget_ids), ('analytic_account_id', '=', an_ids[i][0])]) |
|||
line_id = line_ids |
|||
tot_theo = tot_pln = tot_prac = tot_perc = 0.00 |
|||
|
|||
done_budget = [] |
|||
for line in line_id: |
|||
if line.id in budget_ids: |
|||
theo = pract = 0.00 |
|||
theo = line.theoritical_amount |
|||
pract = line.practical_amount |
|||
if line.general_budget_id.id in done_budget: |
|||
for record in result: |
|||
if record['b_id'] == line.general_budget_id.id and \ |
|||
record['a_id'] == line.analytic_account_id.id: |
|||
record['theo'] += theo |
|||
record['pln'] += line.planned_amount |
|||
record['prac'] += pract |
|||
if record['theo'] <> 0.00: |
|||
perc = (record['prac'] / record['theo']) * 100 |
|||
else: |
|||
perc = 0.00 |
|||
record['perc'] = perc |
|||
tot_theo += theo |
|||
tot_pln += line.planned_amount |
|||
tot_prac += pract |
|||
tot_perc += perc |
|||
else: |
|||
if theo <> 0.00: |
|||
perc = (pract / theo) * 100 |
|||
else: |
|||
perc = 0.00 |
|||
res1 = { |
|||
'a_id': line.analytic_account_id.id, |
|||
'b_id': line.general_budget_id.id, |
|||
'name': line.general_budget_id.name, |
|||
'status': 2, |
|||
'theo': theo, |
|||
'pln': line.planned_amount, |
|||
'prac': pract, |
|||
'perc': perc, |
|||
} |
|||
tot_theo += theo |
|||
tot_pln += line.planned_amount |
|||
tot_prac += pract |
|||
tot_perc += perc |
|||
if form['report'] == 'analytic-full': |
|||
result.append(res1) |
|||
done_budget.append(line.general_budget_id.id) |
|||
else: |
|||
|
|||
if line.general_budget_id.id in done_budget: |
|||
continue |
|||
else: |
|||
res1 = { |
|||
'a_id': line.analytic_account_id.id, |
|||
'b_id': line.general_budget_id.id, |
|||
'name': line.general_budget_id.name, |
|||
'status': 2, |
|||
'theo': 0.00, |
|||
'pln': 0.00, |
|||
'prac': 0.00, |
|||
'perc': 0.00 |
|||
} |
|||
if form['report'] == 'analytic-full': |
|||
result.append(res1) |
|||
done_budget.append(line.general_budget_id.id) |
|||
if tot_theo == 0.00: |
|||
tot_perc = 0.00 |
|||
else: |
|||
tot_perc = float(tot_prac / tot_theo) * 100 |
|||
if form['report'] == 'analytic-full': |
|||
result[-(len(done_budget) + 1)]['theo'] = tot_theo |
|||
tot['theo'] += tot_theo |
|||
result[-(len(done_budget) + 1)]['pln'] = tot_pln |
|||
tot['pln'] += tot_pln |
|||
result[-(len(done_budget) + 1)]['prac'] = tot_prac |
|||
tot['prac'] += tot_prac |
|||
result[-(len(done_budget) + 1)]['perc'] = tot_perc |
|||
else: |
|||
result[-1]['theo'] = tot_theo |
|||
tot['theo'] += tot_theo |
|||
result[-1]['pln'] = tot_pln |
|||
tot['pln'] += tot_pln |
|||
result[-1]['prac'] = tot_prac |
|||
tot['prac'] += tot_prac |
|||
result[-1]['perc'] = tot_perc |
|||
if tot['theo'] == 0.00: |
|||
tot['perc'] = 0.00 |
|||
else: |
|||
tot['perc'] = float(tot['prac'] / tot['theo']) * 100 |
|||
return result |
|||
|
|||
def funct_total(self, form): |
|||
result = [] |
|||
res = { |
|||
'tot_theo': tot['theo'], |
|||
'tot_pln': tot['pln'], |
|||
'tot_prac': tot['prac'], |
|||
'tot_perc': tot['perc'] |
|||
} |
|||
result.append(res) |
|||
return result |
|||
|
|||
|
|||
class ReportBudget(osv.AbstractModel): |
|||
_name = 'report.account_budget_report.report_budget' |
|||
_inherit = 'report.abstract_report' |
|||
_template = 'account_budget_report.report_budget' |
|||
_wrapped_report_class = BudgetReport |
@ -0,0 +1,180 @@ |
|||
# -*- coding: utf-8 -*- |
|||
import time |
|||
from odoo.osv import osv |
|||
from odoo.report import report_sxw |
|||
from odoo.http import request |
|||
|
|||
|
|||
class BudgetReport(report_sxw.rml_parse): |
|||
def __init__(self, cr, uid, name, context): |
|||
super(BudgetReport, self).__init__(cr, uid, name, context=context) |
|||
self.localcontext.update({ |
|||
'funct': self.funct, |
|||
'funct_total': self.funct_total, |
|||
'time': time, |
|||
}) |
|||
self.context = context |
|||
|
|||
def funct(self, object, form, ids=None, done=None, level=1): |
|||
if ids is None: |
|||
ids = {} |
|||
if not ids: |
|||
ids = self.ids |
|||
if not done: |
|||
done = {} |
|||
global tot |
|||
tot = { |
|||
'theo': 0.00, |
|||
'pln': 0.00, |
|||
'prac': 0.00, |
|||
'perc': 0.00 |
|||
} |
|||
result = [] |
|||
|
|||
budgets = request.env['crossovered.budget'].browse(object.id) |
|||
c_b_lines_obj = request.env['crossovered.budget.lines'] |
|||
acc_analytic_obj = request.env['account.analytic.account'] |
|||
for budget_id in budgets: |
|||
res = {} |
|||
budget_lines = [] |
|||
budget_ids = [] |
|||
d_from = form['date_from'] |
|||
d_to = form['date_to'] |
|||
|
|||
for line in budget_id.crossovered_budget_line: |
|||
budget_ids.append(line.id) |
|||
|
|||
if not budget_ids: |
|||
return [] |
|||
|
|||
self.cr.execute('SELECT DISTINCT(analytic_account_id) FROM crossovered_budget_lines ' |
|||
'WHERE id = ANY(%s)', (budget_ids,)) |
|||
an_ids = self.cr.fetchall() |
|||
|
|||
context = {'wizard_date_from': d_from, 'wizard_date_to': d_to} |
|||
for i in range(0, len(an_ids)): |
|||
if not an_ids[i][0]: |
|||
continue |
|||
analytic_name = acc_analytic_obj.browse([an_ids[i][0]]) |
|||
res = { |
|||
'b_id': '-1', |
|||
'a_id': '-1', |
|||
'name': analytic_name[0].name, |
|||
'status': 1, |
|||
'theo': 0.00, |
|||
'pln': 0.00, |
|||
'prac': 0.00, |
|||
'perc': 0.00 |
|||
} |
|||
result.append(res) |
|||
|
|||
line_ids = c_b_lines_obj.search([('id', 'in', budget_ids), ('analytic_account_id', '=', an_ids[i][0]), |
|||
('date_to', '>=', d_from), ('date_from', '<=', d_to)]) |
|||
line_id = line_ids |
|||
tot_theo = tot_pln = tot_prac = tot_perc = 0.00 |
|||
|
|||
done_budget = [] |
|||
for line in line_id: |
|||
if line.id in budget_ids: |
|||
theo = pract = 0.00 |
|||
theo = line.theoritical_amount |
|||
pract = c_b_lines_obj.practical_amount |
|||
if line.general_budget_id.id in done_budget: |
|||
for record in result: |
|||
if record['b_id'] == line.general_budget_id.id and \ |
|||
record['a_id'] == line.analytic_account_id.id: |
|||
record['theo'] += theo |
|||
record['pln'] += line.planned_amount |
|||
record['prac'] += pract |
|||
if record['theo'] <> 0.00: |
|||
perc = (record['prac'] / record['theo']) * 100 |
|||
else: |
|||
perc = 0.00 |
|||
record['perc'] = perc |
|||
tot_theo += theo |
|||
tot_pln += line.planned_amount |
|||
tot_prac += pract |
|||
tot_perc += perc |
|||
else: |
|||
if theo <> 0.00: |
|||
perc = (pract / theo) * 100 |
|||
else: |
|||
perc = 0.00 |
|||
res1 = { |
|||
'a_id': line.analytic_account_id.id, |
|||
'b_id': line.general_budget_id.id, |
|||
'name': line.general_budget_id.name, |
|||
'status': 2, |
|||
'theo': theo, |
|||
'pln': line.planned_amount, |
|||
'prac': pract, |
|||
'perc': perc, |
|||
} |
|||
tot_theo += theo |
|||
tot_pln += line.planned_amount |
|||
tot_prac += pract |
|||
tot_perc += perc |
|||
if form['report'] == 'analytic-full': |
|||
result.append(res1) |
|||
done_budget.append(line.general_budget_id.id) |
|||
else: |
|||
|
|||
if line.general_budget_id.id in done_budget: |
|||
continue |
|||
else: |
|||
res1 = { |
|||
'a_id': line.analytic_account_id.id, |
|||
'b_id': line.general_budget_id.id, |
|||
'name': line.general_budget_id.name, |
|||
'status': 2, |
|||
'theo': 0.00, |
|||
'pln': 0.00, |
|||
'prac': 0.00, |
|||
'perc': 0.00 |
|||
} |
|||
if form['report'] == 'analytic-full': |
|||
result.append(res1) |
|||
done_budget.append(line.general_budget_id.id) |
|||
if tot_theo == 0.00: |
|||
tot_perc = 0.00 |
|||
else: |
|||
tot_perc = float(tot_prac / tot_theo) * 100 |
|||
if form['report'] == 'analytic-full': |
|||
result[-(len(done_budget) + 1)]['theo'] = tot_theo |
|||
tot['theo'] += tot_theo |
|||
result[-(len(done_budget) + 1)]['pln'] = tot_pln |
|||
tot['pln'] += tot_pln |
|||
result[-(len(done_budget) + 1)]['prac'] = tot_prac |
|||
tot['prac'] += tot_prac |
|||
result[-(len(done_budget) + 1)]['perc'] = tot_perc |
|||
else: |
|||
result[-1]['theo'] = tot_theo |
|||
tot['theo'] += tot_theo |
|||
result[-1]['pln'] = tot_pln |
|||
tot['pln'] += tot_pln |
|||
result[-1]['prac'] = tot_prac |
|||
tot['prac'] += tot_prac |
|||
result[-1]['perc'] = tot_perc |
|||
if tot['theo'] == 0.00: |
|||
tot['perc'] = 0.00 |
|||
else: |
|||
tot['perc'] = float(tot['prac'] / tot['theo']) * 100 |
|||
return result |
|||
|
|||
def funct_total(self, form): |
|||
result = [] |
|||
res = { |
|||
'tot_theo': tot['theo'], |
|||
'tot_pln': tot['pln'], |
|||
'tot_prac': tot['prac'], |
|||
'tot_perc': tot['perc'] |
|||
} |
|||
result.append(res) |
|||
return result |
|||
|
|||
|
|||
class ReportCrossOverBudget(osv.AbstractModel): |
|||
_name = 'report.account_budget_report.report_cross_over_budget' |
|||
_inherit = 'report.abstract_report' |
|||
_template = 'account_budget_report.report_cross_over_budget' |
|||
_wrapped_report_class = BudgetReport |
@ -0,0 +1,77 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<odoo> |
|||
<template id="report_analytic_account_budget"> |
|||
<t t-call="report.html_container"> |
|||
<t t-foreach="docs" t-as="o"> |
|||
<t t-call="report.internal_layout"> |
|||
<div class="page"> |
|||
<h2>Analytic Budget</h2> |
|||
|
|||
<div class="row mt32"> |
|||
<div class="col-xs-3"> |
|||
<strong>Analysis from</strong> |
|||
<p><span t-esc="formatLang(data['form']['date_from'], date=True)"/> to |
|||
<span t-esc="formatLang(data['form']['date_to'], date=True)"/></p> |
|||
</div> |
|||
<div class="col-xs-3"> |
|||
<strong>Analytic Account</strong> |
|||
<p t-field="o.name"/> |
|||
</div> |
|||
<div class="col-xs-3"> |
|||
<strong>Currency</strong> |
|||
<p t-esc="res_company.currency_id.name"/> |
|||
</div> |
|||
</div> |
|||
|
|||
<table class="table table-condensed"> |
|||
<thead> |
|||
<tr> |
|||
<th>Description</th> |
|||
<th class="text-right">Theoretical Amt</th> |
|||
<th class="text-right">Planned Amt</th> |
|||
<th class="text-right">Practical Amt</th> |
|||
<th class="text-right">Perc(%)</th> |
|||
</tr> |
|||
</thead> |
|||
<tbody> |
|||
<t t-foreach="funct(o, data['form'])" t-as="line"> |
|||
<tr t-if="line['status'] == 1"> |
|||
<td><strong t-esc="line['name']"/></td> |
|||
<td class="text-right"><strong t-esc="formatLang(line['theo'], dp='Account', currency_obj=res_company.currency_id)"/></td> |
|||
<td class="text-right"><strong t-esc="formatLang(line['pln'], dp='Account', currency_obj=res_company.currency_id)"/></td> |
|||
<td class="text-right"><strong t-esc="formatLang(line['prac'], dp='Account', currency_obj=res_company.currency_id)"/></td> |
|||
<td class="text-right"><strong t-esc="formatLang(line['perc'], digits=2)"/> %</td> |
|||
</tr> |
|||
<tr t-if="line['status'] != 1"> |
|||
<td><span style="color: white;" t-esc="'.....'*(line['status'] - 1)"/><span t-esc="line['name']"/></td> |
|||
<td class="text-right"><span t-esc="formatLang(line['theo'], dp='Account', currency_obj=res_company.currency_id)"/></td> |
|||
<td class="text-right"><span t-esc="formatLang(line['pln'], dp='Account', currency_obj=res_company.currency_id)"/></td> |
|||
<td class="text-right"><span t-esc="formatLang(line['prac'], dp='Account', currency_obj=res_company.currency_id)"/></td> |
|||
<td class="text-right"><span t-esc="formatLang(line['perc'],digits=2)"/> %</td> |
|||
</tr> |
|||
</t> |
|||
<tr t-foreach="funct_total(data['form'])" t-as="tot"> |
|||
<td><strong>Total:</strong></td> |
|||
<td class="text-right"><strong t-esc="formatLang(tot['tot_theo'], dp='Account', currency_obj=res_company.currency_id)"/></td> |
|||
<td class="text-right"><strong t-esc="formatLang(tot['tot_pln'], dp='Account', currency_obj=res_company.currency_id)"/></td> |
|||
<td class="text-right"><strong t-esc="formatLang(tot['tot_prac'], dp='Account', currency_obj=res_company.currency_id)"/></td> |
|||
<td class="text-right"><strong t-esc="formatLang(tot['tot_perc'], digits=2)"/> %</td> |
|||
</tr> |
|||
</tbody> |
|||
</table> |
|||
</div> |
|||
</t> |
|||
</t> |
|||
</t> |
|||
</template> |
|||
|
|||
<report |
|||
id="action_report_analytic_account_budget" |
|||
model="account.analytic.account" |
|||
string="Budgets" |
|||
report_type="qweb-pdf" |
|||
name="account_budget_report.report_analytic_account_budget" |
|||
file="account_budget_report.report_analytic_account_budget" |
|||
menu="False" |
|||
/> |
|||
</odoo> |
@ -0,0 +1,89 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<odoo> |
|||
<template id="report_cross_over_budget"> |
|||
<t t-call="report.html_container"> |
|||
<t t-foreach="docs" t-as="o"> |
|||
<t t-call="report.internal_layout"> |
|||
<div class="page"> |
|||
<h2>Budget</h2> |
|||
|
|||
<div class="row mt32"> |
|||
<div class="col-xs-3"> |
|||
<strong>Analysis from:</strong> |
|||
<p><span t-esc="formatLang(data['form']['date_from'], date=True)"/> to |
|||
<span t-esc="formatLang(data['form']['date_to'], date=True)"/></p> |
|||
</div> |
|||
<div class="col-xs-3"> |
|||
<strong>Budget:</strong> |
|||
<p t-esc="o.name"/> |
|||
</div> |
|||
<div class="col-xs-3"> |
|||
<strong>Currency:</strong> |
|||
<p t-esc="res_company.currency_id.name"/> |
|||
</div> |
|||
</div> |
|||
|
|||
<table class="table table-condensed"> |
|||
<thead> |
|||
<tr> |
|||
<th>Description</th> |
|||
<th class="text-right">Theoretical Amt</th> |
|||
<th class="text-right">Planned Amt</th> |
|||
<th class="text-right">Practical Amt</th> |
|||
<th class="text-center">Perc(%)</th> |
|||
</tr> |
|||
</thead> |
|||
<tbody> |
|||
<tr t-foreach="funct(o, data['form'])" t-as="line"> |
|||
<td> |
|||
<span style="color: white;" t-esc="'... '*(line['status'] - 1)"/> |
|||
<span t-esc="line['name']"/> |
|||
</td> |
|||
<td class="text-right"> |
|||
<span t-esc="formatLang(line['theo'], dp='Account', currency_obj=res_company.currency_id)"/> |
|||
</td> |
|||
<td class="text-right"> |
|||
<span t-esc="formatLang(line['pln'], dp='Account', currency_obj=res_company.currency_id)"/> |
|||
</td> |
|||
<td class="text-right"> |
|||
<span t-esc="formatLang(line['prac'], dp='Account', currency_obj=res_company.currency_id)"/> |
|||
</td> |
|||
<td class="text-center"> |
|||
<span t-esc="formatLang(line['perc'],digits=2)"/> % |
|||
</td> |
|||
</tr> |
|||
<tr t-foreach="funct_total(data['form'])" t-as="tot"> |
|||
<td> |
|||
<strong>Total:</strong> |
|||
</td> |
|||
<td class="text-right"> |
|||
<strong t-esc="formatLang(tot['tot_theo'], dp='Account', currency_obj=res_company.currency_id)"/> |
|||
</td> |
|||
<td class="text-right"> |
|||
<strong t-esc="formatLang(tot['tot_pln'], dp='Account', currency_obj=res_company.currency_id)"/> |
|||
</td> |
|||
<td class="text-right"> |
|||
<strong t-esc="formatLang(tot['tot_prac'], dp='Account', currency_obj=res_company.currency_id)"/> |
|||
</td> |
|||
<td class="text-center"> |
|||
<strong t-esc="formatLang(tot['tot_perc'], digits=2)"/> % |
|||
</td> |
|||
</tr> |
|||
</tbody> |
|||
</table> |
|||
</div> |
|||
</t> |
|||
</t> |
|||
</t> |
|||
</template> |
|||
|
|||
<report |
|||
id="action_report_cross_over_budget" |
|||
model="crossovered.budget" |
|||
string="Budgets" |
|||
report_type="qweb-pdf" |
|||
name="account_budget_report.report_cross_over_budget" |
|||
file="account_budget_report.report_cross_over_budget" |
|||
menu="False" |
|||
/> |
|||
</odoo> |
After Width: | Height: | Size: 46 KiB |
After Width: | Height: | Size: 27 KiB |
After Width: | Height: | Size: 132 KiB |
After Width: | Height: | Size: 29 KiB |
After Width: | Height: | Size: 19 KiB |
After Width: | Height: | Size: 24 KiB |
After Width: | Height: | Size: 50 KiB |
After Width: | Height: | Size: 36 KiB |
@ -0,0 +1,145 @@ |
|||
<section class="oe_container"> |
|||
<div class="oe_row oe_spaced"> |
|||
<h2 class="oe_slogan">Account Budget Report</h2> |
|||
<h3 class="oe_slogan">Helps You To Analyse Budget Summary</h3> |
|||
<h4 class="oe_slogan"><a href="https://www.cybrosys.com">Cybrosys Technologies</a> </h4> |
|||
</div> |
|||
<div class="oe_row oe_spaced" style="padding-left:65px;"> |
|||
<h4>Features:</h4> |
|||
<div> |
|||
<span style="color:green;"> ☑ </span> Option to print budget summary from budgets<br/> |
|||
<span style="color:green;"> ☑ </span> Option to print budgets from budgets<br/> |
|||
<span style="color:green;"> ☑ </span> Option to print budgets from analytic accounts<br/> |
|||
<span style="color:green;"> ☑ </span> Option to print budgets from budgetary positions<br/> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container oe_dark"> |
|||
<div class="oe_row oe_spaced"> |
|||
<div class="oe_picture"> |
|||
<h3 class="oe_slogan">Overview</h3> |
|||
<p class="oe_mt32" style="text-align: center;"> |
|||
In odoo we can manage different budgets for every accounts. But currently there is no any option to take |
|||
budget report. So here we are providing budget analysis through different pdf reports. So we can take |
|||
quick budget analysis. |
|||
</p> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container"> |
|||
<div class="oe_row oe_spaced"> |
|||
<div style="text-align: center"> |
|||
<p> |
|||
<h4>Budget Summary</h4> |
|||
<p> |
|||
</div> |
|||
<div style="text-align: center"> |
|||
<div class="oe_demo oe_picture oe_screenshot"> |
|||
<img style="border:10px solid white;height: 400px;" src="budget_adviser.png"> |
|||
</div> |
|||
<span>Go to Account -> Adviser -> Budgets. Then select one or more budgets. Then click on 'Print' |
|||
menu and choose 'Print Summary'.</span> |
|||
<div class="oe_demo oe_picture oe_screenshot"> |
|||
<img style="border:10px solid white;height: 400px;" src="wizard.png"> |
|||
</div> |
|||
<span>You can choose start date and end date then click on 'Print' button.</span> |
|||
<div class="oe_demo oe_picture oe_screenshot"> |
|||
<img style="border:10px solid white;height: 400px;" src="summary_report.png"> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container oe_dark"> |
|||
<div class="oe_row oe_spaced"> |
|||
<div style="text-align: center"> |
|||
<p> |
|||
<h4>Budgets</h4> |
|||
<p> |
|||
</div> |
|||
<div style="text-align: center"> |
|||
<span>Go to Account -> Adviser -> Budgets. Then select one or more budgets. Then click on 'Print' |
|||
menu and choose 'Print Budgets'.</span> |
|||
<div class="oe_demo oe_picture oe_screenshot"> |
|||
<img style="border:10px solid white;height: 400px;" src="wizard1.png"> |
|||
</div> |
|||
<span>You can choose start date and end date then click on 'Print' button.</span> |
|||
<div class="oe_demo oe_picture oe_screenshot"> |
|||
<img style="border:10px solid white;height: 400px;" src="report2.png"> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container"> |
|||
<div class="oe_row oe_spaced"> |
|||
<div style="text-align: center"> |
|||
<p> |
|||
<h4>Analytic Accounts</h4> |
|||
<p> |
|||
</div> |
|||
<div style="text-align: center"> |
|||
<span>Go to Account -> Adviser -> Analytic Accounts. Then select one analytic accounts. Then click on 'Print' |
|||
menu and choose 'Print Budgets'.</span> |
|||
<div class="oe_demo oe_picture oe_screenshot"> |
|||
<img style="border:10px solid white;height: 400px;" src="analytic_budget.png"> |
|||
</div> |
|||
<span>You can choose start date and end date then click on 'Print' button.</span> |
|||
<div class="oe_demo oe_picture oe_screenshot"> |
|||
<img style="border:10px solid white;height: 400px;" src="analytic_budget_report.png"> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container oe_dark"> |
|||
<div class="oe_row oe_spaced"> |
|||
<div style="text-align: center"> |
|||
<p> |
|||
<h4>Budgetary Positions</h4> |
|||
<p> |
|||
</div> |
|||
<div style="text-align: center"> |
|||
<span>Go to Account -> Configuration -> Management -> Budgetary Positions. Then select one budgetary position. |
|||
Then click on 'Print' menu and choose 'Budgets'.</span> |
|||
<div class="oe_demo oe_picture oe_screenshot"> |
|||
<img style="border:10px solid white;height: 400px;" src="budgetry_position.png"> |
|||
</div> |
|||
<span>You can choose start date and end date then click on 'Print' button.</span> |
|||
<div class="oe_demo oe_picture oe_screenshot"> |
|||
<img style="border:10px solid white;height: 400px;" src="budgetry_position_report.png"> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container"> |
|||
<h2 class="oe_slogan" style="margin-top:20px;" >Need Any Help?</h2> |
|||
<div class="oe_slogan" style="margin-top:10px !important;"> |
|||
<div> |
|||
<a class="btn btn-primary btn-lg mt8" |
|||
style="color: #FFFFFF !important;border-radius: 0;" href="https://www.cybrosys.com"><i |
|||
class="fa fa-envelope"></i> Email </a> <a |
|||
class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;border-radius: 0;" |
|||
href="https://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;border-radius: 0;" |
|||
href="https://www.cybrosys.com/odoo-customization-and-installation/"><i |
|||
class="fa fa-check-square"></i> Request Customization </a> |
|||
</div> |
|||
<br> |
|||
<img src="cybro_logo.png" style="width: 190px; margin-bottom: 20px;" class="center-block"> |
|||
<div> |
|||
<a href="https://twitter.com/cybrosys" target="_blank"><i class="fa fa-2x fa-twitter" style="color:white;background: #00a0d1;width:35px;"></i></a></td> |
|||
<a href="https://www.linkedin.com/company/cybrosys-technologies-pvt-ltd" target="_blank"><i class="fa fa-2x fa-linkedin" style="color:white;background: #31a3d6;width:35px;padding-left: 3px;"></i></a></td> |
|||
<a href="https://www.facebook.com/cybrosystechnologies" target="_blank"><i class="fa fa-2x fa-facebook" style="color:white;background: #3b5998;width:35px;padding-left: 8px;"></i></a></td> |
|||
<a href="https://plus.google.com/106641282743045431892/about" target="_blank"><i class="fa fa-2x fa-google-plus" style="color:white;background: #c53c2c;width:35px;padding-left: 3px;"></i></a></td> |
|||
<a href="https://in.pinterest.com/cybrosys" target="_blank"><i class="fa fa-2x fa-pinterest" style="color:white;background: #ac0f18;width:35px;padding-left: 3px;"></i></a></td> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
|
|||
|
After Width: | Height: | Size: 24 KiB |
After Width: | Height: | Size: 22 KiB |
After Width: | Height: | Size: 18 KiB |
After Width: | Height: | Size: 15 KiB |
@ -0,0 +1,38 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<odoo> |
|||
<record id="account_budget_analytic_view" model="ir.ui.view"> |
|||
<field name="name">account.budget.analytic.form</field> |
|||
<field name="model">account.budget.analytic</field> |
|||
<field name="arch" type="xml"> |
|||
<form string="Select Dates Period"> |
|||
<group string="This wizard is used to print budget" col="4"> |
|||
<field name="date_from"/> |
|||
<field name="date_to"/> |
|||
</group> |
|||
<footer> |
|||
<button name="check_report" string="Print" type="object" default_focus="1" class="btn-primary"/> |
|||
<button string="Cancel" class="btn-default" special="cancel"/> |
|||
</footer> |
|||
</form> |
|||
</field> |
|||
</record> |
|||
|
|||
<record id="action_account_budget_analytic" model="ir.actions.act_window"> |
|||
<field name="name">Print Budgets</field> |
|||
<field name="type">ir.actions.act_window</field> |
|||
<field name="res_model">account.budget.analytic</field> |
|||
<field name="view_type">form</field> |
|||
<field name="view_mode">form</field> |
|||
<field name="view_id" ref="account_budget_analytic_view"/> |
|||
<field name="target">new</field> |
|||
</record> |
|||
|
|||
<record model="ir.values" id="account_budget_analytic_values"> |
|||
<field name="model_id" ref="analytic.model_account_analytic_account" /> |
|||
<field name="name">Print Budgets</field> |
|||
<field name="key2">client_print_multi</field> |
|||
<field name="value" eval="'ir.actions.act_window,' + str(ref('action_account_budget_analytic'))" /> |
|||
<field name="key">action</field> |
|||
<field name="model">account.analytic.account</field> |
|||
</record> |
|||
</odoo> |
@ -0,0 +1,37 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<odoo> |
|||
<record id="account_budget_cross_over_report_view" model="ir.ui.view"> |
|||
<field name="name">account.budget.cross.over.report.form</field> |
|||
<field name="model">account.budget.cross.over.report</field> |
|||
<field name="arch" type="xml"> |
|||
<form string="Select Dates Period"> |
|||
<group string="This wizard is used to print budget" col="4"> |
|||
<field name="date_from"/> |
|||
<field name="date_to"/> |
|||
</group> |
|||
<footer> |
|||
<button name="check_report" string="Print" type="object" default_focus="1" class="btn-primary"/> |
|||
<button string="Cancel" class="btn-default" special="cancel"/> |
|||
</footer> |
|||
</form> |
|||
</field> |
|||
</record> |
|||
|
|||
<record id="action_account_budget_cross_over_report" model="ir.actions.act_window"> |
|||
<field name="name">Print Budgets</field> |
|||
<field name="type">ir.actions.act_window</field> |
|||
<field name="res_model">account.budget.cross.over.report</field> |
|||
<field name="view_type">form</field> |
|||
<field name="view_mode">form</field> |
|||
<field name="view_id" ref="account_budget_cross_over_report_view"/> |
|||
<field name="target">new</field> |
|||
</record> |
|||
<record model="ir.values" id="account_budget_cross_over_report_values"> |
|||
<field name="model_id" ref="account_budget.model_crossovered_budget" /> |
|||
<field name="name">Print Budgets</field> |
|||
<field name="key2">client_print_multi</field> |
|||
<field name="value" eval="'ir.actions.act_window,' + str(ref('action_account_budget_cross_over_report'))" /> |
|||
<field name="key">action</field> |
|||
<field name="model">crossovered.budget</field> |
|||
</record> |
|||
</odoo> |
@ -0,0 +1,39 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<odoo> |
|||
<record id="account_budget_report_view" model="ir.ui.view"> |
|||
<field name="name">account.budget.report.form</field> |
|||
<field name="model">account.budget.report</field> |
|||
<field name="arch" type="xml"> |
|||
<form string="Select Dates Period"> |
|||
<group string="This wizard is used to print budget" col="4"> |
|||
<field name="date_from"/> |
|||
<field name="date_to"/> |
|||
</group> |
|||
<footer> |
|||
<button name="check_report" string="Print" type="object" default_focus="1" class="oe_highlight"/> |
|||
or |
|||
<button string="Cancel" class="oe_link" special="cancel"/> |
|||
</footer> |
|||
</form> |
|||
</field> |
|||
</record> |
|||
|
|||
<record id="action_account_budget_report" model="ir.actions.act_window"> |
|||
<field name="name">Budgets</field> |
|||
<field name="type">ir.actions.act_window</field> |
|||
<field name="res_model">account.budget.report</field> |
|||
<field name="view_type">form</field> |
|||
<field name="view_mode">form</field> |
|||
<field name="view_id" ref="account_budget_report_view"/> |
|||
<field name="target">new</field> |
|||
</record> |
|||
|
|||
<record model="ir.values" id="account_budget_report_values"> |
|||
<field name="model_id" ref="account_budget.model_account_budget_post" /> |
|||
<field name="name">Budgets</field> |
|||
<field name="key2">client_print_multi</field> |
|||
<field name="value" eval="'ir.actions.act_window,' + str(ref('action_account_budget_report'))" /> |
|||
<field name="key">action</field> |
|||
<field name="model">account.budget.post</field> |
|||
</record> |
|||
</odoo> |
@ -0,0 +1,38 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<odoo> |
|||
<record id="account_budget_cross_over_summary_report_view" model="ir.ui.view"> |
|||
<field name="name">account.budget.cross.over.summary.report.form</field> |
|||
<field name="model">account.budget.cross.over.summary.report</field> |
|||
<field name="arch" type="xml"> |
|||
<form string="Select Dates Period"> |
|||
<group string="This wizard is used to print summary of budgets"> |
|||
<field name="date_from"/> |
|||
<field name="date_to"/> |
|||
</group> |
|||
<footer> |
|||
<button name="check_report" string="Print" type="object" default_focus="1" class="btn-primary"/> |
|||
<button string="Cancel" class="btn-default" special="cancel"/> |
|||
</footer> |
|||
</form> |
|||
</field> |
|||
</record> |
|||
|
|||
<record id="action_account_budget_cross_over_summary_report" model="ir.actions.act_window"> |
|||
<field name="name">Print Summary</field> |
|||
<field name="type">ir.actions.act_window</field> |
|||
<field name="res_model">account.budget.cross.over.summary.report</field> |
|||
<field name="view_type">form</field> |
|||
<field name="view_mode">form</field> |
|||
<field name="view_id" ref="account_budget_cross_over_summary_report_view"/> |
|||
<field name="target">new</field> |
|||
</record> |
|||
|
|||
<record model="ir.values" id="account_budget_cross_over_summary_report_values"> |
|||
<field name="model_id" ref="account_budget.model_crossovered_budget" /> |
|||
<field name="name">Print Summary</field> |
|||
<field name="key2">client_print_multi</field> |
|||
<field name="value" eval="'ir.actions.act_window,' + str(ref('action_account_budget_cross_over_summary_report'))" /> |
|||
<field name="key">action</field> |
|||
<field name="model">crossovered.budget</field> |
|||
</record> |
|||
</odoo> |