180 lines
6.1 KiB
PHP
180 lines
6.1 KiB
PHP
<?php
|
|
|
|
namespace App\Services\Activity;
|
|
|
|
use App\Enums\ActivityType;
|
|
use App\Models\ActivityApprovalKonsolidasi;
|
|
use App\Models\ActivityForm;
|
|
use App\Models\ActivityFormDetail;
|
|
use App\Services\SigdCrudService;
|
|
|
|
|
|
class FormKehutananService extends SigdCrudService
|
|
{
|
|
public function __construct(ActivityForm $model)
|
|
{
|
|
parent::__construct($model);
|
|
}
|
|
|
|
public function getActivityForm($sector, $code, $inventoryYear, $agency = null)
|
|
{
|
|
$query = ActivityForm::where('sector', $sector)
|
|
->where('form_code', $code)
|
|
->where('inventory_year', $inventoryYear)
|
|
->rowActive()
|
|
->orderBy('inventory_year', 'desc');
|
|
|
|
if ($agency && $agency != 'none') {
|
|
if ($agency === 'all') {
|
|
// return $query->whereNotNull('agency_id')->get();
|
|
$produsen = $this->getDataApproval($sector, $code, $inventoryYear)
|
|
->where('status', 1)->pluck('agency_id')->toArray();
|
|
return $query->whereIn('agency_id', $produsen);
|
|
}
|
|
|
|
return $query->where('agency_id', $agency)->first();
|
|
}
|
|
|
|
return $query->whereNull('agency_id')->first();
|
|
}
|
|
|
|
|
|
public function getActivityFormDetails($formId, $agency = null)
|
|
{
|
|
if ($agency == 'all') {
|
|
$results = ActivityFormDetail::whereIn('form_id', $formId)
|
|
->rowActive()->groupBy('activity_year', 'activity_code', 'activity_unit_code')
|
|
->selectRaw('activity_year, activity_code, activity_unit_code, sum(activity_value) as activity_value')
|
|
->orderBy('activity_year', 'desc')->get();
|
|
|
|
return $results;
|
|
}
|
|
|
|
return ActivityFormDetail::where('form_id', $formId)
|
|
->rowActive()->orderBy('activity_year', 'desc')
|
|
->get();
|
|
}
|
|
|
|
public function save($sector, $code, $inventoryYear, $data, $instansi = null)
|
|
{
|
|
$query = ActivityForm::where('sector', $sector)
|
|
->where('form_code', $code)->where('inventory_year', $inventoryYear)
|
|
->whereNull('agency_id')->rowActive();
|
|
|
|
if ($instansi && $instansi != 'all' && $instansi != 'none') {
|
|
$query->where('agency_id', $instansi);
|
|
} else {
|
|
$query->whereNull('agency_id');
|
|
}
|
|
|
|
$activityForm = $query->first();
|
|
|
|
try {
|
|
if (!$activityForm) {
|
|
$instansiId = $instansi === 'all' || $instansi === 'none' ? null : $instansi;
|
|
$dataForm = [
|
|
'sector' => $sector,
|
|
'form_code' => $code,
|
|
'inventory_year' => $inventoryYear,
|
|
'verification_status' => 'unverified',
|
|
'validation_status' => 'unvalidated',
|
|
'lock_status' => 'open',
|
|
|
|
'agency_id' => $instansiId,
|
|
];
|
|
|
|
$activityForm = $this->create($dataForm);
|
|
logUserActivity(ActivityType::INSERT_ACTIVITY_DATA, $activityForm->id);
|
|
} else {
|
|
$this->update($activityForm, []);
|
|
logUserActivity(ActivityType::UPDATE_ACTIVITY_DATA, $activityForm->id);
|
|
}
|
|
|
|
|
|
foreach ($data as $activityCode => $activityValue) {
|
|
// if (collect($activityValue)->filter(function ($value) {
|
|
// return $value !== null;
|
|
// })->isNotEmpty()) {
|
|
$activityData = [
|
|
'year' => $inventoryYear - 1,
|
|
'code' => $activityCode,
|
|
'value' => $activityValue ?? null
|
|
];
|
|
$this->saveDetail($activityForm, $activityData);
|
|
// }
|
|
}
|
|
} catch (\Exception $e) {
|
|
throw $e;
|
|
}
|
|
}
|
|
|
|
public function saveDetail($activityForm, $activityData)
|
|
{
|
|
|
|
$activityFormDetail = ActivityFormDetail::where('form_id', $activityForm->id)
|
|
->where('activity_year', $activityData['year'])
|
|
->where('activity_code', $activityData['code'])
|
|
->rowActive()
|
|
->first();
|
|
|
|
if (!empty($activityData['value'])) {
|
|
$newValue = getOriginalValue($activityData['value']);
|
|
|
|
if ($activityFormDetail) {
|
|
$oldValue = getFormattedValue($activityFormDetail->activity_value);
|
|
|
|
if ($oldValue != $activityData['value']) {
|
|
$this->update($activityFormDetail, ['activity_value' => $newValue]);
|
|
}
|
|
} else {
|
|
$dataFormDetail = [
|
|
'form_id' => $activityForm->id,
|
|
'activity_year' => $activityData['year'],
|
|
'activity_code' => $activityData['code'],
|
|
'activity_unit_code' => 'ha',
|
|
'activity_value' => $newValue
|
|
];
|
|
|
|
$this->create($dataFormDetail, ActivityFormDetail::class);
|
|
}
|
|
} else {
|
|
if ($activityFormDetail) {
|
|
$this->delete($activityFormDetail);
|
|
}
|
|
}
|
|
}
|
|
|
|
public function approvalKonsolidasi($form, $sector, $code, $inventoryYear, $agencyId)
|
|
{
|
|
$hasData = $this->getDataApproval($sector, $code, $inventoryYear, true)->where([
|
|
'form_id' => $form->id,
|
|
'agency_id' => $agencyId,
|
|
])->rowActive()->first();
|
|
|
|
$newStatus = 1;
|
|
if ($hasData) {
|
|
$newStatus = $hasData->status == 1 ? 0 : 1;
|
|
}
|
|
|
|
$dataForm = [
|
|
'form_id' => $form->id,
|
|
'form_sector' => $sector,
|
|
'form_code' => $code,
|
|
'inventory_year' => $inventoryYear,
|
|
'agency_id' => $agencyId,
|
|
'status' => $newStatus,
|
|
];
|
|
|
|
$this->createOrUpdate([
|
|
'form_id' => $form->id,
|
|
'form_sector' => $sector,
|
|
'form_code' => $code,
|
|
'inventory_year' => $inventoryYear,
|
|
'agency_id' => $agencyId,
|
|
], $dataForm, ActivityApprovalKonsolidasi::class);
|
|
|
|
$activityType = $newStatus == 1 ? ActivityType::APPROVAL_KONSOLIDASI : ActivityType::DISSAPPROVAL_KONSOLIDASI;
|
|
logUserActivity($activityType, $form->id);
|
|
}
|
|
}
|