# -*- coding: utf-8 -*- # Part of Biztech Consultancy. See LICENSE file for full copyright and licensing details. import werkzeug from openerp import http from openerp.http import request from openerp import SUPERUSER_ID from openerp.addons.website.models.website import slug from openerp.addons.website_sale.controllers.main import QueryURL from openerp.addons.website_sale.controllers.main import get_pricelist from openerp.addons.web.controllers.main import login_redirect from openerp.addons.website_sale.controllers.main import website_sale import re PPG = 12 # Products Per Page PPR = 3 # Products Per Row class table_compute(object): def __init__(self): self.table = {} def _check_place(self, posx, posy, sizex, sizey): res = True for y in range(sizey): for x in range(sizex): if posx+x>=PPR: res = False break row = self.table.setdefault(posy+y, {}) if row.setdefault(posx+x) is not None: res = False break for x in range(PPR): self.table[posy+y].setdefault(x, None) return res def process(self, products): # Compute products positions on the grid minpos = 0 index = 0 maxy = 0 for p in products: x = min(max(p.website_size_x, 1), PPR) y = min(max(p.website_size_y, 1), PPR) if index>=PPG: x = y = 1 pos = minpos while not self._check_place(pos%PPR, pos/PPR, x, y): pos += 1 # if 21st products (index 20) and the last line is full (PPR products in it), break # (pos + 1.0) / PPR is the line where the product would be inserted # maxy is the number of existing lines # + 1.0 is because pos begins at 0, thus pos 20 is actually the 21st block # and to force python to not round the division operation if index >= PPG and ((pos + 1.0) / PPR) > maxy: break if x==1 and y==1: # simple heuristic for CPU optimization minpos = pos/PPR for y2 in range(y): for x2 in range(x): self.table[(pos/PPR)+y2][(pos%PPR)+x2] = False self.table[pos/PPR][pos%PPR] = { 'product': p, 'x':x, 'y': y, 'class': " ".join(map(lambda x: x.html_class or '', p.website_style_ids)) } if index<=PPG: maxy=max(maxy,y+(pos/PPR)) index += 1 # Format table according to HTML needs rows = self.table.items() rows.sort() rows = map(lambda x: x[1], rows) for col in range(len(rows)): cols = rows[col].items() cols.sort() x += len(cols) rows[col] = [c for c in map(lambda x: x[1], cols) if c != False] return rows # TODO keep with input type hidden class biztech_theme(http.Controller): # For multi product slider @http.route(['/kingfisher_pro/product_multi_get_options'], type='json', auth="public", website=True) def product_multi_get_slider_options(self): slider_options = [] option = request.env['multi.slider.config'].search( [('active', '=', True)], order="name asc") for record in option: slider_options.append({'id': record.id, 'name': record.name}) return slider_options @http.route(['/kingfisher_pro/product_multi_get_dynamic_slider'], type='http', auth='public', website=True) def product_multi_get_dynamic_slider(self, **post): if post.get('slider-type'): slider_header = request.env['multi.slider.config'].sudo().search( [('id', '=', int(post.get('slider-type')))]) values = { 'slider_details': slider_header, 'slider_header': slider_header } return request.website.render("kingfisher_pro.kingfisher_pro_multi_cat_slider_view", values) @http.route(['/kingfisher_pro/product_multi_image_effect_config'], type='json', auth='public', website=True) def product_multi_product_image_dynamic_slider(self, **post): slider_data = request.env['multi.slider.config'].search( [('id', '=', int(post.get('slider_type')))]) values = { 's_id': slider_data.no_of_collection + '-' + str(slider_data.id), 'counts': slider_data.no_of_collection, 'auto_rotate': slider_data.auto_rotate, 'auto_play_time': slider_data.sliding_speed, } return values @http.route(['/home/subscribe' ], type='http', auth="public", website=True) def subscribe(self, **post): email=post.pop('email') values={'sub_error':{},'subscribe':{'email':email}} if not email: values = {'sub_error':{'email':True},'subscribe':{'email':email}} return request.website.render("website.homepage",values) if email: if re.match("^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$", email) != None: pass else: values['sub_error'].update({'email': 'invalid'}) return request.website.render("website.homepage",values) cr, uid, context, pool = request.cr, request.uid, request.context, request.registry model_id=pool.get('ir.model').search(cr,uid,[('model','=','res.partner')]) mass_mail = pool.get('distribution.list').search(cr,uid,[('name','=','Subscribe')]) if not mass_mail: mass_mail=pool.get('distribution.list').create(cr,uid,{ 'name':'Subscribe', 'dst_model_id': model_id[0], 'bridge_field':'id', 'partner_path':'id', 'to_include_distribution_list_line_ids':[[0,False, {'name':'Subscribe', 'src_model_id':model_id[0], 'domain':"[['subscribe', '=', True]]"} ]]},context) email_id=email success_msg=False already_sub_msg=False if email_id: uid=SUPERUSER_ID partner=pool.get('res.partner').search(cr,uid,[('email','=',email_id),('subscribe','=',True)]) if not partner: pool.get('res.partner').create(cr,uid,{'name':email_id.split('@')[0],'email':email_id, 'customer':True,'subscribe':True},context) success_msg='You have been subscribed successfully.' else: already_sub_msg='You are already subscribed.' return request.website.render("website.homepage", {'successmsg':success_msg,'already_sub_msg':already_sub_msg}) @http.route(['/home/contact_info' ], type='http', auth="public", website=True) def contacts(self,**post): cr, uid, context, pool = request.cr, request.uid, request.context, request.registry uid=SUPERUSER_ID partner = pool.get('res.users').browse(cr, SUPERUSER_ID, request.uid, context).partner_id super_email=pool.get('res.users').browse(cr, SUPERUSER_ID, SUPERUSER_ID, context).email name=post.pop('full_name', '') email=post.pop('emp_email', '') subject=post.pop('email_subject', '') msg=post.pop('message', '') contact={'full_name':name,'emp_email':email,'email_subject':subject,'message':msg} values={'error':{},'contact':contact} if not name: values['error'].update({'full_name': True}) if not email: values['error'].update({'emp_email': True}) if email: if re.match("^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$", email) != None: pass else: values['error'].update({'emp_email': 'invalid'}) if values and values.has_key('error') and values['error']: return request.website.render("website.contactus", values) if super_email: body="
Hello,Admin
Name: "+name+"
Email Address: "+email+ "
Subject: "+subject+"
Message:"+msg+"
Thanks"
temp_id= pool.get('ir.model.data').get_object(cr, uid, 'kingfisher', 'contact_info_email')
pool.get('email.template').write(cr, uid, temp_id.id, {'email_to': super_email,'subject' : subject,'body_html':body or ''}, context=context)
pool.get('email.template').send_mail(cr, uid, temp_id.id,partner.id,True, context=context)
return request.website.render("website.contactus", {'successmsg':'Your message has been sent successfully.'})
return request.website.render("website.contactus", {'failmsg':'Your message has not been sent.'})
#return request.redirect("/page/contactus")
def get_pricelist(self):
return get_pricelist()
@http.route(['/shop/product/comment/