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
|