summaryrefslogtreecommitdiff
path: root/indoteknik_api/controllers/api_v1/banner.py
blob: 64a6167b5952820b14c50f2cca18138fdcda6cf6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
from .. import controller
from odoo import http
from odoo.http import request
from datetime import datetime


class Banner(controller.Controller):
    prefix = '/api/v1/'
    
    @http.route(prefix + 'banner', auth='public', methods=['GET', 'OPTIONS'])
    @controller.Controller.must_authorized()
    def get_banner(self, **kw):
        manufacture_id = kw.get('manufacture_id')
        type = kw.get('type')
        limit = int(kw.get('limit', 0))
        offset = int(kw.get('offset', 0))
        order = kw.get('order', 'write_date DESC')
        keyword = kw.get('keyword')

        query = [('x_status_banner', '=', 'tayang')]
        if type:
            query += [('x_banner_category.x_studio_field_KKVl4', '=', type)]
        
        if type == 'index-a-1':
            order = 'group_by_week ASC, sequence ASC'
        
        if manufacture_id:
            query += [('x_relasi_manufacture', '=', int(manufacture_id))]

        banner_kumpulan = []
        banner_ids = set()  # Set untuk menyimpan ID banner agar tidak duplikat

        if keyword:
            keyword_list = [word.strip() for word in keyword.split() if word.strip()]  # Pisahkan berdasarkan spasi

            for word in keyword_list:
                keyword_query = query + [('x_keyword_banner', 'ilike', word)]  # Buat query baru dengan keyword
                banners = request.env['x_banner.banner'].search(keyword_query, limit=limit, offset=offset, order=order)

                for banner in banners:
                    if banner.id not in banner_ids:  # Pastikan tidak ada duplikasi
                        banner_kumpulan.append(banner)
                        banner_ids.add(banner.id)

        if not keyword:
            banners = request.env['x_banner.banner'].search(query, limit=limit, offset=offset, order=order)
        else:
            banners = banner_kumpulan if len(banner_kumpulan) > 0 else request.env['x_banner.banner'].search(query, limit=limit, offset=offset, order=order)

        week_number = self.get_week_number_of_current_month()
        
        end_datas = []
        datas = []
        for banner in banners:
            data = {
                'name': banner.x_name,
                'url': banner.x_url_banner,
                'background_color': banner.background_color,
                'sequence': banner.sequence,
                'group_by_week': banner.group_by_week,
                'image': request.env['ir.attachment'].api_image('x_banner.banner', 'x_banner_image', banner.id),
                'headline_banner': banner.x_headline_banner,
                'description_banner': banner.x_description_banner,
                'keyword_banner': banner.x_keyword_banner
            }
            
            if banner.group_by_week and int(banner.group_by_week) < week_number and type == 'index-a-1':
                end_datas.append(data)
                continue

            datas.append(data)
        
        datas += end_datas
        return self.response(datas, headers=[('Cache-Control', 'max-age=3600, public')])
    
    def get_week_number_of_current_month(self):
        today = datetime.now().day
        week_number = (today - 1) // 7 + 1
        return min(week_number, 4)