238 lines
6.4 KiB
PHP
238 lines
6.4 KiB
PHP
<?php
|
|
|
|
namespace App\Services;
|
|
|
|
use App\Models\ActivityApprovalKonsolidasi;
|
|
use App\Models\ActivityForm;
|
|
use App\Models\ActivityFormDetail;
|
|
use App\Models\ReferenceGwp;
|
|
use App\Models\ReferenceWs;
|
|
use App\Models\SettingForm;
|
|
use App\Models\SettingFormDetail;
|
|
use App\Models\SigdModel;
|
|
use Illuminate\Database\Eloquent\Collection;
|
|
use Illuminate\Database\Eloquent\Model;
|
|
use Illuminate\Support\Facades\Auth;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Support\Str;
|
|
|
|
class SigdCrudService
|
|
{
|
|
protected $model;
|
|
|
|
public function __construct(SigdModel $model)
|
|
{
|
|
$this->model = $model;
|
|
}
|
|
|
|
public function getAll()
|
|
{
|
|
return $this->model->rowActive()->orderByRowNum()->get();
|
|
}
|
|
|
|
public function getRawAll()
|
|
{
|
|
return $this->model->rowActive()->orderByRowNum();
|
|
}
|
|
|
|
public function find($id)
|
|
{
|
|
return $this->model->rowActive()->findOrFail($id);
|
|
}
|
|
|
|
public function create(array $data, $modelClass = null)
|
|
{
|
|
try {
|
|
DB::beginTransaction();
|
|
|
|
$uuid = (string) Str::uuid();
|
|
|
|
$data['id'] = $uuid;
|
|
$data['created_by'] = Auth::user()->name ?? 'superadmin';
|
|
|
|
if (!$modelClass) {
|
|
$model = $this->model->create($data);
|
|
} else {
|
|
$model = new $modelClass;
|
|
$model->fill($data);
|
|
$model->save();
|
|
}
|
|
|
|
DB::commit();
|
|
|
|
return $model;
|
|
} catch (\Exception $e) {
|
|
DB::rollBack();
|
|
throw $e;
|
|
}
|
|
}
|
|
|
|
public function update(Model $model, array $data)
|
|
{
|
|
try {
|
|
DB::beginTransaction();
|
|
|
|
$data['updated_by'] = Auth::user()->name;
|
|
$model->update($data);
|
|
|
|
DB::commit();
|
|
|
|
return $model;
|
|
} catch (\Exception $e) {
|
|
DB::rollBack();
|
|
throw $e;
|
|
}
|
|
}
|
|
|
|
public function createOrUpdate(array $attributes, array $values, $modelClass = null)
|
|
{
|
|
try {
|
|
DB::beginTransaction();
|
|
|
|
$model = $modelClass ? new $modelClass : $this->model;
|
|
|
|
$record = $model->where($attributes)->first();
|
|
|
|
if ($record) {
|
|
$values['updated_by'] = Auth::user()->name ?? 'superadmin';
|
|
$record->update($values);
|
|
} else {
|
|
$values['id'] = (string) Str::uuid();
|
|
$values['created_by'] = Auth::user()->name ?? 'superadmin';
|
|
$record = $model->create($values);
|
|
}
|
|
|
|
DB::commit();
|
|
|
|
return $record;
|
|
} catch (\Exception $e) {
|
|
DB::rollBack();
|
|
throw $e;
|
|
}
|
|
}
|
|
|
|
public function delete(Model $model)
|
|
{
|
|
try {
|
|
DB::beginTransaction();
|
|
|
|
$model->row_status = 0;
|
|
$model->updated_at = now();
|
|
$model->updated_by = Auth::user()->name ?? 'superadmin';
|
|
$model->save();
|
|
|
|
DB::commit();
|
|
|
|
return true;
|
|
} catch (\Exception $e) {
|
|
DB::rollBack();
|
|
throw $e;
|
|
}
|
|
}
|
|
|
|
public function getActivityForm($sector, $code, $inventoryYear)
|
|
{
|
|
return ActivityForm::where('sector', $sector)
|
|
->where('form_code', $code)->where('inventory_year', $inventoryYear)->whereNull('agency_id')
|
|
->rowActive()->orderBy('inventory_year', 'desc')
|
|
->first();
|
|
}
|
|
|
|
public function getActivityFormDetails($formId)
|
|
{
|
|
return ActivityFormDetail::where('form_id', $formId)
|
|
->rowActive()->orderBy('activity_year', 'desc')
|
|
->get()->groupBy('activity_year');
|
|
}
|
|
|
|
public function getWs($wsCode)
|
|
{
|
|
return ReferenceWs::select('code', 'ws_code', 'model')
|
|
->where('code', $wsCode)
|
|
->rowActive()->first();
|
|
}
|
|
|
|
public static function getActivityFormDetailsByYear($inventoryYear, $activityYear, $sector, $formCode, $activityCodes = null)
|
|
{
|
|
$form = ActivityForm::where('inventory_year', $inventoryYear)
|
|
->where('sector', $sector)
|
|
->where('form_code', $formCode)->whereNull('agency_id')
|
|
->rowActive()
|
|
->first();
|
|
|
|
if ($form) {
|
|
$query = ActivityFormDetail::where('form_id', $form->id)
|
|
->where('activity_year', $activityYear)
|
|
->rowActive();
|
|
|
|
if ($activityCodes !== null) {
|
|
if (is_array($activityCodes)) {
|
|
$query->whereIn('activity_code', $activityCodes);
|
|
} else {
|
|
$query->where('activity_code', $activityCodes);
|
|
}
|
|
}
|
|
|
|
$activityFormDetail = $query->get();
|
|
return $activityFormDetail->isNotEmpty() ? $activityFormDetail : [];
|
|
}
|
|
|
|
return [];
|
|
}
|
|
|
|
public static function getActivityFormDetailsGroupedByYear($inventoryYear, $sector, $formCode)
|
|
{
|
|
$form = ActivityForm::where('inventory_year', $inventoryYear)
|
|
->where('sector', $sector)->where('form_code', $formCode)->whereNull('agency_id')
|
|
->rowActive()->orderBy('inventory_year', 'desc')
|
|
->first();
|
|
|
|
if ($form) {
|
|
$query = ActivityFormDetail::where('form_id', $form->id)
|
|
->rowActive()->orderBy('activity_year', 'desc')
|
|
->get()->groupBy('activity_year');
|
|
|
|
$activityFormDetail = $query;
|
|
return $activityFormDetail->isNotEmpty() ? $activityFormDetail : [];
|
|
}
|
|
|
|
return [];
|
|
}
|
|
|
|
public static function getDataSettingFormDetail($sector, $code)
|
|
{
|
|
$form = SettingForm::rowActive()->where('sector', $sector)->where('code', $code)->first();
|
|
|
|
if ($form) {
|
|
$formDetails = SettingFormDetail::rowActive()->where('form_code', $code)->orderByRowNum()->get();
|
|
return $formDetails;
|
|
}
|
|
|
|
return [];
|
|
}
|
|
|
|
public function getGWPValues()
|
|
{
|
|
$gwp = ReferenceGwp::whereHas('ar', function ($query) {
|
|
$query->isActive();
|
|
})->get();
|
|
|
|
return $gwp->keyBy('ghg_code');
|
|
}
|
|
|
|
public function getDataApproval($sector, $code, $inventoryYear, $isRaw = false)
|
|
{
|
|
$query = ActivityApprovalKonsolidasi::where([
|
|
'form_sector' => $sector,
|
|
'form_code' => $code,
|
|
'inventory_year' => $inventoryYear,
|
|
])->rowActive();
|
|
|
|
if (!$isRaw) {
|
|
$query->get();
|
|
}
|
|
|
|
return $query;
|
|
}
|
|
}
|