# -*- coding: utf-8 -*- # Part of Biztech Consultancy. See LICENSE file for full copyright and licensing details. import math import werkzeug from openerp import api, fields, models, _ from openerp.http import request from openerp.addons.website_sale.controllers import main class WebsiteMenu(models.Model): _inherit = "website.menu" is_megamenu = fields.Boolean(string='Es Megamenú...?') megamenu_type = fields.Selection([('2_col', '2 Columnas'), ('3_col', '3 Columnas'), ('4_col', '4 Columnas')], default='3_col', string="Tipo de Mega Menu") megamenu_bg = fields.Boolean(string='Colocar Fondo al Megamenu', default=False) megamenu_bg_img_color = fields.Selection([('bg_img', 'Imágen de Fondo'), ('bg_color', 'Color de Fondo')], default='bg_img', string="Seleccionar Fondo para el Mega Menu") megamenu_bg_image = fields.Binary(string="Imágen de Fondo para el Mega Menú") megamenu_bg_color = fields.Char(string="Color de Fondo para el Mega Menú", default='#ccc', help="Background color for megamenu, for setting background color you have to pass hexacode here.") category_slider = fields.Boolean(string='Mostrar Slider de Categorias en el Menú', default=False) carousel_header_name = fields.Char(string="Título el Slider", default="Lanzamientos", translate=True, help="Nombre que se Mostrara en el Encabezado del Slider de Categorias") category_slider_position = fields.Selection([('left', 'Izquierda'), ('right', 'Derecha')], default='left', string="Posición del Slider") menu_icon = fields.Boolean(string='Mostrar Icono en el Menu', default=False) menu_icon_image = fields.Binary(string="Icono del Menu ", help="Icono para tu menu") display_menu_footer = fields.Boolean(string="Mostrar pie de página para tu menu", default=False, help="Para Mostrar pie de página en el megamenu") menu_footer = fields.Html(string="Contenido del Pie de Página", help="Nombre del Píe de Página para el meganenu") customize_menu_colors = fields.Boolean(string='Personalizar Colores del Menu', default=False) main_category_color = fields.Char(string='Color Principal de la Categoria', help="Colocar color para la categoria principal del menu") sub_category_color = fields.Char(string='Color para la Sub Categoria', help="Colocar color para la subcategoria") class website(models.Model): _inherit = 'website' # For Multi image thumbnail_panel_position = fields.Selection([ ('left', 'Izquierda'), ('right', 'Derecha'), ('bottom', 'Fondo'), ], default='left', string='Posición del Panel de Miniaturas', help="Seleccione la posición en la que desea mostrar el panel de miniaturas de multi-imagenes.") interval_play = fields.Char(string='Intervalo de Imágenes del Slide', default='5000', help='Con este campo se puede establecer el tiempo o intervalo entre dos imágenes.') enable_disable_text = fields.Boolean(string='Activar el panel de texto', default=True, help='Activar/Desactivar el texto que aparece en la imagen en imagen de varias.') color_opt_thumbnail = fields.Selection([ ('default', 'Predeterminado'), ('b_n_w', 'Blanco y Negro'), ('sepia', 'Sepia'), ('blur', 'Desenfoque'), ], default='default', string="Efecto sobre las miniaturas") no_extra_options = fields.Boolean(string='Efectos sobre Sliders', default=True, help="Slider con todas las opciones para la siguiente, anterior, reproducción, pausa, pantalla completa, ocultar / mostrar el panel de miniaturas.") change_thumbnail_size = fields.Boolean(string="Cambiar Tamaño de Miniaturas", default=False) thumb_height = fields.Char(string='Altura de Imágen', default=50) thumb_width = fields.Char(string='Ancho de Imágen', default=88) # For Sort By enable_sort_by = fields.Boolean(string='Habilitar opción de clasificación de productos', help='Para habilitar la característica de ordenación del producto en el sitio web.', default=True) # For first last pager enable_first_last_pager = fields.Boolean(string="Habilitar primera y ultima paginación", default=True, help="Activar esta casilla para mostrar el boton 'Primera' y el botón 'Última' en el paginador en el sitio web.") # Product per grid product_display_grid = fields.Selection([('2', '2'), ('3', '3'), ('4', '4')], default='3', string='Producto por cuadrícula', help="Mostrar Nro. de productos por línea en el sitio web de la red de productos.") # For first last pager def get_pager_selection(self): prod_per_page = self.env['product.per.page'].search([]) prod_per_page_no = self.env['product.per.page.no'].search([]) values = { 'name': prod_per_page.name, 'page_no': prod_per_page_no, } return values def get_current_pager_selection(self): if request.session.get('default_paging_no'): return int(request.session.get('default_paging_no')) else: return main.PPG def pager(self, cr, uid, ids, url, total, page=1, step=30, scope=5, url_args=None, context=None): res = super(website, self). pager(cr, uid, ids, url=url, total=total, page=page, step=step, scope=scope, url_args=url_args, context=context) # Compute Pager page_count = int(math.ceil(float(total) / step)) page = max(1, min(int(page if str(page).isdigit() else 1), page_count)) scope -= 1 pmin = max(page - int(math.floor(scope/2)), 1) pmax = min(pmin + scope, page_count) if pmax - pmin < scope: pmin = pmax - scope if pmax - scope > 0 else 1 def get_url(page): _url = "%s/page/%s" % (url, page) if page > 1 else url if url_args and not url_args.get('tag') and not url_args.get('range1') and not url_args.get('range2') and not url_args.get('max1') and not url_args.get('min1') and not url_args.get('sort_id'): _url = "%s?%s" % (_url, werkzeug.url_encode(url_args)) return _url res.update({ # Overrite existing "page_start": { 'url': get_url(pmin), 'num': pmin }, "page_previous": { 'url': get_url(max(pmin, page - 1)), 'num': max(pmin, page - 1) }, "page_next": { 'url': get_url(min(pmax, page + 1)), 'num': min(pmax, page + 1) }, "page_end": { 'url': get_url(pmax), 'num': pmax }, 'page_first': { 'url': get_url(1), 'num': 1 }, 'page_last': { 'url': get_url(int(res['page_count'])), 'num': int(res['page_count']) }, 'pages': [ {'url': get_url(page), 'num': page} for page in xrange(pmin, pmax+1) ] }) return res # For multi image @api.multi def get_multiple_images(self, product_id=None): product_img_data = False if product_id: self.env.cr.execute( "select id from biztech_product_images where product_tmpl_id=%s and more_view_exclude IS NOT TRUE order by sequence", ([product_id])) product_ids = map(lambda x: x[0], self.env.cr.fetchall()) if product_ids: product_img_data = self.env['biztech.product.images'].browse( product_ids) return product_img_data # For brands def sale_product_domain(self, cr, uid, ids, context=None): domain = super(website, self).sale_product_domain(cr, uid, ids=ids, context=context) if 'brand_id' in request.context: domain.append( ('product_brand_id', '=', request.context['brand_id'])) return domain # For product tags feature def get_product_tags(self): product_tags = self.env['biztech.product.tags'].search([]) return product_tags # For Sorting products def get_sort_by_data(self): request.session['product_sort_name'] = '' sort_by = self.env['biztech.product.sortby'].search([]) return sort_by # For setting current sort list def set_current_sorting_data(self): sort_name = request.session.get('product_sort_name') return sort_name # For megamenu @api.multi def get_public_product_category(self, submenu): categories = self.env['product.public.category'].search([('parent_id', '=', False), ('include_in_megamenu', '!=', False), ('menu_id', '=', submenu.id)], order="sequence") return categories def get_public_product_child_category(self, children): child_categories = [] for child in children: categories = self.env['product.public.category'].search([ ('id', '=', child.id), ('include_in_megamenu', '!=', False)], order="sequence") if categories: child_categories.append(categories) return child_categories class WebsiteConfigSettings(models.TransientModel): _inherit = 'website.config.settings' # For multi image thumbnail_panel_position = fields.Selection([ ('left', 'Izquierda'), ('right', 'Derecha'), ('bottom', 'Fondo')], string='Posición del Panel de Miniaturas', related='website_id.thumbnail_panel_position', help="Select the position where you want to display the thumbnail panel in multi image.") interval_play = fields.Char(string='Intervalo de Desplazamiento del Slide', related='website_id.interval_play', help='Con este campo se puede establecer el tiempo de intervalo entre dos imágenes.') enable_disable_text = fields.Boolean(string='Activar Panel de Texto', related='website_id.enable_disable_text', help='Activar/Desactivar el texto que aparecera en el sitio web en multi-imagenes.') color_opt_thumbnail = fields.Selection([ ('default', 'Default'), ('b_n_w', 'Blanco y Negro'), ('sepia', 'Sepia'), ('blur', 'Desenfoque')], related='website_id.color_opt_thumbnail', string="Efectos sobre las Miniaturas") no_extra_options = fields.Boolean(string='Efectos del Slider', # default=True, related='website_id.no_extra_options', help="Slider con las opciones para siguiente, anterior, reproducción, pausa, pantalla completa, ocultar/mostrar el panel de miniaturas.") change_thumbnail_size = fields.Boolean(string="Cambiar Tamaño de las Miniaturas", related="website_id.change_thumbnail_size" ) thumb_height = fields.Char(string='Altura de Miniatura', related="website_id.thumb_height" ) thumb_width = fields.Char(string='Ancho de Miniatura', related="website_id.thumb_width" ) # For Sort By enable_sort_by = fields.Boolean(related="website_id.enable_sort_by", string='Habilitar opción de clasificación de productos', help='For enabling product sorting feature in website.', default=True) # For first last pager enable_first_last_pager = fields.Boolean(related='website_id.enable_first_last_pager', string="Habilitar boton Primera y boton Ultima Página", default=True, help="Activar este checkbox para el boton 'Primero' y boton'Ultimo' en el sitio web.") # Product per grid product_display_grid = fields.Selection(related='website_id.product_display_grid', default='3', string='Producto por cuadrícula', help="Muestra el Nro. de productos por línea en el sitio web de la red de productos.")