Files
webstatement/app/Models/KartuSyncLog.php
Daeng Deni Mardaeni e1e52f78fb ```
feat(sync-logs): tambah fitur sinkronisasi log biaya kartu

- Menambahkan route, controller, model, dan migration untuk fitur baru `sync-logs`.
- Mengganti referensi `BiayaKartuController` menjadi `SyncLogsController`.
- Menyediakan halaman untuk menampilkan data log sinkronisasi dengan filter, pencarian, dan pagination.
- Menambahkan kemampuan melihat detail proses sinkronisasi langsung dari modal.
- Memperbarui `module.json` dengan item menu baru untuk fitur log sinkronisasi.
- Menghapus `BiayaKartuController` yang sudah tidak digunakan lagi.
```

Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
2025-05-10 15:12:56 +07:00

120 lines
2.8 KiB
PHP

<?php
namespace Modules\Webstatement\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
class KartuSyncLog extends Model
{
use HasFactory;
/**
* Nama tabel yang digunakan oleh model.
*
* @var string
*/
protected $table = 'kartu_sync_logs';
/**
* Atribut yang dapat diisi secara massal.
*
* @var array<int, string>
*/
protected $fillable = [
'periode',
'is_sync',
'is_csv',
'is_ftp',
'sync_at',
'csv_at',
'ftp_at',
'sync_notes',
'csv_notes',
'ftp_notes',
'total_records',
'success_records',
'failed_records',
'file_path',
'file_name',
'ftp_destination',
];
/**
* Atribut yang harus diubah menjadi tipe native.
*
* @var array
*/
protected $casts = [
'is_sync' => 'boolean',
'is_csv' => 'boolean',
'is_ftp' => 'boolean',
'sync_at' => 'datetime',
'csv_at' => 'datetime',
'ftp_at' => 'datetime',
'total_records' => 'integer',
'success_records' => 'integer',
'failed_records' => 'integer',
];
/**
* Scope untuk mendapatkan log berdasarkan periode
*
* @param \Illuminate\Database\Eloquent\Builder $query
* @param string $periode Format: YYYY-MM
* @return \Illuminate\Database\Eloquent\Builder
*/
public function scopeByPeriode($query, $periode)
{
return $query->where('periode', $periode);
}
/**
* Scope untuk mendapatkan log yang sudah sync
*
* @param \Illuminate\Database\Eloquent\Builder $query
* @return \Illuminate\Database\Eloquent\Builder
*/
public function scopeSynced($query)
{
return $query->where('is_sync', true);
}
/**
* Scope untuk mendapatkan log yang sudah membuat CSV
*
* @param \Illuminate\Database\Eloquent\Builder $query
* @return \Illuminate\Database\Eloquent\Builder
*/
public function scopeCsvGenerated($query)
{
return $query->where('is_csv', true);
}
/**
* Scope untuk mendapatkan log yang sudah upload FTP
*
* @param \Illuminate\Database\Eloquent\Builder $query
* @return \Illuminate\Database\Eloquent\Builder
*/
public function scopeFtpUploaded($query)
{
return $query->where('is_ftp', true);
}
/**
* Scope untuk mendapatkan log yang belum selesai prosesnya
*
* @param \Illuminate\Database\Eloquent\Builder $query
* @return \Illuminate\Database\Eloquent\Builder
*/
public function scopeIncomplete($query)
{
return $query->where(function ($q) {
$q->where('is_sync', false)
->orWhere('is_csv', false)
->orWhere('is_ftp', false);
});
}
}