from odoo import http,_ from odoo.http import request import werkzeug from odoo.exceptions import UserError from odoo.addons.portal.controllers.portal import CustomerPortal,pager as portal_pager, get_records_pager class PortalOpendons(CustomerPortal): def _prepare_home_portal_values(self, counters): values = super()._prepare_home_portal_values(counters) partner = request.env.user.partner_id if 'taxreceipt_count' in counters: taxreceipt_count=request.env['donation.tax.receipt'].sudo().search_count([('partner_id','=',int(partner.id))]) values['taxreceipt_count'] = taxreceipt_count if 'donation_count' in counters: donation_count=request.env['donation.donation'].sudo().search_count(['&',('partner_id','=',int(partner.id)),('state','=','done')]) values['donation_count'] = donation_count return values @http.route(['/my/taxreceipts', '/my/taxreceipts/page/'], type='http', auth="user", website=True) def portal_my_taxreceipts(self, page=1, date_begin=None, date_end=None, sortby=None, **kw): values = self._prepare_portal_layout_values() partner = request.env.user.partner_id taxreceipt = request.env['donation.tax.receipt'].sudo().search([]) domain = [ ('partner_id', '=',int(partner.id) ) ] searchbar_sortings = { 'date': {'label': _('Tax receipt Date'), 'taxreceipt': 'date desc'}, } # default sortby order if not sortby: sortby = 'date' sort_taxreceipt = searchbar_sortings[sortby]['taxreceipt'] if date_begin and date_end: domain += [('create_date', '>', date_begin), ('create_date', '<=', date_end)] # count for pager taxreceipt_count = taxreceipt.search_count(domain) # make pager pager = portal_pager( url="/my/taxreceipts", url_args={'date_begin': date_begin, 'date_end': date_end, 'sortby': sortby}, total=taxreceipt_count, page=page, step=self._items_per_page ) # search the count to display, according to the pager data taxreceipts = taxreceipt.sudo().search(domain, order=sort_taxreceipt, limit=self._items_per_page, offset=pager['offset']) request.session['my_taxreceipt_history'] = taxreceipts.ids[:100] values.update({ 'date': date_begin, 'taxreceipts': taxreceipts.sudo(), 'page_name': 'tax receipts', 'pager': pager, 'default_url': '/my/taxreceipts', 'searchbar_sortings': searchbar_sortings, 'sortby': sortby, }) return request.render("opendons.portal_my_taxreceipts", values) @http.route(['/my/donations', '/my/donations/page/'], type='http', auth="user", website=True) def portal_my_donations(self, page=1, date_begin=None, date_end=None, sortby=None, **kw): values = self._prepare_portal_layout_values() partner = request.env.user.partner_id donation = request.env['donation.line'] domain = [ ('partner_id', '=',int(partner.id) ) ] searchbar_sortings = { 'date': {'label': _('Donation Date'), 'Donation': 'donation_date desc'}, } # default sortby order if not sortby: sortby = 'date' sort_donation = searchbar_sortings[sortby]['Donation'] if date_begin and date_end: domain += [('create_date', '>', date_begin), ('create_date', '<=', date_end)] # count for pager donation_count = donation.search_count(domain) # make pager pager = portal_pager( url="/my/donations", url_args={'date_begin': date_begin, 'date_end': date_end, 'sortby': sortby}, total=donation_count, page=page, step=self._items_per_page ) # search the count to display, according to the pager data donations = donation.search(domain, order=sort_donation, limit=self._items_per_page, offset=pager['offset']) request.session['my_donation_history'] = donations.ids[:100] values.update({ 'date': date_begin, 'donations': donations.sudo(), 'page_name': 'Donations', 'pager': pager, 'default_url': '/my/donations', 'searchbar_sortings': searchbar_sortings, 'sortby': sortby, }) return request.render("opendons.portal_my_donations", values) @http.route('/my/taxreceipt/print', methods=['POST', 'GET'], csrf=False, type='http', auth="user", website=True) def print_id(self, **kw): tr=request.env['donation.tax.receipt'].sudo().search([('id','=',int(kw['id']))]) if tr: pdf = request.env.ref('opendons.report_donation_tax_receipt').sudo()._render_qweb_pdf([tr.id])[0] pdfhttpheaders = [('Content-Type', 'application/pdf'), ('Content-Length', len(pdf))] return request.make_response(pdf, headers=pdfhttpheaders) else: return request.redirect('/')