main.py 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361
  1. # -*- coding: utf-8 -*-
  2. # Part of AppJetty. See LICENSE file for full copyright and licensing details.
  3. import re
  4. from openerp import http
  5. from openerp.http import request
  6. from openerp.addons.website.models.website import slug
  7. from openerp.addons.website_sale.controllers import main
  8. from openerp.addons.website_sale.controllers import main as main_shop
  9. from openerp.addons.website_sale.controllers.main import QueryURL
  10. from openerp.addons.website_sale.controllers.main import website_sale
  11. from openerp.addons.website_sale.controllers.main import table_compute
  12. class KingfisherProSliderSettings(http.Controller):
  13. @http.route(['/kingfisher_pro/pro_get_options'], type='json', auth="public", website=True)
  14. def get_slider_options(self):
  15. slider_options = []
  16. option = request.env['product.category.slider.config'].search(
  17. [('active', '=', True)], order="name asc")
  18. for record in option:
  19. slider_options.append({'id': record.id,
  20. 'name': record.name})
  21. return slider_options
  22. @http.route(['/kingfisher_pro/pro_get_dynamic_slider'], type='http', auth='public', website=True)
  23. def get_dynamic_slider(self, **post):
  24. if post.get('slider-type'):
  25. slider_header = request.env['product.category.slider.config'].sudo().search(
  26. [('id', '=', int(post.get('slider-type')))])
  27. values = {
  28. 'slider_header': slider_header
  29. }
  30. if slider_header.prod_cat_type == 'product':
  31. values.update(
  32. {'slider_details': slider_header.collections_product})
  33. if slider_header.prod_cat_type == 'category':
  34. values.update(
  35. {'slider_details': slider_header.collections_category})
  36. values.update({'slider_type': slider_header.prod_cat_type})
  37. return request.website.render("kingfisher_pro.kingfisher_pro_pro_cat_slider_view", values)
  38. @http.route(['/kingfisher_pro/pro_image_effect_config'], type='json', auth='public', website=True)
  39. def product_image_dynamic_slider(self, **post):
  40. slider_data = request.env['product.category.slider.config'].search(
  41. [('id', '=', int(post.get('slider_type')))])
  42. values = {
  43. 's_id': slider_data.prod_cat_type + str(slider_data.id),
  44. 'counts': slider_data.no_of_counts,
  45. 'auto_rotate': slider_data.auto_rotate,
  46. 'auto_play_time': slider_data.sliding_speed,
  47. }
  48. return values
  49. @http.route(['/kingfisher_pro/blog_get_options'], type='json', auth="public", website=True)
  50. def king_blog_get_slider_options(self):
  51. slider_options = []
  52. option = request.env['blog.slider.config'].search(
  53. [('active', '=', True)], order="name asc")
  54. for record in option:
  55. slider_options.append({'id': record.id,
  56. 'name': record.name})
  57. return slider_options
  58. @http.route(['/kingfisher_pro/blog_get_dynamic_slider'], type='http', auth='public', website=True)
  59. def king_blog_get_dynamic_slider(self, **post):
  60. if post.get('slider-type'):
  61. slider_header = request.env['blog.slider.config'].sudo().search(
  62. [('id', '=', int(post.get('slider-type')))])
  63. values = {
  64. 'slider_header': slider_header,
  65. 'blog_slider_details': slider_header.collections_blog_post,
  66. }
  67. return request.website.render("kingfisher_pro.kingfisher_pro_blog_slider_view", values)
  68. @http.route(['/kingfisher_pro/blog_image_effect_config'], type='json', auth='public', website=True)
  69. def king_blog_product_image_dynamic_slider(self, **post):
  70. slider_data = request.env['blog.slider.config'].search(
  71. [('id', '=', int(post.get('slider_type')))])
  72. values = {
  73. 's_id': slider_data.no_of_counts + '-' + str(slider_data.id),
  74. 'counts': slider_data.no_of_counts,
  75. 'auto_rotate': slider_data.auto_rotate,
  76. 'auto_play_time': slider_data.sliding_speed,
  77. }
  78. return values
  79. # Multi image gallery
  80. @http.route(['/kingfisher_pro/multi_image_effect_config'], type='json', auth="public", website=True)
  81. def get_multi_image_effect_config(self):
  82. cur_website = request.website
  83. values = {
  84. 'no_extra_options': cur_website.no_extra_options,
  85. 'theme_panel_position': cur_website.thumbnail_panel_position,
  86. 'interval_play': cur_website.interval_play,
  87. 'enable_disable_text': cur_website.enable_disable_text,
  88. 'color_opt_thumbnail': cur_website.color_opt_thumbnail,
  89. 'change_thumbnail_size': cur_website.change_thumbnail_size,
  90. 'thumb_height': cur_website.thumb_height,
  91. 'thumb_width': cur_website.thumb_width,
  92. }
  93. return values
  94. # For multi product slider
  95. @http.route(['/kingfisher_pro/product_multi_get_options'], type='json', auth="public", website=True)
  96. def product_multi_get_slider_options(self):
  97. slider_options = []
  98. option = request.env['multi.slider.config'].search(
  99. [('active', '=', True)], order="name asc")
  100. for record in option:
  101. slider_options.append({'id': record.id,
  102. 'name': record.name})
  103. return slider_options
  104. @http.route(['/kingfisher_pro/product_multi_get_dynamic_slider'], type='http', auth='public', website=True)
  105. def product_multi_get_dynamic_slider(self, **post):
  106. if post.get('slider-type'):
  107. slider_header = request.env['multi.slider.config'].sudo().search(
  108. [('id', '=', int(post.get('slider-type')))])
  109. values = {
  110. 'slider_details': slider_header,
  111. 'slider_header': slider_header
  112. }
  113. return request.website.render("kingfisher_pro.kingfisher_pro_multi_cat_slider_view", values)
  114. @http.route(['/kingfisher_pro/product_multi_image_effect_config'], type='json', auth='public', website=True)
  115. def product_multi_product_image_dynamic_slider(self, **post):
  116. slider_data = request.env['multi.slider.config'].search(
  117. [('id', '=', int(post.get('slider_type')))])
  118. values = {
  119. 's_id': slider_data.no_of_collection + '-' + str(slider_data.id),
  120. 'counts': slider_data.no_of_collection,
  121. 'auto_rotate': slider_data.auto_rotate,
  122. 'auto_play_time': slider_data.sliding_speed,
  123. }
  124. return values
  125. class KingfisherProBrandSlider(website_sale):
  126. @http.route(['/shop/pager_selection/<model("product.per.page.no"):pl_id>'], type='http', auth="public", website=True)
  127. def product_page_change(self, pl_id, **post):
  128. request.session['default_paging_no'] = pl_id.name
  129. main.PPG = pl_id.name
  130. return request.redirect('/shop' or request.httprequest.referrer)
  131. @http.route(['/shop',
  132. '/shop/page/<int:page>',
  133. '/shop/category/<model("product.public.category"):category>',
  134. '/shop/category/<model("product.public.category"):category>/page/<int:page>',
  135. '/shop/brands'],
  136. type='http',
  137. auth='public',
  138. website=True)
  139. def shop(self, page=0, category=None, brand=None, search='', ppg=False, **post):
  140. cr, uid, context, pool = request.cr, request.uid, request.context, request.registry
  141. if brand:
  142. request.context.setdefault('brand_id', int(brand))
  143. result = super(KingfisherProBrandSlider, self).shop(
  144. page=page, category=category, brand=brand, search=search, **post)
  145. sort_order = ""
  146. cat_id = []
  147. page_obj = pool.get('product.per.page.no')
  148. page_id = page_obj.search(
  149. cr, uid, [('set_default_check', '=', True)], context=context)
  150. page_no = page_obj.browse(cr, uid, page_id, context=context)
  151. if page_no:
  152. ppg = page_no.name
  153. else:
  154. ppg = main_shop.PPG
  155. product = []
  156. newproduct = []
  157. # product template object
  158. product_obj = pool.get('product.template')
  159. attrib_list = request.httprequest.args.getlist('attrib')
  160. attrib_values = [map(int, v.split("-")) for v in attrib_list if v]
  161. attributes_ids = set([v[0] for v in attrib_values])
  162. attrib_set = set([v[1] for v in attrib_values])
  163. domain = request.website.sale_product_domain()
  164. domain += self._get_search_domain(search, category, attrib_values)
  165. url = "/shop"
  166. keep = QueryURL('/shop', category=category and int(category), search=search,
  167. attrib=attrib_list, order=post.get('order'))
  168. if post:
  169. request.session.update(post)
  170. if search:
  171. post["search"] = search
  172. if attrib_list:
  173. post['attrib'] = attrib_list
  174. prevurl = request.httprequest.referrer
  175. if prevurl:
  176. if not re.search('/shop', prevurl, re.IGNORECASE):
  177. request.session['tag'] = ""
  178. request.session['sort_id'] = ""
  179. request.session['sortid'] = ""
  180. request.session['pricerange'] = ""
  181. request.session['min1'] = ""
  182. request.session['max1'] = ""
  183. session = request.session
  184. # for category filter
  185. if category:
  186. category = pool['product.public.category'].browse(
  187. cr, uid, int(category), context=context)
  188. url = "/shop/category/%s" % slug(category)
  189. if category != None:
  190. for ids in category:
  191. cat_id.append(ids.id)
  192. domain += ['|', ('public_categ_ids.id', 'in', cat_id),
  193. ('public_categ_ids.parent_id', 'in', cat_id)]
  194. # for tag filter
  195. if session.get('tag'):
  196. session_tag = session.get('tag')
  197. tag = session_tag[0]
  198. tags_obj = pool['biztech.product.tags']
  199. tags_ids = tags_obj.search(cr, uid, [], context=context)
  200. tags = tags_obj.browse(cr, uid, tags_ids, context=context)
  201. if tag:
  202. tag = pool['biztech.product.tags'].browse(
  203. cr, uid, int(tag), context=context)
  204. domain += [('biztech_tag_ids', '=', int(tag))]
  205. request.session["tag"] = [tag.id, tag.name]
  206. # For Product Sorting
  207. if session.get('sort_id'):
  208. session_sort = session.get('sort_id')
  209. sort = session_sort
  210. sorts_obj = pool['biztech.product.sortby']
  211. sorts_ids = sorts_obj.search(cr, uid, [], context=context)
  212. sorts = sorts_obj.browse(cr, uid, sorts_ids, context=context)
  213. sort_field = pool['biztech.product.sortby'].browse(
  214. cr, uid, int(sort), context=context)
  215. request.session['product_sort_name'] = sort_field.name
  216. order_field = sort_field.sort_on.name
  217. order_type = sort_field.sort_type
  218. sort_order = '%s %s' % (order_field, order_type)
  219. if post.get("sort_id"):
  220. request.session["sortid"] = [
  221. sort, sort_order, sort_field.name, order_type]
  222. # For Price slider
  223. product_slider_ids = product_obj.search(cr, uid, [], context=context)
  224. products_slider = product_obj.browse(
  225. cr, uid, product_slider_ids, context=context)
  226. product_withprice = products_slider._product_template_price(
  227. products_slider, domain)
  228. if product_withprice:
  229. if post.get("range1") or post.get("range2") or not post.get("range1") or not post.get("range2"):
  230. range1 = min(product_withprice.values())
  231. range2 = max(product_withprice.values())
  232. result.qcontext['range1'] = range1
  233. result.qcontext['range2'] = range2
  234. if session.get("min1") and session["min1"]:
  235. post["min1"] = session["min1"]
  236. if session.get("max1") and session["max1"]:
  237. post["max1"] = session["max1"]
  238. if range1:
  239. post["range1"] = range1
  240. if range1:
  241. post["range2"] = range1
  242. if request.session.get('min1') or request.session.get('max1'):
  243. if request.session.get('min1'):
  244. if request.session['min1'] != None:
  245. for prod_id in product_withprice:
  246. if product_withprice.get(prod_id) >= float(request.session['min1']) and product_withprice.get(prod_id) <= float(request.session['max1']):
  247. product.append(prod_id)
  248. request.session["pricerange"] = str(
  249. request.session['min1'])+"-To-"+str(request.session['max1'])
  250. newproduct = product
  251. domain += [('id', 'in', newproduct)]
  252. if session.get('min1') and session['min1']:
  253. result.qcontext['min1'] = session["min1"]
  254. result.qcontext['max1'] = session["max1"]
  255. if request.session.get('default_paging_no'):
  256. ppg = int(request.session.get('default_paging_no'))
  257. product_count = product_obj.search_count(
  258. cr, uid, domain, context=context)
  259. pager = request.website.pager(
  260. url=url, total=product_count, page=page, step=ppg, scope=7, url_args=post)
  261. product_ids = product_obj.search(
  262. cr, uid, domain, limit=ppg, offset=pager['offset'], order=sort_order, context=context)
  263. products = product_obj.browse(cr, uid, product_ids, context=context)
  264. result.qcontext.update({'product_count': product_count})
  265. result.qcontext.update({'products': products})
  266. result.qcontext.update({'category': category})
  267. result.qcontext.update({'pager': pager})
  268. result.qcontext.update({'keep': keep})
  269. result.qcontext.update({'search': search})
  270. result.qcontext.update(
  271. {'bins': table_compute().process(products, ppg)})
  272. result.qcontext['brand'] = brand
  273. result.qcontext['brand_obj'] = request.env[
  274. 'product.brands'].search([('id', '=', brand)])
  275. return result
  276. @http.route()
  277. def cart_update_json(self, product_id, line_id=None, add_qty=None, set_qty=None, display=True):
  278. result = super(KingfisherProBrandSlider, self).cart_update_json(
  279. product_id=product_id, line_id=line_id, add_qty=add_qty, set_qty=set_qty, display=display)
  280. result.update({'kingfisher_pro.hover_total': request.website._render("kingfisher_pro.hover_total", {
  281. 'website_sale_order': request.website.sale_get_order()
  282. })
  283. })
  284. return result
  285. @http.route(['/king_pro/get_brand_slider'], type='http', auth='public', website=True)
  286. def get_brand_slider(self, **post):
  287. keep = QueryURL('/king_pro/get_brand_slider', brand_id=[])
  288. value = {
  289. 'website_brands': False,
  290. 'brand_header': False,
  291. 'keep': keep
  292. }
  293. if post.get('product_count'):
  294. brand_data = request.env['product.brands'].search(
  295. [], limit=int(post.get('product_count')))
  296. if brand_data:
  297. value['website_brands'] = brand_data
  298. if post.get('product_label'):
  299. value['brand_header'] = post.get('product_label')
  300. return request.website.render("kingfisher_pro.kingfisher_pro_brand_slider_view", value)
  301. @http.route(['/kingfisher_pro/removeattribute'], type='json', auth='public', website=True)
  302. def remove_selected_attribute(self, **post):
  303. if post.get("attr_remove"):
  304. remove = post.get("attr_remove")
  305. if remove == "pricerange":
  306. del request.session['min1']
  307. del request.session['max1']
  308. request.session[remove] = ''
  309. return True
  310. elif remove == "sortid":
  311. request.session[remove] = ''
  312. request.session["sort_id"] = ''
  313. return True
  314. elif remove == "tag":
  315. request.session[remove] = ''
  316. return True