You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

153 lines
5.6 KiB

# -*- coding: utf-8 -*-
# Copyright 2015-2016 Odoo S.A.
# Copyright 2017-2018 Rémy Taymans <remytaymans@gmail.com>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from werkzeug.exceptions import Forbidden, NotFound
from openerp import http
from openerp.exceptions import AccessError, MissingError
from openerp.http import request
from openerp.addons.website_portal_v10.controllers.main import WebsiteAccount
class TaxShelterWebsiteAccount(WebsiteAccount):
@http.route()
def account(self):
""" Add Tax Shelter Certificate to main account page """
response = super(TaxShelterWebsiteAccount, self).account()
partner = request.env.user.partner_id
tax_shelter_mgr = request.env['tax.shelter.certificate']
tax_shelter_count = tax_shelter_mgr.sudo().search_count([
('partner_id', 'in', [partner.commercial_partner_id.id]),
])
response.qcontext.update({
'tax_shelter_count': tax_shelter_count,
})
return response
@http.route(
['/my/tax_shelter_certificate',
'/my/tax_shelter_certificate/page/<int:page>'],
type='http', auth="user", website=True)
def portal_my_tax_shelter_certificate(self, page=1, date_begin=None,
date_end=None, **kw):
"""Render a page that lits the tax shelter report:
* Tax Shelter Certificates
* Shares Certifcates
"""
values = self._prepare_portal_layout_values()
partner = request.env.user.partner_id
tax_shelter_mgr = request.env['tax.shelter.certificate']
domain = [
('partner_id', 'in', [partner.commercial_partner_id.id]),
]
if date_begin and date_end:
domain += [('create_date', '>=', date_begin),
('create_date', '<', date_end)]
# count for pager
tax_shelter_count = tax_shelter_mgr.sudo().search_count(domain)
# pager
pager = request.website.pager(
url="/my/tax_shelter_certificate",
url_args={'date_begin': date_begin, 'date_end': date_end},
total=tax_shelter_count,
page=page,
step=self._items_per_page
)
# content according to pager and archive selected
tax_shelters = tax_shelter_mgr.sudo().search(
domain, limit=self._items_per_page, offset=pager['offset'])
tax_shelters = tax_shelters.sorted(
key=lambda r: r.declaration_id.fiscal_year,
reverse=True
)
values.update({
'date': date_begin,
'tax_shelters': tax_shelters,
'page_name': 'invoice',
'pager': pager,
'default_url': '/my/tax_shelter_certificate',
})
return request.website.render(
"easy_my_coop_website_taxshelter.portal_my_tax_shelter",
values
)
@http.route(['/my/taxshelter_certificate/pdf/<int:oid>'],
type='http', auth="user", website=True)
def get_taxshelter_certificate_pdf(self, oid=-1):
"""Render the Tax Shelter Certificate pdf of the given Tax
Shelter Report
"""
# Get the subscription certificate and raise an error if the user
# is not allowed to access to it or if the object is not found.
partner = request.env.user.partner_id
tax_shelter_mgr = request.env['tax.shelter.certificate']
tax_shelter = tax_shelter_mgr.sudo().browse(oid)
try:
if tax_shelter.partner_id != partner:
raise Forbidden()
except AccessError:
raise Forbidden()
except MissingError:
raise NotFound()
# Get the pdf
report_mgr = request.env['report']
pdf = report_mgr.sudo().get_pdf(
tax_shelter,
'easy_my_coop_taxshelter_report.tax_shelter_subscription_report'
)
filename = "Tax Shelter Certificate - %s - %s" % (
partner.name,
tax_shelter.declaration_id.fiscal_year
)
return self._render_pdf(pdf, filename)
@http.route(['/my/share_certificate/pdf/<int:oid>'],
type='http', auth="user", website=True)
def get_share_certificate_pdf(self, oid=-1):
"""Render the Share Certificate pdf of the given Tax Shelter
Report
"""
# Get the share certificate and raise an error if the user
# is not allowed to access to it or if the object is not found.
partner = request.env.user.partner_id
tax_shelter_mgr = request.env['tax.shelter.certificate']
tax_shelter = tax_shelter_mgr.sudo().browse(oid)
try:
if tax_shelter.partner_id != partner:
raise Forbidden()
except AccessError:
raise Forbidden()
except MissingError:
raise NotFound()
# Get the pdf
report_mgr = request.env['report']
pdf = report_mgr.sudo().get_pdf(
tax_shelter,
'easy_my_coop_taxshelter_report.tax_shelter_shares_report'
)
filename = "Share Certificate - %s - %s" % (
partner.name,
tax_shelter.declaration_id.fiscal_year
)
return self._render_pdf(pdf, filename)
def _render_pdf(self, pdf, filename):
"""Render a http response for a pdf"""
pdfhttpheaders = [
('Content-Disposition', 'inline; filename="%s.pdf"' % filename),
('Content-Type', 'application/pdf'),
('Content-Length', len(pdf))
]
return request.make_response(pdf, headers=pdfhttpheaders)