hey everyone,
Can you help me, here I tried to create a schedule button for posting salary, but here I encountered many errors. The most dominant error is in the model_id and looping for the transaction does not run so as skipped it immediately displays the successful posting process. Can you guys correct any of my program code that I need to fix. Thank
class BSDPosting(models.Model):
_name = 'bsd.posting'
_description = 'BSD Posting'
nama = fields.Char(string='Nama Transaksi', required=True)
date_from = fields.Date(string='Date From', required=True)
date_to = fields.Date(string='Date To', required=True)
posting_date = fields.Datetime(required=True, string='Waktu Mulai')
def action_schedule_posting(self):
posting_date = self.posting_date
code_model = "env['bsd.posting'].action_posting_gaji()"
self.env['ir.cron'].sudo().create({
'name': 'Posting Take Home Pay',
'model_id': self.env.ref('bsd_payroll.model_bsd_posting').id,
'state': 'code',
'code': code_model,
'nextcall': posting_date,
'interval_type': 'days',
'numbercall': 1,
'active': True,})
def action_posting_gaji(self):
client_secret = "CLIENT SECRET"
api = "URL API"
path = ["api/auth",
"api/tabungan/info",
"api/trans/setoran/coa",
"api/trans/penarikan/coa",
"api/trans/setoran/tab"]
endpoint = f'{api}{path[0]}'
endpoint_setoran_coa = f'{api}{path[2]}'
date_from_str = fields.Date.to_string(fields.Date.today().replace(day=1))
date_to_str = fields.Date.to_string((datetime.now().date() + relativedelta(months=1, day=1, days=-1)))
date_from = datetime.strptime(date_from_str, '%Y-%m-%d').date()
date_to = datetime.strptime(date_to_str, '%Y-%m-%d').date()
date_from_formatted = date_from.strftime('%Y-%m-%d')
date_to_formatted = date_to.strftime('%Y-%m-%d')
domain = [('struct_id', '=', 5),
('date_from', '>=',date_from_formatted),
('date_to',' def get_net_wage_by_employee(get_net_wage_by_periode):
net_wage_by_employee = {}
for payslip in get_net_wage_by_periode:
norek = payslip.get('x_norek')
net_wage = payslip.get('net_wage')
if norek and net_wage:
net_wage_str =str(net_wage).rstrip('0').rstrip('.') net_wage_by_employee[norek] = net_wage_str net_wage_int = int(net_wage_str)
net_wage_by_employee[norek] = net_wage_int
return net_wage_by_employee
auth = {"username": "oddo_test", "password": "oddotest3jW6R%Zm"}
json_data = json.dumps(auth)
payload = f"{auth['username']}:{auth['password']}".encode()
signature = hmac.new(client_secret.encode(), payload,hashlib.sha256).hexdigest()
headers = {"x-signature": signature,
"Content-Type": "application/json"}
response = requests.post(endpoint, data=json_data, headers=headers)
print(response.status_code)
print(response.text)
response_json = json.loads(response.text)
bearer_token = response_json.get('token')
print("=============================================================")
net_wage_by_employee = get_net_wage_by_employee(get_net_wage_by_periode)
delay_seconds = 5
excel_file_path = "report_take_home_pay.xlsx"
workbook = xlsxwriter.Workbook(excel_file_path)
worksheet = workbook.add_worksheet()
header = ["Code", "Message","TransID", "Amount", "Norek", "RekeningName", "SumberNorek"]
for col, title in enumerate(header):
worksheet.write(0, col, title)
row_counter = 0
try:
for norek, net_wage in net_wage_by_employee.items():
request_coa = { "no_tabungan": norek, "rek_sumber":"X.XXX.XX",
"amount":net_wage}
json_data_ = json.dumps(request_coa)
message = f"{request_coa['no_tabungan']}:{request_coa['rek_sumber']}:{request_coa['amount']}".encode() signature_ = hmac.new(client_secret.encode(), message, hashlib.sha256).hexdigest()
headers_nasabah = {"x-signature": signature_,
"Content-Type": "application/json",
"Authorization": "Bearer " + bearer_token}
response_2 = requests.post(endpoint_setoran_coa, data=json_data_,
headers=headers_nasabah, timeout=30)
time.sleep(delay_seconds)
print(response_2.status_code)
print(response_2.text)
response_json = json.loads(response_2.text)
row_counter += 1
worksheet.write(row_counter, 0, response_json["code"]
worksheet.write(row_counter, 1, response_json["message"])
worksheet.write(row_counter, 2, response_json["transid"]
worksheet.write(row_counter, 3, response_json["amount"])
worksheet.write(row_counter, 4, response_json["rekening"]["norek"])
worksheet.write(row_counter, 5, response_json["rekening"]["name"])
worksheet.write(row_counter, 6, response_json["sumber"]["norek"])
print("Posting Take Home Pay success!!")
print("=============================================================")
workbook.close()
print("Data telah disimpan ke dalam file Excel:", excel_file_path)
os.startfile(excel_file_path)
except requests.exceptions.ConnectTimeout as e:
print("Koneksi time out:", e)