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>
120 lines
2.8 KiB
PHP
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);
|
|
});
|
|
}
|
|
}
|