sigd/app/Services/Activity/FormKehutananService.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);
}
}