Browse Source

[ADD] website_pos_order: List POS order on website

pull/44/head
Rémy Taymans 6 years ago
parent
commit
f63763aff8
  1. 2
      beesdoo_website_pos_order/__init__.py
  2. 32
      beesdoo_website_pos_order/__openerp__.py
  3. 2
      beesdoo_website_pos_order/controllers/__init__.py
  4. 112
      beesdoo_website_pos_order/controllers/main.py
  5. 102
      beesdoo_website_pos_order/views/beesdoo_website_pos_order_templates.xml

2
beesdoo_website_pos_order/__init__.py

@ -0,0 +1,2 @@
# -*- coding: utf8 -*-
import controllers

32
beesdoo_website_pos_order/__openerp__.py

@ -0,0 +1,32 @@
# -*- coding: utf-8 -*-
# Copyright 2018 Rémy Taymans <remytaymans@gmail.com>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
{
'name': 'BEES coop Website POS Order',
'summary': """
Allow a user to access to his POS Order in the website.
""",
'description': """
""",
'author': 'Rémy Taymans',
'license': 'AGPL-3',
'version': '9.0.1.0',
'website': "https://github.com/beescoop/Obeesdoo",
'category': 'Website',
'depends': [
'website',
'website_portal_v10',
'report',
'point_of_sale',
],
'data': [
'views/beesdoo_website_pos_order_templates.xml',
]
}

2
beesdoo_website_pos_order/controllers/__init__.py

@ -0,0 +1,2 @@
# -*- coding: utf-8 -*-
from . import main

112
beesdoo_website_pos_order/controllers/main.py

@ -0,0 +1,112 @@
# -*- coding: utf-8 -*-
# Copyright 2015-2016 Odoo S.A.
# Copyright 2016 Jairo Llopis <jairo.llopis@tecnativa.com>
# 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 CooperatorWebsiteAccount(WebsiteAccount):
@http.route()
def account(self):
""" Add POS Order to main account page """
response = super(CooperatorWebsiteAccount, self).account()
partner = request.env.user.partner_id
pos_order_mgr = request.env['pos.order'].sudo()
pos_order_count = pos_order_mgr.search_count([
('partner_id', 'in', [partner.commercial_partner_id.id]),
])
response.qcontext.update({
'pos_order_count': pos_order_count,
})
return response
@http.route(
['/my/pos_order',
'/my/pos_order/page/<int:page>'],
type='http', auth="user", website=True)
def portal_my_pos_order(self, page=1, date_begin=None,
date_end=None, **kw):
"""Render a page that lits the POS order of the connected user."""
values = self._prepare_portal_layout_values()
partner = request.env.user.partner_id
pos_order_mgr = request.env['pos.order'].sudo()
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
pos_order_count = pos_order_mgr.search_count(domain)
# pager
pager = request.website.pager(
url="/my/pos_order",
url_args={'date_begin': date_begin, 'date_end': date_end},
total=pos_order_count,
page=page,
step=self._items_per_page
)
# content according to pager and archive selected
pos_orders = pos_order_mgr.search(
domain, limit=self._items_per_page, offset=pager['offset'])
values.update({
'date': date_begin,
'pos_orders': pos_orders,
'page_name': 'invoice',
'pager': pager,
'default_url': '/my/pos_order',
})
return request.website.render(
'beesdoo_website_pos_order.portal_my_pos_order',
values
)
@http.route(['/my/pos_order_receipt/pdf/<int:oid>'],
type='http', auth="user", website=True)
def get_pos_order_receipt(self, oid=-1):
"""Render the receipt for a POS order"""
# Get the POS order 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
pos_order_mgr = request.env['pos.order'].sudo()
pos_order = pos_order_mgr.browse(oid)
try:
if pos_order.partner_id != partner.commercial_partner_id:
raise Forbidden()
except AccessError:
raise Forbidden()
except MissingError:
raise NotFound()
# Get the pdf
report_mgr = request.env['report'].sudo()
pdf = report_mgr.get_pdf(
pos_order,
'point_of_sale.report_receipt'
)
filename = pos_order.pos_reference
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)

102
beesdoo_website_pos_order/views/beesdoo_website_pos_order_templates.xml

@ -0,0 +1,102 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2015-2016 Odoo S.A.
Copyright 2016 Jairo Llopis <jairo.llopis@tecnativa.com>
Copyright 2018 Rémy Taymans <remytaymans@gmail.com>
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
-->
<openerp>
<!-- POS Order in the menu -->
<template
id="portal_my_home_menu_pos_order"
name="Portal Menu: POS Order"
inherit_id="website_portal_v10.portal_layout"
priority="28">
<xpath expr="//ul[contains(@class,'o_portal_submenu')]"
position="inside">
<li>
<a href="/my/pos_order">
POS Orders
</a>
</li>
</xpath>
</template>
<!-- POS Order on the main page -->
<template
id="portal_my_home_pos_order"
name="Portal My Home : POS Order"
inherit_id="website_portal_v10.portal_my_home"
priority="28">
<xpath expr="//div[contains(@class,'o_my_home_content')]"
position="inside">
<h3 class="page-header">
<a href="/my/pos_order">
Your POS Orders
<small class="ml8">
<t t-if="pos_order_count">
<span class='badge'>
<t t-esc="pos_order_count"/>
</span>
</t>
<t t-if="not pos_order_count">
There are currently no POS order for your account.
</t>
</small>
</a>
</h3>
</xpath>
</template>
<!-- POS Order page -->
<template id="portal_my_pos_order" name="My POS Order">
<t t-call="website_portal_v10.portal_layout">
<h3 class="page-header">Your POS Orders</h3>
<t t-if="not pos_orders">
<p>
There are currently no POS order for your account.
</p>
</t>
<t t-if="pos_orders">
<table class="table table-hover o_my_status_table">
<thead>
<tr class="active">
<th>Receipt</th>
<th>Name</th>
<th>Date</th>
<th>Total Amount</th>
</tr>
</thead>
<tbody>
<tr t-foreach="pos_orders" t-as="pos_order">
<td>
<a t-att-href="'/my/pos_order_receipt/pdf/%s'
% pos_order.id">
<t t-esc="pos_order.pos_reference"/>
</a>
</td>
<td>
<t t-esc="pos_order.name"/>
</td>
<td>
<span t-field="pos_order.date_order"/>
</td>
<td>
<span t-field="pos_order.amount_total"
t-field-options='{
"widget": "monetary",
"display_currency": "pos_order.partner_id.company_id.currency_id"
}'/>
</td>
</tr>
</tbody>
</table>
<div t-if="pager" class="o_portal_pager text-center">
<t t-call="website.pager"/>
</div>
</t>
</t>
</template>
</openerp>
Loading…
Cancel
Save