Skip to content

Commit

Permalink
Agregada vista de regularización de documentos
Browse files Browse the repository at this point in the history
  • Loading branch information
djimenezjerez committed Oct 14, 2021
1 parent 2954300 commit a1f2c98
Show file tree
Hide file tree
Showing 24 changed files with 625 additions and 136 deletions.
2 changes: 1 addition & 1 deletion admin_data.json.example
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,5 @@
"password": "admin",
"email": "[email protected]",
"address": "Z. ZONA AV. AVENIDA Nº 123456",
"phone": "7654321",
"phone": "7654321"
}
6 changes: 5 additions & 1 deletion app/Console/Commands/ResetCounters.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
namespace App\Console\Commands;

use App\Models\ProcedureType;
use App\Models\Area;
use Illuminate\Console\Command;

class ResetCounters extends Command
Expand All @@ -19,7 +20,7 @@ class ResetCounters extends Command
*
* @var string
*/
protected $description = 'Reinicio de contadores de trámites';
protected $description = 'Reinicio de contadores de hojas de ruta';

/**
* Create a new command instance.
Expand All @@ -41,5 +42,8 @@ public function handle()
ProcedureType::where('counter', '>', 0)->update([
'counter' => 0,
]);
Area::where('counter', '>', 0)->update([
'counter' => 0,
]);
}
}
1 change: 0 additions & 1 deletion app/Console/Kernel.php
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ class Kernel extends ConsoleKernel
*/
protected function schedule(Schedule $schedule)
{
// $schedule->command('inspire')->hourly();
$schedule->call('reset:counters')->yearly()->runInBackground();
}

Expand Down
1 change: 0 additions & 1 deletion app/Http/Controllers/AttachmentController.php
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,6 @@ public function update(Request $request, Attachment $Attachment)
*/
public function destroy(Procedure $procedure, Attachment $attachment)
{
if ($procedure->area_id != auth()->user()->area_id) abort(403, 'El trámite no se encuentra en su bandeja');
$file = $attachment->path . '/' . $attachment->name;
if (Storage::exists($file)) {
Storage::delete($file);
Expand Down
50 changes: 21 additions & 29 deletions app/Http/Controllers/ProcedureController.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,9 @@
use Carbon\Carbon;
use App\Models\Area;
use App\Models\Procedure;
use App\Models\ProcedureType;
use Spatie\Permission\Models\Role;
use App\Http\Requests\FlowRequest;
use App\Http\Requests\CodeRequest;
use App\Http\Requests\ProcedureRequest;
use App\Http\Requests\ProcedureRequirementRequest;
use App\Http\Resources\ProcedureResource;
use App\Http\Resources\ProcedureFlowResource;
use App\Http\Resources\TimelineResource;
Expand All @@ -34,6 +31,11 @@ public function index(Request $request)
$user = Auth::user();
$area_id = $user->area_id;
$owned_procedures = DB::table('procedures')->where('area_id', $area_id)->select('id');
if ($user->hasRole('VERIFICADOR')) {
$owned_procedures->where(function($q) {
return $q->orWhere('verified', '=', null)->orWhere('verified', '=', true);
});
}
if ($request->has('sort_by') && $request->has('sort_desc')) {
foreach ($request->sort_by as $i => $sort) {
$owned_procedures->orderBy($sort, filter_var($request->sort_desc[$i], FILTER_VALIDATE_BOOLEAN) ? 'DESC' : 'ASC');
Expand Down Expand Up @@ -119,9 +121,17 @@ public function store(ProcedureRequest $request)
$procedure->fill($request->except('archived'));
DB::beginTransaction();
try {
$procedure->counter = $procedure->area->counter + 1;
$procedure->user_id = $user->id;
if ($procedure->procedure_type->requirements()->count() == 0) {
$procedure->verified = true;
} else {
$procedure->verified = null;
}
$procedure->save(['timestamps' => true]);
$procedure->requirements()->sync($procedure->procedure_type->requirements);
$procedure->procedure_type()->increment('counter');
$procedure->area()->increment('counter');
$procedure->procedure_flows()->create([
'from_area' => $area_id,
'to_area' => $area_id,
Expand Down Expand Up @@ -196,6 +206,9 @@ public function update(ProcedureRequest $request, Procedure $procedure)
}, array_flip($requirements));
$procedure->requirements()->sync($requirements);
$procedure->procedure_type()->increment('counter');
$procedure->update([
'verified' => null,
]);
}
DB::commit();
return [
Expand Down Expand Up @@ -242,11 +255,7 @@ public function flow(FlowRequest $request, Procedure $procedure)
return response()->json([
'message' => 'El trámite no se puede derivar porque ya fue archivado',
], 422);
} elseif ($procedure->area_id != $user->area_id) {
return response()->json([
'message' => 'El trámite no se puede derivar porque no se encuentra en su bandeja',
], 422);
} elseif (!$procedure->validated && $user->hasRole('VERIFICADOR')) {
} elseif (!$procedure->verified && $user->hasRole('VERIFICADOR')) {
return response()->json([
'message' => 'Antes de derivar debe verificar los requisitos',
], 422);
Expand All @@ -258,6 +267,7 @@ public function flow(FlowRequest $request, Procedure $procedure)
])->update([
'area_id' => $request->area_id,
'pending' => true,
'user_id' => null,
]);
DB::table('procedure_flows')->insert([
'procedure_id' => $procedure->id,
Expand Down Expand Up @@ -301,10 +311,6 @@ public function archive(Procedure $procedure)
return response()->json([
'message' => 'El trámite ya fue archivado',
], 422);
} elseif ($procedure->area_id != auth()->user()->area_id) {
return response()->json([
'message' => 'El trámite no se puede archivar porque no se encuentra en su bandeja',
], 422);
}
DB::beginTransaction();
try {
Expand Down Expand Up @@ -374,28 +380,13 @@ public function code(CodeRequest $request)
];
}

public function requirements(ProcedureRequirementRequest $request, Procedure $procedure)
{
foreach($request->requirements as $requirement) {
$procedure->requirements()->updateExistingPivot($requirement['id'], [
'validated' => $requirement['validated'],
], false);
}
return [
'message' => 'Trámite actualizado',
'payload' => [
'procedure' => new ProcedureResource($procedure),
]
];
}

public function pending()
{
$user = Auth::user();
$area_id = $user->area_id;
$query = Procedure::where('pending', true)->where('area_id', $area_id);
return [
'message' => 'Trámites por ingresar',
'message' => 'Trámites esperando ingresar a la bandeja',
'payload' => [
'badge' => $query->count(),
'procedures' => $query->select('id', 'code')->get(),
Expand All @@ -408,7 +399,8 @@ public function receive(Procedure $procedure)
$user = Auth::user();
if ($procedure->area_id == $user->area_id) {
$procedure->update([
'pending' => false
'pending' => false,
'user_id' => $user->id,
]);
$mqtt = new Mqtt();
$notify = $mqtt->ConnectAndPublish('procedures/tray/area/'.$procedure->area_id, Procedure::where('area_id', $procedure->area_id)->where('pending', true)->count());
Expand Down
120 changes: 120 additions & 0 deletions app/Http/Controllers/ProcedureRequirementController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
<?php

namespace App\Http\Controllers;

use App\Models\Procedure;
use App\Http\Requests\ProcedureRequirementRequest;
use App\Http\Resources\ProcedureRequirementResource;
use App\Http\Resources\ProcedureFlowResource;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Illuminate\Http\Request;

class ProcedureRequirementController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index(Request $request)
{
/** @var \App\Models\User */
$user = Auth::user();
$area_id = $user->area_id;
$owned_procedures = DB::table('procedures')->where('area_id', $area_id)->where('verified', '=', false)->select('id');
if ($request->has('sort_by') && $request->has('sort_desc')) {
foreach ($request->sort_by as $i => $sort) {
$owned_procedures->orderBy($sort, filter_var($request->sort_desc[$i], FILTER_VALIDATE_BOOLEAN) ? 'DESC' : 'ASC');
}
}
// Tramites que se encuentran actualmente en la sección
$current = DB::table('procedures as p')->select('p.id', 'pf.from_area', 'pf.created_at as incoming_at', 'pf.user_id as incoming_user', DB::raw('null as to_area'), DB::raw('null as outgoing_at'), DB::raw('null as outgoing_user'), DB::raw('TRUE as owner'), 'p.archived')->leftJoin('procedure_flows as pf', function($query) {
$query->on('pf.procedure_id','=','p.id')->whereRaw('pf.id IN (select MAX(a.id) from procedure_flows as a join procedures as b on a.procedure_id = b.id group by b.id)');
})->whereIn('p.id', $owned_procedures->where('pending', false))->where('p.deleted_at', null)->where('p.archived', false);
if ($request->has('search')) {
if ($request->search != '') {
$current->where(function($q) use ($request) {
return $q->orWhere(DB::raw('upper(p.code)'), 'like', '%'.trim(mb_strtoupper($request->search)).'%')->orWhere(DB::raw('upper(p.origin)'), 'like', '%'.trim(mb_strtoupper($request->search)).'%');
});
}
}
$procedures = DB::table($current)->orderBy('archived', 'ASC')->orderByRaw('-outgoing_at ASC')->orderByRaw('incoming_at DESC');
return [
'message' => 'Lista de trámites',
'payload' => ProcedureFlowResource::collection($procedures->paginate($request->per_page ?? 8, ['*'], 'page', $request->page ?? 1))->resource,
];
}

/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}

/**
* Display the specified resource.
*
* @param \App\Models\Procedure $procedure
* @return \Illuminate\Http\Response
*/
public function show(Procedure $procedure)
{
return [
'message' => 'Requisitos de hoja de ruta',
'payload' => [
'procedure' => new ProcedureRequirementResource($procedure),
]
];
}

/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\Models\Procedure $procedure
* @return \Illuminate\Http\Response
*/
public function update(ProcedureRequirementRequest $request, Procedure $procedure)
{
DB::beginTransaction();
try {
foreach($request->requirements as $requirement) {
$procedure->requirements()->updateExistingPivot($requirement['id'], [
'validated' => $requirement['validated'],
], false);
}
$procedure->update([
'verified' => $procedure->validated,
]);
DB::commit();
return [
'message' => $procedure->validated ? 'Hoja de ruta lista para derivar' : 'Hoja de ruta enviada a regularización',
'payload' => [
'procedure' => new ProcedureRequirementResource($procedure),
]
];
} catch(\Throwable $e) {
DB::rollBack();
return response()->json([
'message' => 'Error al actualizar los requisitos del hoja de ruta',
], 500);
}
}

/**
* Remove the specified resource from storage.
*
* @param \App\Models\Procedure $procedure
* @return \Illuminate\Http\Response
*/
public function destroy(Procedure $procedure)
{
//
}
}
30 changes: 30 additions & 0 deletions app/Http/Middleware/EnsureUserOwnsProcedure.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<?php

namespace App\Http\Middleware;

use App\Models\Procedure;
use Closure;
use Illuminate\Http\Request;

class EnsureUserOwnsProcedure
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle(Request $request, Closure $next)
{
$user = auth()->user();
$procedure = Procedure::findOrFail($request->procedure->id);
if ($procedure->user_id === $user->id) {
return $next($request);
} else {
return response()->json([
'message' => 'El trámite no se modificar porque no se encuentra en su bandeja',
], 422);
}
}
}
4 changes: 3 additions & 1 deletion app/Http/Resources/ProcedureFlowResource.php
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,9 @@ public function toArray($request)
'procedure_type_id' => $procedure->procedure_type_id,
'owner' => filter_var($this->owner, FILTER_VALIDATE_BOOLEAN),
'has_flowed' => $procedure->has_flowed,
'validated' => $procedure->validated,
'verified' => $procedure->verified,
'counter' => $procedure->counter,
'user_id' => $procedure->user_id,
'created_at' => $procedure->created_at,
'updated_at' => $procedure->updated_at,
'deleted_at' => $procedure->updated_at,
Expand Down
27 changes: 27 additions & 0 deletions app/Http/Resources/ProcedureRequirementResource.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<?php

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\JsonResource;

class ProcedureRequirementResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request)
{
return [
'id' => $this->id,
'code' => $this->code,
'verified' => $this->verified,
'requirements' => $this->requirements()->orderBy('name')->get()->map(function($item, $key) {
$item->validated = $item->pivot->validated;
return $item->only(['id', 'name', 'validated', 'updated_at']);
}),
];
}
}
4 changes: 3 additions & 1 deletion app/Http/Resources/ProcedureResource.php
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,9 @@ public function toArray($request)
'area_id' => $this->area_id,
'procedure_type_id' => $this->procedure_type_id,
'owner' => $this->owner,
'validated' => $this->validated,
'verified' => $this->verified,
'counter' => $this->counter,
'user_id' => $this->user_id,
'has_flowed' => $this->has_flowed,
'created_at' => $this->created_at,
'updated_at' => $this->updated_at,
Expand Down
3 changes: 2 additions & 1 deletion app/Models/Area.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@ class Area extends Model
'code',
'group',
'order',
'role_id'
'role_id',
'counter',
];

public $timestamps = true;
Expand Down
Loading

0 comments on commit a1f2c98

Please sign in to comment.