done
This commit is contained in:
commit
72e65d0ea0
25
.env
Normal file
25
.env
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
# .env.example - contoh pengaturan SMTP untuk Gmail
|
||||||
|
# Copy this file to .env and fill your real credentials (do NOT commit .env)
|
||||||
|
|
||||||
|
# SMTP settings (Gmail recommended)
|
||||||
|
# Use an App Password (recommended) for Gmail. See README/instructions.
|
||||||
|
|
||||||
|
# Optional: override 'From' email
|
||||||
|
SMTP_HOST=smtp.gmail.com
|
||||||
|
SMTP_PORT=587
|
||||||
|
SMTP_USER=maulanaryan2004@gmail.com
|
||||||
|
SMTP_PASS=kfebdpeoaxfabzpm
|
||||||
|
SMTP_SENDER_NAME=SIBAL
|
||||||
|
|
||||||
|
OTP_DEBUG=false
|
||||||
|
OTP_EXPIRE_MINUTES=10
|
||||||
|
|
||||||
|
# optional: SMTP_SENDER=display.name@example.com
|
||||||
|
# OTP_DEBUG=false # default false; set true to print OTP in console for debug
|
||||||
|
# SMTP_SENDER=some.name@example.com
|
||||||
|
|
||||||
|
# Other optional env vars used by the app
|
||||||
|
# SECRET_KEY=...
|
||||||
|
# GOOGLE_CLIENT_ID=...
|
||||||
|
# GOOGLE_CLIENT_SECRET=...
|
||||||
|
# GOOGLE_REDIRECT_URI=http://localhost:8051/auth/callback
|
||||||
37
README.md
Normal file
37
README.md
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
# Projek-SIBAL
|
||||||
|
Sistem Informasi Berbasis Akuntansi Ikan Bawal
|
||||||
|
|
||||||
|
## Setup singkat & environment variables
|
||||||
|
|
||||||
|
1. Salin file `.env.example` ke `.env` atau set environment variables di sistem Anda.
|
||||||
|
|
||||||
|
2. Environment penting yang harus di-set sebelum menjalankan aplikasi:
|
||||||
|
|
||||||
|
- `GOOGLE_CLIENT_ID` dan `GOOGLE_CLIENT_SECRET` — gunakan Google Cloud Console untuk membuat OAuth client.
|
||||||
|
- `GOOGLE_REDIRECT_URI` — biasanya `http://localhost:8051/auth/callback` saat development.
|
||||||
|
- `SECRET_KEY` — random string untuk Flask session.
|
||||||
|
- `SUPABASE_URL` dan `SUPABASE_KEY` — untuk koneksi Supabase (jika Anda gunakan Supabase).
|
||||||
|
|
||||||
|
3. Jalankan aplikasi (PowerShell):
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
python -m venv .venv
|
||||||
|
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process -Force
|
||||||
|
.\.venv\Scripts\Activate.ps1
|
||||||
|
pip install -r requirements.txt
|
||||||
|
# set env (sesi terminal)
|
||||||
|
$env:GOOGLE_CLIENT_ID = 'PASTE_CLIENT_ID'
|
||||||
|
$env:GOOGLE_CLIENT_SECRET = 'PASTE_CLIENT_SECRET'
|
||||||
|
python sibal.py
|
||||||
|
```
|
||||||
|
|
||||||
|
## Rotasi / revoke Google client secret
|
||||||
|
|
||||||
|
Jika secret sempat terkomit, segera revoke/rotate client secret di Google Cloud Console:
|
||||||
|
1. Buka https://console.cloud.google.com/apis/credentials
|
||||||
|
2. Pilih OAuth 2.0 Client IDs lalu revoke/regen secret.
|
||||||
|
3. Update environment variable `GOOGLE_CLIENT_SECRET` dengan nilai baru.
|
||||||
|
|
||||||
|
## Migrasi data lama (opsional)
|
||||||
|
|
||||||
|
Jika Anda sudah punya data yang tersimpan di Supabase tanpa `user_id`, gunakan skrip `scripts/migrate_add_userid.py` untuk memberi `user_id` default. Hati-hati: lakukan backup terlebih dahulu.
|
||||||
BIN
__pycache__/sibal.cpython-314.pyc
Normal file
BIN
__pycache__/sibal.cpython-314.pyc
Normal file
Binary file not shown.
@ -0,0 +1 @@
|
|||||||
|
{"web":{"client_id":"303784734780-6or0srck71bpkqcee4e6cernfvfgee5l.apps.googleusercontent.com","project_id":"carbon-facet-478922-f0","auth_uri":"https://accounts.google.com/o/oauth2/auth","token_uri":"https://oauth2.googleapis.com/token","auth_provider_x509_cert_url":"https://www.googleapis.com/oauth2/v1/certs","client_secret":"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","redirect_uris":["http://localhost:8051/auth/callback"]}}
|
||||||
BIN
requirements.txt
Normal file
BIN
requirements.txt
Normal file
Binary file not shown.
47
scripts/migrate_add_userid.py
Normal file
47
scripts/migrate_add_userid.py
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
"""
|
||||||
|
Skrip migrasi: tambahkan `user_id` ke semua record yang belum punya.
|
||||||
|
Jalankan dengan environment sudah ter-set (SUPABASE_URL & SUPABASE_KEY),
|
||||||
|
contoh:
|
||||||
|
|
||||||
|
PS> $env:SUPABASE_URL = 'https://...'
|
||||||
|
PS> $env:SUPABASE_KEY = '...'
|
||||||
|
PS> .\.venv\Scripts\python.exe scripts\migrate_add_userid.py --target-user-id <USER_ID>
|
||||||
|
|
||||||
|
PERINGATAN: Ini akan menulis ke DB. Backup sebelum menjalankan.
|
||||||
|
"""
|
||||||
|
import argparse
|
||||||
|
import os
|
||||||
|
from supabase import create_client
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
parser = argparse.ArgumentParser()
|
||||||
|
parser.add_argument('--target-user-id', required=True, help='User ID yang akan dipakai sebagai owner untuk record lama')
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
url = os.getenv('SUPABASE_URL')
|
||||||
|
key = os.getenv('SUPABASE_KEY')
|
||||||
|
if not url or not key:
|
||||||
|
print('SUPABASE_URL and SUPABASE_KEY must be set in environment')
|
||||||
|
return
|
||||||
|
|
||||||
|
client = create_client(url, key)
|
||||||
|
tables = ['transaksi_pemasukan', 'transaksi_pengeluaran', 'jurnal_umum', 'jurnal_penyesuaian', 'kartu_persediaan']
|
||||||
|
|
||||||
|
for table in tables:
|
||||||
|
print(f'Processing table: {table}')
|
||||||
|
res = client.table(table).select('*').execute()
|
||||||
|
rows = res.data if res.data else []
|
||||||
|
for row in rows:
|
||||||
|
if 'user_id' not in row or not row.get('user_id'):
|
||||||
|
try:
|
||||||
|
client.table(table).update({'user_id': args.target_user_id}).eq('id', row['id']).execute()
|
||||||
|
print(f"Updated {table} id={row['id']} -> user_id={args.target_user_id}")
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Failed to update {table} id={row.get('id')}: {e}")
|
||||||
|
|
||||||
|
print('Migration complete.')
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
||||||
301
sibal_data.json
Normal file
301
sibal_data.json
Normal file
@ -0,0 +1,301 @@
|
|||||||
|
{
|
||||||
|
"transaksi_pemasukan": [
|
||||||
|
{
|
||||||
|
"tanggal": "2025-11-18",
|
||||||
|
"jenis": "penjualan_ikan",
|
||||||
|
"jumlah": 60000,
|
||||||
|
"quantity": 5,
|
||||||
|
"hpp": 10000,
|
||||||
|
"keterangan": "bawal",
|
||||||
|
"ref": "TR",
|
||||||
|
"tipe": "pemasukan"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"transaksi_pengeluaran": [
|
||||||
|
{
|
||||||
|
"tanggal": "2025-11-18",
|
||||||
|
"jenis": "pembelian_persediaan",
|
||||||
|
"kode_barang": "IK001",
|
||||||
|
"jenis_aset": "",
|
||||||
|
"jumlah": 30000,
|
||||||
|
"quantity": 200,
|
||||||
|
"metode_bayar": "tunai",
|
||||||
|
"supplier": "",
|
||||||
|
"keterangan": "beli",
|
||||||
|
"ref": "tr",
|
||||||
|
"tipe": "pengeluaran"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tanggal": "2025-11-18",
|
||||||
|
"jenis": "pembelian_aset",
|
||||||
|
"kode_barang": "",
|
||||||
|
"jenis_aset": "tanah",
|
||||||
|
"jumlah": 2100000000,
|
||||||
|
"quantity": 0,
|
||||||
|
"metode_bayar": "tunai",
|
||||||
|
"supplier": "",
|
||||||
|
"keterangan": "Pengeluaran - pembelian_aset",
|
||||||
|
"ref": "TR",
|
||||||
|
"tipe": "pengeluaran"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tanggal": "2025-11-18",
|
||||||
|
"jenis": "pembelian_persediaan",
|
||||||
|
"kode_barang": "IK001",
|
||||||
|
"jumlah": 300000,
|
||||||
|
"quantity": 100,
|
||||||
|
"metode_bayar": "kredit",
|
||||||
|
"supplier": "harni",
|
||||||
|
"keterangan": "beli",
|
||||||
|
"ref": "TR",
|
||||||
|
"tipe": "pengeluaran"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"jurnal_umum": [
|
||||||
|
{
|
||||||
|
"tanggal": "2025-11-18",
|
||||||
|
"keterangan": "bawal",
|
||||||
|
"ref": "TR",
|
||||||
|
"akun_debit": "Kas",
|
||||||
|
"jumlah_debit": 60000,
|
||||||
|
"akun_kredit": "Pendapatan",
|
||||||
|
"jumlah_kredit": 60000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tanggal": "2025-11-18",
|
||||||
|
"keterangan": "HPP - bawal",
|
||||||
|
"ref": "TR-HPP",
|
||||||
|
"akun_debit": "HPP",
|
||||||
|
"jumlah_debit": 50000,
|
||||||
|
"akun_kredit": "Persediaan",
|
||||||
|
"jumlah_kredit": 50000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tanggal": "2025-11-18",
|
||||||
|
"keterangan": "beli",
|
||||||
|
"ref": "tr",
|
||||||
|
"akun_debit": "Persediaan",
|
||||||
|
"jumlah_debit": 30000,
|
||||||
|
"akun_kredit": "Kas",
|
||||||
|
"jumlah_kredit": 30000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tanggal": "2025-11-18",
|
||||||
|
"keterangan": "beli",
|
||||||
|
"ref": "tr",
|
||||||
|
"akun_debit": "Persediaan",
|
||||||
|
"jumlah_debit": 30000,
|
||||||
|
"akun_kredit": "Kas",
|
||||||
|
"jumlah_kredit": 30000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tanggal": "2025-11-18",
|
||||||
|
"keterangan": "Pengeluaran - pembelian_aset",
|
||||||
|
"ref": "TR",
|
||||||
|
"akun_debit": "Tanah",
|
||||||
|
"jumlah_debit": 2100000000,
|
||||||
|
"akun_kredit": "Kas",
|
||||||
|
"jumlah_kredit": 2100000000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tanggal": "2025-11-18",
|
||||||
|
"keterangan": "Pencatatan Kendaraan",
|
||||||
|
"ref": "AST-KENDARAAN",
|
||||||
|
"akun_debit": "kendaraan",
|
||||||
|
"jumlah_debit": 150000000,
|
||||||
|
"akun_kredit": "Kas",
|
||||||
|
"jumlah_kredit": 150000000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tanggal": "2025-11-18",
|
||||||
|
"keterangan": "beli",
|
||||||
|
"ref": "tr",
|
||||||
|
"akun_debit": "Persediaan",
|
||||||
|
"jumlah_debit": 30000,
|
||||||
|
"akun_kredit": "Kas",
|
||||||
|
"jumlah_kredit": 30000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tanggal": "2025-11-18",
|
||||||
|
"keterangan": "Pengeluaran - pembelian_aset",
|
||||||
|
"ref": "TR",
|
||||||
|
"akun_debit": "Beban Lainnya",
|
||||||
|
"jumlah_debit": 2100000000,
|
||||||
|
"akun_kredit": "Kas",
|
||||||
|
"jumlah_kredit": 2100000000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tanggal": "2025-11-18",
|
||||||
|
"keterangan": "beli",
|
||||||
|
"ref": "TR",
|
||||||
|
"akun_debit": "Persediaan",
|
||||||
|
"jumlah_debit": 300000,
|
||||||
|
"akun_kredit": "Utang",
|
||||||
|
"jumlah_kredit": 300000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tanggal": "2025-11-18",
|
||||||
|
"keterangan": "beli",
|
||||||
|
"ref": "tr",
|
||||||
|
"akun_debit": "Persediaan",
|
||||||
|
"jumlah_debit": 30000,
|
||||||
|
"akun_kredit": "Kas",
|
||||||
|
"jumlah_kredit": 30000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tanggal": "2025-11-18",
|
||||||
|
"keterangan": "Pengeluaran - pembelian_aset",
|
||||||
|
"ref": "TR",
|
||||||
|
"akun_debit": "Tanah",
|
||||||
|
"jumlah_debit": 2100000000,
|
||||||
|
"akun_kredit": "Kas",
|
||||||
|
"jumlah_kredit": 2100000000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tanggal": "2025-11-18",
|
||||||
|
"keterangan": "beli",
|
||||||
|
"ref": "TR",
|
||||||
|
"akun_debit": "Persediaan",
|
||||||
|
"jumlah_debit": 300000,
|
||||||
|
"akun_kredit": "Utang",
|
||||||
|
"jumlah_kredit": 300000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tanggal": "2025-11-18",
|
||||||
|
"keterangan": "Akumulasi Utang Supplier",
|
||||||
|
"ref": "UTG-001",
|
||||||
|
"akun_debit": "Persediaan",
|
||||||
|
"jumlah_debit": 300000,
|
||||||
|
"akun_kredit": "Utang",
|
||||||
|
"jumlah_kredit": 300000
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"jurnal_penyesuaian": [
|
||||||
|
{
|
||||||
|
"tanggal": "2025-11-18",
|
||||||
|
"keterangan": "Penyusutan kendaraan tahun ke-3",
|
||||||
|
"ref": "PST-KENDARAAN-3",
|
||||||
|
"akun_debit": "Beban Penyusutan Kendaraan",
|
||||||
|
"jumlah_debit": 30000000.0,
|
||||||
|
"akun_kredit": "Akumulasi Penyusutan Kendaraan",
|
||||||
|
"jumlah_kredit": 30000000.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tanggal": "2025-11-18",
|
||||||
|
"keterangan": "Penyusutan kendaraan tahun ke-3",
|
||||||
|
"ref": "PST-KENDARAAN-3",
|
||||||
|
"akun_debit": "Beban Penyusutan Kendaraan",
|
||||||
|
"jumlah_debit": 30000000.0,
|
||||||
|
"akun_kredit": "Akumulasi Penyusutan Kendaraan",
|
||||||
|
"jumlah_kredit": 30000000.0
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"buku_besar": {
|
||||||
|
"kas": [],
|
||||||
|
"pendapatan": [],
|
||||||
|
"persediaan": [],
|
||||||
|
"utang": [],
|
||||||
|
"hpp": [],
|
||||||
|
"pendapatan_tiket": [],
|
||||||
|
"tanah": [],
|
||||||
|
"bangunan_gazebo": [],
|
||||||
|
"kendaraan": [],
|
||||||
|
"peralatan": [],
|
||||||
|
"akumulasi_penyusutan_bangunan": [],
|
||||||
|
"akumulasi_penyusutan_kendaraan": [],
|
||||||
|
"akumulasi_penyusutan_peralatan": [],
|
||||||
|
"beban_gaji": [],
|
||||||
|
"beban_listrik": [],
|
||||||
|
"beban_penyusutan_bangunan": [],
|
||||||
|
"beban_penyusutan_kendaraan": [],
|
||||||
|
"beban_penyusutan_peralatan": [],
|
||||||
|
"beban_lainnya": []
|
||||||
|
},
|
||||||
|
"buku_besar_pembantu": {
|
||||||
|
"harni": [
|
||||||
|
{
|
||||||
|
"tanggal": "2025-11-18",
|
||||||
|
"keterangan": "pembelian_persediaan - beli",
|
||||||
|
"debit": 0,
|
||||||
|
"kredit": 300000,
|
||||||
|
"saldo": 300000
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"kartu_persediaan": [
|
||||||
|
{
|
||||||
|
"tanggal": "2025-11-18",
|
||||||
|
"kode_barang": "IK001",
|
||||||
|
"nama_barang": "Ikan Bawal Segar",
|
||||||
|
"masuk_qty": 0,
|
||||||
|
"masuk_harga": 0,
|
||||||
|
"masuk_total": 0,
|
||||||
|
"keluar_qty": 5,
|
||||||
|
"keluar_harga": 10000,
|
||||||
|
"keluar_total": 50000,
|
||||||
|
"saldo_qty": -5,
|
||||||
|
"saldo_harga": 10000,
|
||||||
|
"saldo_total": -50000,
|
||||||
|
"keterangan": "Penjualan - bawal"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tanggal": "2025-11-18",
|
||||||
|
"kode_barang": "IK001",
|
||||||
|
"nama_barang": "Ikan Bawal Segar",
|
||||||
|
"masuk_qty": 200,
|
||||||
|
"masuk_harga": 150.0,
|
||||||
|
"masuk_total": 30000,
|
||||||
|
"keluar_qty": 0,
|
||||||
|
"keluar_harga": 0,
|
||||||
|
"keluar_total": 0,
|
||||||
|
"saldo_qty": 200,
|
||||||
|
"saldo_harga": 150.0,
|
||||||
|
"saldo_total": 30000,
|
||||||
|
"keterangan": "Pembelian - beli"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tanggal": "2025-11-18",
|
||||||
|
"kode_barang": "IK001",
|
||||||
|
"nama_barang": "Ikan Bawal Segar",
|
||||||
|
"masuk_qty": 100,
|
||||||
|
"masuk_harga": 3000.0,
|
||||||
|
"masuk_total": 300000,
|
||||||
|
"keluar_qty": 0,
|
||||||
|
"keluar_harga": 0,
|
||||||
|
"keluar_total": 0,
|
||||||
|
"saldo_qty": 100,
|
||||||
|
"saldo_harga": 3000.0,
|
||||||
|
"saldo_total": 300000,
|
||||||
|
"keterangan": "Pembelian - beli"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"suppliers": [
|
||||||
|
"harni"
|
||||||
|
],
|
||||||
|
"aset_tetap": {
|
||||||
|
"tanah": {
|
||||||
|
"nilai_awal": 2100000000,
|
||||||
|
"penyusutan": 0,
|
||||||
|
"masa_manfaat": 0,
|
||||||
|
"tahun_pembelian": 2025
|
||||||
|
},
|
||||||
|
"bangunan_gazebo": {
|
||||||
|
"nilai_awal": 0,
|
||||||
|
"penyusutan": 0,
|
||||||
|
"masa_manfaat": 10,
|
||||||
|
"tahun_pembelian": 2025
|
||||||
|
},
|
||||||
|
"kendaraan": {
|
||||||
|
"nilai_awal": 150000000,
|
||||||
|
"penyusutan": 60000000.0,
|
||||||
|
"masa_manfaat": 5,
|
||||||
|
"tahun_pembelian": 2021
|
||||||
|
},
|
||||||
|
"peralatan": {
|
||||||
|
"nilai_awal": 0,
|
||||||
|
"penyusutan": 0,
|
||||||
|
"masa_manfaat": 3,
|
||||||
|
"tahun_pembelian": 2025
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
8
text
Normal file
8
text
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
cd 'C:\Users\ilham\Downloads\Projek-SIBAL-main\Projek-SIBAL-main'
|
||||||
|
python -m venv .venv
|
||||||
|
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process -Force
|
||||||
|
.\.venv\Scripts\Activate.ps1
|
||||||
|
pip install -r requirements.txt
|
||||||
|
pip install authlib
|
||||||
|
pip freeze > requirements.txt
|
||||||
|
python sibal.py
|
||||||
Loading…
x
Reference in New Issue
Block a user