add pdf numbering finaal
This commit is contained in:
parent
b7d51908d6
commit
6dec5a0470
|
|
@ -194,11 +194,16 @@ export function CetakInstanModal() {
|
||||||
setProgress({ current: i + 1, total: targets.length, name: b.nama_anak, mama: b.nama_orang_tua })
|
setProgress({ current: i + 1, total: targets.length, name: b.nama_anak, mama: b.nama_orang_tua })
|
||||||
|
|
||||||
// --- Save to cetak_balita ---
|
// --- Save to cetak_balita ---
|
||||||
await supabase.from('cetak_balita').insert({
|
const { error: dbError } = await supabase.from('cetak_balita').insert({
|
||||||
id_berkas: currentIdBerkas,
|
id_berkas: currentIdBerkas,
|
||||||
nama_balita: b.nama_anak,
|
nama_balita: b.nama_anak,
|
||||||
|
tanggal_cetak: new Date().toISOString(),
|
||||||
})
|
})
|
||||||
|
|
||||||
|
if (dbError) {
|
||||||
|
throw new Error(dbError.message)
|
||||||
|
}
|
||||||
|
|
||||||
// --- Update template and wait for render ---
|
// --- Update template and wait for render ---
|
||||||
setActivePrintData({ pengguna: b, row: rowForMonth, allHasil: balitaHasil, idBerkas: currentIdBerkas })
|
setActivePrintData({ pengguna: b, row: rowForMonth, allHasil: balitaHasil, idBerkas: currentIdBerkas })
|
||||||
// Give React and Recharts some time to finish rendering the hidden template
|
// Give React and Recharts some time to finish rendering the hidden template
|
||||||
|
|
|
||||||
|
|
@ -95,11 +95,16 @@ export function CetakPDFButton({ row, allData, pengguna }: Props) {
|
||||||
const currentIdBerkas = Date.now()
|
const currentIdBerkas = Date.now()
|
||||||
setIdBerkas(currentIdBerkas)
|
setIdBerkas(currentIdBerkas)
|
||||||
|
|
||||||
await supabase.from('cetak_balita').insert({
|
const { error: dbError } = await supabase.from('cetak_balita').insert({
|
||||||
id_berkas: currentIdBerkas,
|
id_berkas: currentIdBerkas,
|
||||||
nama_balita: pengguna.nama_anak,
|
nama_balita: pengguna.nama_anak,
|
||||||
|
tanggal_cetak: new Date().toISOString(),
|
||||||
})
|
})
|
||||||
|
|
||||||
|
if (dbError) {
|
||||||
|
throw new Error(dbError.message)
|
||||||
|
}
|
||||||
|
|
||||||
// Tunggu render React selesai (untuk menampilkan ID Berkas)
|
// Tunggu render React selesai (untuk menampilkan ID Berkas)
|
||||||
await new Promise(r => setTimeout(r, 500))
|
await new Promise(r => setTimeout(r, 500))
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -94,11 +94,16 @@ export function ExportPDFButton({ row, allData, pengguna }: Props) {
|
||||||
setIdBerkas(currentIdBerkas)
|
setIdBerkas(currentIdBerkas)
|
||||||
|
|
||||||
const { supabase } = await import('@/lib/supabase')
|
const { supabase } = await import('@/lib/supabase')
|
||||||
await supabase.from('cetak_balita').insert({
|
const { error: dbError } = await supabase.from('cetak_balita').insert({
|
||||||
id_berkas: currentIdBerkas,
|
id_berkas: currentIdBerkas,
|
||||||
nama_balita: pengguna.nama_anak,
|
nama_balita: pengguna.nama_anak,
|
||||||
|
tanggal_cetak: new Date().toISOString(),
|
||||||
})
|
})
|
||||||
|
|
||||||
|
if (dbError) {
|
||||||
|
throw new Error(dbError.message)
|
||||||
|
}
|
||||||
|
|
||||||
// Tunggu render React selesai (untuk menampilkan ID Berkas)
|
// Tunggu render React selesai (untuk menampilkan ID Berkas)
|
||||||
await new Promise(r => setTimeout(r, 500))
|
await new Promise(r => setTimeout(r, 500))
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,4 @@
|
||||||
|
-- Menurunkan/menonaktifkan kebijakan Row-Level Security (RLS) pada tabel cetak_balita
|
||||||
|
-- Agar sama seperti tabel lainnya di proyek ini (Unrestricted) dan memperbolehkan input data dari aplikasi.
|
||||||
|
|
||||||
|
ALTER TABLE public.cetak_balita DISABLE ROW LEVEL SECURITY;
|
||||||
|
|
@ -1,45 +0,0 @@
|
||||||
import { createClient } from '@supabase/supabase-js'
|
|
||||||
import * as fs from 'fs'
|
|
||||||
import * as path from 'path'
|
|
||||||
|
|
||||||
const envPath = path.join(process.cwd(), '.env.local')
|
|
||||||
const envContent = fs.readFileSync(envPath, 'utf-8')
|
|
||||||
const envVars: Record<string, string> = {}
|
|
||||||
envContent.split('\n').forEach(line => {
|
|
||||||
const parts = line.split('=')
|
|
||||||
if (parts.length >= 2) {
|
|
||||||
envVars[parts[0].trim()] = parts.slice(1).join('=').trim()
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
const supabaseUrl = envVars.NEXT_PUBLIC_SUPABASE_URL
|
|
||||||
const supabaseAnonKey = envVars.NEXT_PUBLIC_SUPABASE_ANON_KEY
|
|
||||||
const supabase = createClient(supabaseUrl, supabaseAnonKey)
|
|
||||||
|
|
||||||
async function listTables() {
|
|
||||||
console.log('Listing tables from Supabase...')
|
|
||||||
// We can query schema tables via rpc or a query, or select from some common tables
|
|
||||||
// To list tables via PostgREST, we can try to query a non-existent table and see the hint or query pg_class
|
|
||||||
// Actually, let's query the supabase API or look at common tables
|
|
||||||
const tables = [
|
|
||||||
'akun_balita',
|
|
||||||
'hasil_stunting_balita',
|
|
||||||
'cetak_balita',
|
|
||||||
'detail_posyandu',
|
|
||||||
'petugas_posyandu',
|
|
||||||
'petugas_posyandu_lokal',
|
|
||||||
'jadwal_posyandu',
|
|
||||||
'posyandu_reviews',
|
|
||||||
'ulasan_posyandu'
|
|
||||||
]
|
|
||||||
for (const table of tables) {
|
|
||||||
const { error } = await supabase.from(table).select('*').limit(1)
|
|
||||||
if (error) {
|
|
||||||
console.log(`Table "${table}": ERROR (${error.message})`)
|
|
||||||
} else {
|
|
||||||
console.log(`Table "${table}": EXISTS`)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
listTables()
|
|
||||||
|
|
@ -1,50 +0,0 @@
|
||||||
import { createClient } from '@supabase/supabase-js'
|
|
||||||
import * as fs from 'fs'
|
|
||||||
import * as path from 'path'
|
|
||||||
|
|
||||||
const envPath = path.join(process.cwd(), '.env.local')
|
|
||||||
const envContent = fs.readFileSync(envPath, 'utf-8')
|
|
||||||
const envVars: Record<string, string> = {}
|
|
||||||
envContent.split('\n').forEach(line => {
|
|
||||||
const parts = line.split('=')
|
|
||||||
if (parts.length >= 2) {
|
|
||||||
envVars[parts[0].trim()] = parts.slice(1).join('=').trim()
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
const supabaseUrl = envVars.NEXT_PUBLIC_SUPABASE_URL
|
|
||||||
const supabaseAnonKey = envVars.NEXT_PUBLIC_SUPABASE_ANON_KEY
|
|
||||||
|
|
||||||
const supabase = createClient(supabaseUrl, supabaseAnonKey)
|
|
||||||
|
|
||||||
async function testInsert() {
|
|
||||||
console.log('Inserting into cetak_balita...')
|
|
||||||
const idBerkas = Date.now()
|
|
||||||
const { data: insertData, error: insertError } = await supabase
|
|
||||||
.from('cetak_balita')
|
|
||||||
.insert({
|
|
||||||
id_berkas: idBerkas,
|
|
||||||
nama_balita: 'Test Balita'
|
|
||||||
})
|
|
||||||
.select()
|
|
||||||
|
|
||||||
if (insertError) {
|
|
||||||
console.error('Insert Error:', insertError)
|
|
||||||
} else {
|
|
||||||
console.log('Insert Success, inserted data:', insertData)
|
|
||||||
|
|
||||||
// Let's delete it so we keep database clean
|
|
||||||
const { error: deleteError } = await supabase
|
|
||||||
.from('cetak_balita')
|
|
||||||
.delete()
|
|
||||||
.eq('id_berkas', idBerkas)
|
|
||||||
|
|
||||||
if (deleteError) {
|
|
||||||
console.error('Delete Error:', deleteError)
|
|
||||||
} else {
|
|
||||||
console.log('Successfully cleaned up test record')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
testInsert()
|
|
||||||
Loading…
Reference in New Issue