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