From 6975ce6e7c6fc8cdccf889faf90c6ae3b4a5268e Mon Sep 17 00:00:00 2001 From: "sas.fajri" Date: Fri, 29 May 2026 10:30:55 +0700 Subject: [PATCH] =?UTF-8?q?docs:=20update=20README=20=E2=80=94=20.env,=20l?= =?UTF-8?q?aunchd,=20URL=20baru,=20fallback=20project?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 4.6 --- README.md | 170 +++++++++++++++++++++++++++++++----------------------- 1 file changed, 97 insertions(+), 73 deletions(-) diff --git a/README.md b/README.md index 46a585b..1f23143 100644 --- a/README.md +++ b/README.md @@ -9,21 +9,56 @@ Script untuk otomatisasi input timesheet Odoo berdasarkan commit Git harian. ``` Commit dengan format "TASKCODE - deskripsi" ↓ -16:55 — cron otomatis baca commit hari ini dari semua repo +16:55 — launchd otomatis baca commit hari ini dari semua repo ↓ -Cari task_id di Odoo berdasarkan kode task +Cari task_id di Odoo berdasarkan kode task (fallback ke semua project) ↓ Hitung jam pro-rata berdasarkan time span commit (total = 8 jam/hari) ↓ Simpan ke pending_YYYY-MM-DD.json + kirim notifikasi macOS ↓ -Kamu jalankan upload_pending.py --session-id XXX +Kamu jalankan: python3 upload_pending.py ↓ Preview → konfirmasi y/N → upload ke Odoo ``` --- +## Konfigurasi `.env` + +Semua nilai sensitif disimpan di file `.env` (tidak ikut repo): + +```env +SESSION_ID=your_session_id_here +USER_ID=41 +EMPLOYEE_ID=37 +AUTHOR=sas.fajri +``` + +Salin dari template: +```bash +cp .env.example .env +``` + +**Ganti session_id** cukup edit `.env`: +```bash +nano ".env" +``` + +**Cara ambil session_id baru:** +1. Buka `https://odoo.aplikasi.web.id` → login +2. Tekan `F12` → tab **Application** (Chrome) / **Storage** (Firefox) +3. Pilih **Cookies** → cari `session_id` → copy nilainya +4. Paste ke `SESSION_ID` di `.env` + +Kalau session expired, notifikasi macOS akan muncul otomatis: +``` +⚠️ Timesheet Gagal +Session Odoo expired. Buka run_daily.sh dan ganti SESSION_ID. +``` + +--- + ## Format Commit Setiap commit **wajib** menggunakan format: @@ -35,10 +70,11 @@ TASKCODE - deskripsi singkat Contoh: ``` 6D9QD6 - buat api endpoint baru -FHM28 - fix bug validasi form +FHM28052601 - fix bug validasi form ``` Kode task akan dipakai untuk mencari task di Odoo secara otomatis. +Jika task tidak ditemukan di project default repo, script otomatis fallback mencari ke semua project lain. --- @@ -70,73 +106,77 @@ Kode task akan dipakai untuk mencari task di Odoo secara otomatis. ## Scripts ### `daily_timesheet.py` -Ambil commit hari ini dari semua repo, cari task di Odoo, hitung pro-rata berdasarkan time span commit, simpan pending. +Script utama. Ambil commit hari ini, cari task di Odoo, hitung pro-rata, simpan pending atau langsung upload. + +Semua parameter opsional jika `.env` sudah diisi. **Cara hitung pro-rata:** - Bobot tiap task = span waktu antara commit pertama dan terakhir task tersebut +- Task dengan commit pertama di hari itu → span dihitung dari **jam 08:00** - Single commit mendapat minimum 30 menit - Total jam selalu = 8 ``` Contoh: - Task A commit 09:00–11:00 → span 120 menit - Task B commit 14:00–15:30 → span 90 menit - Task C commit 10:00 → span 30 menit (minimum) - Total span = 240 menit + Task A commit 09:00–11:00 → span 08:00–11:00 = 180 menit (first commit hari ini) + Task B commit 14:00–15:30 → span 90 menit + Task C commit 10:00 → span 30 menit (minimum, single commit) + Total span = 300 menit - Task A = 8 × 120/240 = 4.00h - Task B = 8 × 90/240 = 3.00h - Task C = 8 × 30/240 = 1.00h + Task A = 8 × 180/300 = 4.80h + Task B = 8 × 90/300 = 2.40h + Task C = 8 × 30/300 = 0.80h ``` ```bash -# Dry run — preview tanpa simpan -python3 daily_timesheet.py \ - --session-id \ - --author fajri \ - --user-id 41 --employee-id 37 \ - --dry-run +# Dry run — preview tanpa simpan (pakai .env) +python3 daily_timesheet.py --dry-run # Simpan pending.json + kirim notifikasi macOS -python3 daily_timesheet.py \ - --session-id \ - --author fajri \ - --user-id 41 --employee-id 37 \ - --save-pending +python3 daily_timesheet.py --save-pending + +# Upload langsung tanpa konfirmasi +python3 daily_timesheet.py --yes # Tanggal custom -python3 daily_timesheet.py ... --date 2026-05-27 +python3 daily_timesheet.py --dry-run --date 2026-05-27 + +# Override .env via argumen +python3 daily_timesheet.py --session-id --user-id 41 --employee-id 37 --author sas.fajri ``` -| Parameter | Keterangan | -|-----------|-----------| -| `--session-id` | Cookie session Odoo | -| `--author` | Filter git author | -| `--user-id` | ID user Odoo | -| `--employee-id` | ID employee Odoo | -| `--date` | Tanggal (default: hari ini) | -| `--dry-run` | Preview saja, tidak upload | -| `--save-pending` | Simpan ke file + notifikasi | +| Parameter | Default | Keterangan | +|-----------|---------|-----------| +| `--session-id` | dari `.env` | Cookie session Odoo | +| `--author` | dari `.env` | Filter git author | +| `--user-id` | dari `.env` | ID user Odoo | +| `--employee-id` | dari `.env` | ID employee Odoo | +| `--date` | hari ini | Tanggal YYYY-MM-DD | +| `--dry-run` | — | Preview saja, tidak upload | +| `--save-pending` | — | Simpan ke file + notifikasi | +| `--yes` | — | Skip konfirmasi, langsung upload | **Contoh output preview:** ``` -─────────────────────────────────────────────────────────────────────────── - PROJECT TASK WAKTU SPAN JAM DESKRIPSI -─────────────────────────────────────────────────────────────────────────── - CPONE 10832 09:00–11:00 120m 4.00 buat api endpoint - Support Kedungdoro 5521 14:00–15:30 90m 3.00 fix bug validasi - Support Pramita 7788 10:00 (1 commit) 30m* 1.00 update config -─────────────────────────────────────────────────────────────────────────── - TOTAL 240m 8.00 - * single commit → minimum 30 menit +────────────────────────────────────────────────────────────────────────────── + PROJECT TASK WAKTU SPAN JAM DESKRIPSI +────────────────────────────────────────────────────────────────────────────── + CPONE 10832 08:00→11:00 180m↑ 4.80 buat api endpoint + Support Kedungdoro 5521 14:00–15:30 90m 2.40 fix bug validasi + Support Pramita 7788 10:00 (1x) 30m* 0.80 update config +────────────────────────────────────────────────────────────────────────────── + TOTAL 300m 8.00 + ↑ span dihitung dari 08:00 | * single commit → minimum 30 menit ``` --- ### `upload_pending.py` -Upload timesheet dari file pending hasil `daily_timesheet.py`. Jalankan setelah menerima notifikasi macOS. +Upload timesheet dari file pending hasil `daily_timesheet.py --save-pending`. +Jalankan setelah menerima notifikasi macOS jam 16:55. ```bash +# Pakai session_id dari .env tidak bisa — wajib pass manual (keamanan) python3 upload_pending.py --session-id # Tanggal tertentu @@ -160,7 +200,7 @@ python3 search_task.py \ | Parameter | Keterangan | |-----------|-----------| | `--name` | Kata kunci pencarian | -| `--project-id` | Nama project atau ID angka | +| `--project-id` | Nama project (`CPONE`, `IBL`, `SAS`, dll) atau ID angka | | `--limit` | Maks hasil (default: 8) | --- @@ -195,7 +235,7 @@ python3 upload_timesheet.py \ Lihat commit dari semua repo per project tanpa upload ke Odoo. ```bash -python3 git_commits.py --author fajri --since 2026-05-01 --until 2026-05-28 +python3 git_commits.py --author sas.fajri --since 2026-05-01 --until 2026-05-28 ``` --- @@ -207,7 +247,7 @@ Upload timesheet langsung dari commit (tanpa pending flow). Cocok untuk upload m # Dry run python3 sync_timesheet.py \ --session-id \ - --author fajri \ + --author sas.fajri \ --user-id 41 --employee-id 37 \ --since 2026-05-27 --until 2026-05-27 \ --dry-run @@ -215,46 +255,28 @@ python3 sync_timesheet.py \ # Upload python3 sync_timesheet.py \ --session-id \ - --author fajri \ + --author sas.fajri \ --user-id 41 --employee-id 37 \ --since 2026-05-27 ``` --- -## Cron Otomatis +## Jadwal Otomatis (launchd) -Cron berjalan setiap Senin–Jumat jam **16:55**: +Berjalan setiap Senin–Jumat jam **16:55** via launchd macOS: ``` -55 16 * * 1-5 run_daily.sh -``` - -Edit `run_daily.sh` untuk mengubah `SESSION_ID` jika expired: - -```bash -# run_daily.sh -SESSION_ID="session_id_baru_disini" +~/Library/LaunchAgents/com.fajri.odoo-timesheet.plist ``` Log tersimpan di `logs/daily_YYYY-MM-DD.log`. ---- - -## Session ID Expired - -Kalau session expired, notifikasi macOS akan muncul: - +Reload launchd jika ada perubahan: +```bash +launchctl unload ~/Library/LaunchAgents/com.fajri.odoo-timesheet.plist +launchctl load ~/Library/LaunchAgents/com.fajri.odoo-timesheet.plist ``` -⚠️ Timesheet Gagal -Session Odoo expired. Buka run_daily.sh dan ganti SESSION_ID. -``` - -**Cara ambil session_id baru:** -1. Buka Odoo di browser → login -2. Tekan `F12` → tab **Application** (Chrome) / **Storage** (Firefox) -3. Pilih **Cookies** → cari `session_id` -4. Copy nilainya → paste ke `SESSION_ID` di `run_daily.sh` --- @@ -264,5 +286,7 @@ Session Odoo expired. Buka run_daily.sh dan ganti SESSION_ID. |-----------|-------| | User ID | 41 | | Employee ID | 37 | +| Author | sas.fajri | | Total jam/hari | 8 | -| Odoo URL | `https://odoo.minipc.sismedika.biz.id` | +| Jam mulai kerja | 08:00 | +| Odoo URL | `https://odoo.aplikasi.web.id` |