summaryrefslogtreecommitdiff
path: root/indoteknik_custom/models/sj_tele.py
blob: 3ef4b87729595ba9f355927f3776ddf091ada5bf (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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
from odoo import models, fields, api
from odoo.exceptions import UserError
import requests
import json
import logging, subprocess
import time
from collections import OrderedDict

_logger = logging.getLogger(__name__)

class SjTele(models.Model):
    _name = 'sj.tele'
    _description = 'sj.tele'

    picking_id = fields.Many2one('stock.picking', string='Picking')
    sale_id = fields.Many2one('sale.order', string='Sales Order')
    picking_name = fields.Char(string='Picking Name')
    sale_name = fields.Char(string='Sale Name')
    create_date = fields.Datetime(string='Create Date')
    date_doc_kirim = fields.Datetime(string='Tanggal Kirim SJ')

    def woi(self):
        bot_mqdd = '8203414501:AAHy_XwiUAVrgRM2EJzW7sZx9npRLITZpb8'
        chat_id_mqdd = '-1003087280519'
        api_base = f'https://api.telegram.org/bot{bot_mqdd}'
        # bot_testing = '8306689189:AAHEFe5xwAkapoQ8xKoNZs-6gVfv3kO3kaU'
        # chat_id_testing = '-4920864331'
        # api_testing = f'https://api.telegram.org/bot{bot_testing}'

        data = self.search([], order='create_date asc')

        if not data:
            text = "✅ tidak ada data (semua sudah tercatat)."
            try:
                r = requests.post(api_base + "/sendMessage",
                                  json={'chat_id': chat_id_mqdd, 'text': text},
                                  timeout=20)
                r.raise_for_status()
            except Exception as e:
                _logger.exception("Gagal kirim Telegram (no data): %s", e)
            return True


        lines = []
        groups = OrderedDict()

        for rec in data:
            name = rec.picking_name or (rec.picking_id.name if rec.picking_id else '')
            pid  = rec.picking_id.id if rec.picking_id else ''
            so   = rec.sale_id.name or rec.sale_name or ''
            dttm = (rec.picking_id.date_doc_kirim if (rec.picking_id and rec.picking_id.date_doc_kirim)
                    else getattr(rec, 'date_doc_kirim', None))

            if dttm:
                date_header = dttm if isinstance(dttm, str) else fields.Datetime.to_string(dttm)
                date_header = date_header[:10]
            else:
                date_header = '(Tidak ada tanggal kirim SJ)'

            if name:
                groups.setdefault(date_header, []).append(f"- ({pid}) - {name} - {so}")

        for header_date, items in groups.items():
            lines.append(header_date)
            lines.extend(items)

        header = "Berikut merupakan nomor BU/OUT yang belum ada di Logbook SJ report:\n"
        BUB = 20  # jumlah baris per bubble
        total = (len(lines) + BUB - 1) // BUB  # total bubble

        for i in range(0, len(lines), BUB):
            body = "\n".join(lines[i:i + BUB])
            bagian = (i // BUB) + 1
            text = f"{header}Lampiran ke {bagian}/{total}\n{body}"
            try:
                r = requests.post(
                    api_base + "/sendMessage",
                    json={'chat_id': chat_id_mqdd, 'text': text},
                    timeout=20
                )
                r.raise_for_status()
            except Exception as e:
                _logger.exception("Gagal kirim Telegram (batch %s-%s): %s", i + 1, min(i + BUB, len(lines)), e)
            time.sleep(5)  # jeda kecil biar rapi & aman rate limit

        return True

        # header = "Berikut merupakan nomor BU/OUT yang belum ada di Logbook SJ report:\n"
        # text = header + "\n".join(lines)
        #
        # try:
        #     r = requests.post(api_base + "/sendMessage",
        #                       json={'chat_id': chat_id_mqdd, 'text': text})
        #     r.raise_for_status()
        # except Exception as e:
        #     _logger.exception("Gagal kirim Telegram: %s", e)
        # return True