From f3333f9c57cd14ee49917091028d3b9d39f0678c Mon Sep 17 00:00:00 2001 From: David Monjoie Date: Fri, 5 Sep 2014 17:09:12 +0200 Subject: [PATCH] [ADD] website_sale_digital --- addons/website_sale_digital/__init__.py | 1 + addons/website_sale_digital/__openerp__.py | 21 +++++ .../controllers/__init__.py | 1 + .../website_sale_digital/controllers/main.py | 94 +++++++++++++++++++ .../views/website_sale_digital.xml | 79 ++++++++++++++++ openerp/sql_db.py | 4 + 6 files changed, 200 insertions(+) create mode 100644 addons/website_sale_digital/__init__.py create mode 100644 addons/website_sale_digital/__openerp__.py create mode 100644 addons/website_sale_digital/controllers/__init__.py create mode 100644 addons/website_sale_digital/controllers/main.py create mode 100644 addons/website_sale_digital/views/website_sale_digital.xml diff --git a/addons/website_sale_digital/__init__.py b/addons/website_sale_digital/__init__.py new file mode 100644 index 00000000000..0d6ef6db7ce --- /dev/null +++ b/addons/website_sale_digital/__init__.py @@ -0,0 +1 @@ +import controllers # NOQA diff --git a/addons/website_sale_digital/__openerp__.py b/addons/website_sale_digital/__openerp__.py new file mode 100644 index 00000000000..72610a9db64 --- /dev/null +++ b/addons/website_sale_digital/__openerp__.py @@ -0,0 +1,21 @@ +{ + 'name': 'Website Sale Digital - Sell digital products', + 'version': '0.0.1', + 'description': """ +Sell data product through attachments +""", + 'author': 'OpenERP S.A.', + 'depends': [ + 'website_sale', + ], + 'website': 'http://apps.openerp.com', + 'active': False, + 'installable': True, + 'data': [ + 'views/website_sale_digital.xml', + ], + 'demo': [ + ], + 'qweb': [ + ], +} diff --git a/addons/website_sale_digital/controllers/__init__.py b/addons/website_sale_digital/controllers/__init__.py new file mode 100644 index 00000000000..8ee9bae18d9 --- /dev/null +++ b/addons/website_sale_digital/controllers/__init__.py @@ -0,0 +1 @@ +import main diff --git a/addons/website_sale_digital/controllers/main.py b/addons/website_sale_digital/controllers/main.py new file mode 100644 index 00000000000..c0344d8ed4a --- /dev/null +++ b/addons/website_sale_digital/controllers/main.py @@ -0,0 +1,94 @@ +# -*- coding: utf-8 -*- + +import base64 +from openerp import SUPERUSER_ID as SU +from openerp.addons.web import http +from openerp.addons.web.http import request +from openerp.addons.website_sale.controllers.main import website_sale +from itertools import groupby +from werkzeug.exceptions import NotFound + + +class website_sale_digital(website_sale): + + @http.route([ + '/shop/confirmation', + ], type='http', auth="public", website=True) + def display_attachments(self, **post): + r = super(website_sale_digital, self).payment_confirmation(**post) + return r + + @http.route([ + '/shop/attachment', + ], auth='public') + def download_attachment(self, attachment_id): + res = request.env(user=SU)['ir.attachment'].search_read([('id', '=', int(attachment_id))], ["name", "datas", "file_type"]) + if res: + res = res[0] + else: + raise NotFound() + data = base64.standard_b64decode(res["datas"]) + headers = [ + ('Content-Type', res['file_type']), + ('Content-Length', len(data)), + ('Content-Disposition', 'attachment; filename="' + res['name'] + '"') + ] + return request.make_response(data, headers) + + @http.route([ + '/website_sale_digital/downloads', + ], type='http', auth='public', website=True) + def get_downloads(self): + user = request.env['res.users'].browse(request.uid) + partner = user.partner_id + + # purchased_products = request.env['sale.order.line'].read_group( + # domain = ['&', ('order_id.partner_id', '=', partner.id), ('state', '=', 'confirmed')],#, ('product_id.data','=' true)]) + # fields = ['order_id', product_id'], + # groupby = 'product_id', + # #orderby = 'order_id', + # ) + + purchased_products = request.env['sale.order.line'].search_read( + domain = ['&', ('order_id.partner_id', '=', partner.id), ('state', '=', 'confirmed')],#, ('product_id.data','=' true)]) + fields = ['product_id'], + ) + + products_ids = [] + names = {} + attachments = {} + A = request.env['ir.attachment'] + P = request.env['product.product'] + for product in purchased_products: + # Ignore duplicate products + p_id = product['product_id'][0] + if p_id in products_ids: + continue + + # Search for product attachments + p_name = product['product_id'][1] + p_obj = P.browse(p_id) + template = p_obj.product_tmpl_id + att = A.search_read( + domain = ['|', '&', ('res_model', '=', 'product.product'), ('res_id', '=', p_id), '&', ('res_model', '=', 'product.template'), ('res_id', '=', template.id)], + fields = ['name'], + ) + + # Ignore products with no attachments + if not att: + continue + + # Store values for QWeb + products_ids.append(p_id) + attributes = p_obj.attribute_value_ids + if attributes: + names[p_id] = template.name + ' (' + ', '.join([a.name for a in attributes]) + ')' + else: + names[p_id] = template.name + attachments[p_id] = att + + return request.website.render('website_sale_digital.downloads', { + 'products': products_ids, + 'names': names, + 'attachments': attachments + }) \ No newline at end of file diff --git a/addons/website_sale_digital/views/website_sale_digital.xml b/addons/website_sale_digital/views/website_sale_digital.xml new file mode 100644 index 00000000000..c88521c409e --- /dev/null +++ b/addons/website_sale_digital/views/website_sale_digital.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/openerp/sql_db.py b/openerp/sql_db.py index 739c32a4f12..7cf48568dec 100644 --- a/openerp/sql_db.py +++ b/openerp/sql_db.py @@ -233,6 +233,10 @@ class Cursor(object): params = params or None res = self._obj.execute(query, params) except psycopg2.ProgrammingError, pe: + print self + print self._obj + print query + print params if self._default_log_exceptions if log_exceptions is None else log_exceptions: _logger.error("Programming error: %s, in query %s", pe, query) raise