sigd/app/Services/SigdCrudService.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;
}
}