summaryrefslogtreecommitdiff
path: root/indoteknik_custom/models/sj_tele.py
blob: d44aa338b84ff5c13b85dc954dee5ddd37ac87c6 (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
98
99
100
101
102
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')

    # @api.model
    # def run_pentaho_carte(self):
    #     carte = "http://127.0.0.1:8080"
    #     job_kjb = r"C:/Users/Indoteknik/Desktop/tes.kjb"
    #     params = {"job": job_kjb, "level": "Basic", "block": "Y"}
    #     try:
    #         r = requests.get(
    #             f"{carte}/kettle/executeJob/",
    #             params=params,
    #             auth=("cluster", "cluster"),
    #             timeout=900,
    #         )
    #         r.raise_for_status()
    #         # kalau Carte mengembalikan <result>ERROR</result>, anggap gagal
    #         if "<result>ERROR</result>" in r.text:
    #             raise UserError(f"Carte error: {r.text}")
    #     except Exception as e:
    #         _logger.exception("Carte call failed: %s", e)
    #         raise UserError(f"Gagal memanggil Carte: {e}")
        
    #     time.sleep(3)

    #     self.env['sj.tele'].sudo().woi()

    #     return True

    def woi(self):
        bot_mqdd = '8203414501:AAHy_XwiUAVrgRM2EJzW7sZx9npRLITZpb8'
        chat_id_mqdd = '-1003087280519'
        api_base = f'https://api.telegram.org/bot{bot_mqdd}'

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

        if not data:
            text = "Berikut merupakan nomor BU/OUT yang belum ada di Logbook SJ report:\n✅ 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))

            # format header tanggal (string), tanpa konversi Waktu/WIB
            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}")

        # build output berurutan per tanggal
        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"
        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