from odoo import models, fields, api from odoo.exceptions import UserError import requests import json import logging, subprocess import time _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') # @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 ERROR, anggap gagal # if "ERROR" 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 = '-4885333032' 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 = [] 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 '' if name: lines.append(f"{name} - {so} ({pid})") 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