- **Penambahan Fitur**:
- Menambahkan metode baru `generateSingleAtmCardCsv` untuk membuat file CSV tunggal tanpa pemisahan cabang:
- Mencakup seluruh data kartu ATM yang memenuhi syarat.
- File diunggah ke SFTP tanpa direktori spesifik cabang.
- Implementasi command `UpdateAllAtmCardsCommand` untuk batch update:
- Dukungan konfigurasi parameter seperti batch size, ID log sinkronisasi, queue, filter, dan dry-run.
- **Optimasi Logging**:
- Logging rinci ditambahkan pada semua proses, termasuk:
- Generasi CSV tunggal.
- Proses upload CSV ke SFTP.
- Pembaruan atau pembuatan `KartuSyncLog` dalam batch processing.
- Progress dan status tiap batch.
- Error handling dengan detail informasi pada setiap exception.
- **Perbaikan dan Penyesuaian Job**:
- Penambahan `UpdateAllAtmCardsBatchJob` yang mengatur proses batch update:
- Mendukung operasi batch dengan pengaturan ukuran dan parameter filtering kartu.
- Pencatatan log progres secara dinamis dengan kalkulasi batch dan persentase.
- Menyusun delay antar job untuk performa yang lebih baik.
- Menyertakan validasi untuk sinkronisasi dan pembaruan data kartu ATM.
- **Refaktor Provider**:
- Pendaftaran command baru:
- `UpdateAllAtmCardsCommand` untuk batch update seluruh kartu ATM.
- Command disertakan dalam provider `WebstatementServiceProvider`.
- **Error Handling**:
- Peningkatan mekanisme rollback pada database saat error.
- Menambahkan notifikasi log `failure` apabila job gagal dijalankan.
- **Dokumentasi dan Komentar**:
- Menambahkan komentar mendetail pada setiap fungsi baru untuk penjelasan lebih baik.
- Mendokumentasikan seluruh proses dan perubahan pada job serta command baru terkait kartu ATM.
Perubahan ini meningkatkan efisiensi pengelolaan data kartu ATM, termasuk generasi CSV, proses batch, dan pengunggahan data ke SFTP.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
196 lines
7.0 KiB
PHP
196 lines
7.0 KiB
PHP
<?php
|
|
|
|
namespace Modules\Webstatement\Providers;
|
|
|
|
use Illuminate\Support\Facades\Blade;
|
|
use Illuminate\Support\ServiceProvider;
|
|
use Nwidart\Modules\Traits\PathNamespace;
|
|
use Illuminate\Console\Scheduling\Schedule;
|
|
use Modules\Webstatement\Console\UnlockPdf;
|
|
use Modules\Webstatement\Console\CombinePdf;
|
|
use Modules\Webstatement\Console\ConvertHtmlToPdf;
|
|
use Modules\Webstatement\Console\ExportDailyStatements;
|
|
use Modules\Webstatement\Console\ProcessDailyMigration;
|
|
use Modules\Webstatement\Console\ExportPeriodStatements;
|
|
use Modules\Webstatement\Console\UpdateAllAtmCardsCommand;
|
|
use Modules\Webstatement\Console\CheckEmailProgressCommand;
|
|
use Modules\Webstatement\Console\GenerateBiayakartuCommand;
|
|
use Modules\Webstatement\Console\SendStatementEmailCommand;
|
|
use Modules\Webstatement\Jobs\UpdateAtmCardBranchCurrencyJob;
|
|
use Modules\Webstatement\Console\GenerateAtmTransactionReport;
|
|
use Modules\Webstatement\Console\GenerateBiayaKartuCsvCommand;
|
|
|
|
class WebstatementServiceProvider extends ServiceProvider
|
|
{
|
|
use PathNamespace;
|
|
|
|
protected string $name = 'Webstatement';
|
|
|
|
protected string $nameLower = 'webstatement';
|
|
|
|
/**
|
|
* Boot the application events.
|
|
*/
|
|
public function boot(): void
|
|
{
|
|
$this->registerCommands();
|
|
$this->registerCommandSchedules();
|
|
$this->registerTranslations();
|
|
$this->registerConfig();
|
|
$this->registerViews();
|
|
$this->loadMigrationsFrom(module_path($this->name, 'database/migrations'));
|
|
|
|
if (class_exists('Breadcrumbs')) {
|
|
require __DIR__ . '/../../routes/breadcrumbs.php';
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Register the service provider.
|
|
*/
|
|
public function register(): void
|
|
{
|
|
$this->app->register(EventServiceProvider::class);
|
|
$this->app->register(RouteServiceProvider::class);
|
|
$this->app->bind(UpdateAtmCardBranchCurrencyJob::class);
|
|
}
|
|
|
|
/**
|
|
* Register commands in the format of Command::class
|
|
*/
|
|
protected function registerCommands(): void
|
|
{
|
|
$this->commands([
|
|
GenerateBiayakartuCommand::class,
|
|
GenerateBiayaKartuCsvCommand::class,
|
|
ProcessDailyMigration::class,
|
|
ExportDailyStatements::class,
|
|
CombinePdf::class,
|
|
ConvertHtmlToPdf::class,
|
|
UnlockPdf::class,
|
|
ExportPeriodStatements::class,
|
|
GenerateAtmTransactionReport::class,
|
|
SendStatementEmailCommand::class,
|
|
CheckEmailProgressCommand::class,
|
|
UpdateAllAtmCardsCommand::class
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* Register command Schedules.
|
|
*/
|
|
protected function registerCommandSchedules(): void
|
|
{
|
|
$schedule = $this->app->make(Schedule::class);
|
|
|
|
// Mengambil tanggal dan waktu dari file .env untuk biaya kartu
|
|
$biayaKartuDay = env('BIAYA_KARTU_SCHEDULER_DAY', 14); // Default ke tanggal 14
|
|
$biayaKartuTime = env('BIAYA_KARTU_SCHEDULER_TIME', '22:00'); // Default ke jam 22:00
|
|
|
|
// Mengambil tanggal dan waktu dari file .env untuk biaya kartu CSV
|
|
$biayaKartuCsvDay = env('BIAYA_KARTU_CSV_SCHEDULER_DAY', 15); // Default ke tanggal 15
|
|
$biayaKartuCsvTime = env('BIAYA_KARTU_CSV_SCHEDULER_TIME', '00:00'); // Default ke jam 00:00
|
|
|
|
// Menjadwalkan job biaya kartu menggunakan nilai dari .env
|
|
$schedule->command('webstatement:generate-biaya-kartu')
|
|
->monthlyOn((int)$biayaKartuDay, $biayaKartuTime)
|
|
->appendOutputTo(storage_path('logs/biaya-kartu-scheduler.log'));
|
|
|
|
// Menjadwalkan job biaya kartu CSV menggunakan nilai dari .env
|
|
$schedule->command('webstatement:generate-biaya-kartu-csv')
|
|
->monthlyOn((int)$biayaKartuCsvDay, $biayaKartuCsvTime)
|
|
->appendOutputTo(storage_path('logs/biaya-kartu-csv-scheduler.log'));
|
|
|
|
|
|
// Schedule the daily migration process to run at 1:00 AM (from previous task)
|
|
$schedule->command('webstatement:process-daily-migration')
|
|
->dailyAt('09:00')
|
|
->withoutOverlapping()
|
|
->appendOutputTo(storage_path('logs/daily-migration.log'));
|
|
|
|
// Schedule the statement export to run at 2:00 AM (after migration is likely complete)
|
|
$schedule->command('webstatement:export-statements')
|
|
->dailyAt('09:30')
|
|
->withoutOverlapping()
|
|
->appendOutputTo(storage_path('logs/statement-export.log'));
|
|
|
|
// Combine PDf
|
|
$schedule->command('webstatement:combine-pdf')
|
|
->dailyAt('09:30')
|
|
->withoutOverlapping()
|
|
->appendOutputTo(storage_path('logs/combine-pdf.log'));
|
|
// Convert HTML to PDF
|
|
$schedule->command('webstatement:convert-html-to-pdf')
|
|
->dailyAt('09:30')
|
|
->withoutOverlapping()
|
|
->appendOutputTo(storage_path('logs/convert-html-to-pdf.log'));
|
|
|
|
// Unlock PDF
|
|
$schedule->command('webstatement:unlock-pdf')
|
|
->dailyAt('09:30')
|
|
->withoutOverlapping()
|
|
->appendOutputTo(storage_path('logs/unlock-pdf.log'));
|
|
}
|
|
|
|
/**
|
|
* Register translations.
|
|
*/
|
|
public function registerTranslations(): void
|
|
{
|
|
$langPath = resource_path('lang/modules/'.$this->nameLower);
|
|
|
|
if (is_dir($langPath)) {
|
|
$this->loadTranslationsFrom($langPath, $this->nameLower);
|
|
$this->loadJsonTranslationsFrom($langPath);
|
|
} else {
|
|
$this->loadTranslationsFrom(module_path($this->name, 'lang'), $this->nameLower);
|
|
$this->loadJsonTranslationsFrom(module_path($this->name, 'lang'));
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Register config.
|
|
*/
|
|
protected function registerConfig(): void
|
|
{
|
|
$this->publishes([module_path($this->name, 'config/config.php') => config_path($this->nameLower.'.php')], 'config');
|
|
$this->mergeConfigFrom(module_path($this->name, 'config/config.php'), $this->nameLower);
|
|
}
|
|
|
|
/**
|
|
* Register views.
|
|
*/
|
|
public function registerViews(): void
|
|
{
|
|
$viewPath = resource_path('views/modules/'.$this->nameLower);
|
|
$sourcePath = module_path($this->name, 'resources/views');
|
|
|
|
$this->publishes([$sourcePath => $viewPath], ['views', $this->nameLower.'-module-views']);
|
|
|
|
$this->loadViewsFrom(array_merge($this->getPublishableViewPaths(), [$sourcePath]), $this->nameLower);
|
|
|
|
$componentNamespace = $this->module_namespace($this->name, $this->app_path(config('modules.paths.generator.component-class.path')));
|
|
Blade::componentNamespace($componentNamespace, $this->nameLower);
|
|
}
|
|
|
|
/**
|
|
* Get the services provided by the provider.
|
|
*/
|
|
public function provides(): array
|
|
{
|
|
return [];
|
|
}
|
|
|
|
private function getPublishableViewPaths(): array
|
|
{
|
|
$paths = [];
|
|
foreach (config('view.paths') as $path) {
|
|
if (is_dir($path.'/modules/'.$this->nameLower)) {
|
|
$paths[] = $path.'/modules/'.$this->nameLower;
|
|
}
|
|
}
|
|
|
|
return $paths;
|
|
}
|
|
}
|