public function getResults()
 {
     $input = Request::createFromGlobals();
     $steps = Step::where('step_flow', $_SESSION['user_flow'])->get();
     foreach ($steps as $step) {
         $records = Reclamo::with(['ef_request.dates' => function ($query) use($step) {
             return $query->whereDateFlow($step->step_flow)->whereDateStep($step->step_id);
         }]);
         $records = $this->applyFilters($records);
         $records = $records->get();
         $subtotalArray = ['work' => 0, 'non-work' => 0, 'total' => 0];
         $dateCount = 0;
         foreach ($records as $record) {
             foreach ($record->ef_request->dates as $date) {
                 $date_end = $date->date_end ? $date->date_end : date('Y-m-d H:i:s');
                 $timeArray = TimeController::getHours($date->date_start, $date_end);
                 $subtotalArray['work'] += $timeArray['work'];
                 $subtotalArray['non-work'] += $timeArray['non-work'];
                 $subtotalArray['total'] += $timeArray['total'];
                 $dateCount++;
             }
         }
         if ($dateCount > 0) {
             $subtotalArray['work'] = $subtotalArray['work'] / $dateCount;
             $subtotalArray['non-work'] = $subtotalArray['non-work'] / $dateCount;
             $subtotalArray['total'] = $subtotalArray['total'] / $dateCount;
         }
         $step->elapsed_time = $subtotalArray;
     }
     return $steps;
 }
 public function getResults()
 {
     $input = Request::createFromGlobals();
     $records = [];
     $steps = Step::where('step_flow', $_SESSION['user_flow'])->get();
     $reclamos = Reclamo::with('ef_request.dates');
     $reclamos = $this->applyFilters($reclamos);
     $reclamos = $reclamos->get();
     foreach ($reclamos as $reclamo) {
         $record = ['reclamo' => $reclamo->ef_request->request_inner_id, 'times' => [], 'total' => 0];
         // Iterate steps and load times/totals
         foreach ($steps as $step) {
             $step_time = 0;
             $dates = $reclamo->ef_request->dates->filter(function ($date) use($step) {
                 return $date->date_step == $step->step_id;
             });
             foreach ($dates as $date) {
                 $timeArray = TimeController::getHours($date->date_start, $date->date_end);
                 if ($input->duration == 'calendar') {
                     $step_time += $timeArray['total'] / 24;
                 } else {
                     $step_time += $timeArray['work'] / 8;
                 }
             }
             $stepArray = ['name' => $step->step_name, 'time' => number_format($step_time, 2)];
             $record['times'][] = $stepArray;
         }
         // Add totals
         foreach ($record['times'] as $time) {
             $record['total'] += $time['time'];
         }
         $records[] = $record;
     }
     return compact('records', 'steps');
 }
 public function getResults()
 {
     $input = Request::createFromGlobals();
     // Traer reclamos
     $reclamos = Reclamo::with(['reclamo_nc', 'clase', 'region']);
     $reclamos = $this->applyFilters($reclamos);
     $reclamos = $reclamos->get();
     foreach ($reclamos as &$reclamo) {
         $reclamo->duracion_dias = $input->duration == 'calendar' ? $reclamo->duracion_calendario / 24 : $reclamo->duracion_laborable / 8;
     }
     // Reorder data
     $regiones = Region::all();
     $returnData = [];
     foreach ($regiones as $region) {
         $regionArray = ['name' => $region->nombre, 'data' => [], 'total' => 0];
         $reclamos_region = $reclamos->filter(function ($reclamo) use($region) {
             return $reclamo->reclamo_region == $region->id;
         });
         if (count($reclamos_region) > 0) {
             $total_nc = 0;
             $total_nd = 0;
             foreach ($reclamos_region as $reclamo) {
                 foreach ($reclamo->reclamo_nc as $nota_credito) {
                     $regionArray['data'][] = ['reclamo' => $reclamo->id, 'cliente' => $reclamo->cliente_codigo . ' - ' . $reclamo->cliente_nombre, 'clase' => $reclamo->clase->nombre, 'analisis' => $reclamo->analisis_descripcion, 'decision' => $reclamo->reclamo_decision->nombre, 'nc_tipo' => $nota_credito->tipo_label, 'nc_fecha' => $nota_credito->fecha, 'nc_numero' => $nota_credito->numero, 'nc_monto' => $nota_credito->monto];
                     if ($nota_credito->tipo == 'nc') {
                         $total_nc += $nota_credito->monto;
                     } else {
                         $total_nd += $nota_credito->monto;
                     }
                 }
             }
             if (count($reclamo->reclamo_nc) > 0) {
                 $regionArray['total_nc'] = $total_nc;
                 $regionArray['total_nd'] = $total_nd;
                 $returnData[] = $regionArray;
             }
         }
     }
     // Get the records
     return $returnData;
 }
Exemple #4
0
function agregarNotaCreditoReclamo($reclamo_id, $tipo, $numero, $fecha, $monto, $concepto, $rma, $pedido, $url)
{
    LogController::logWebServiceIn('Llamada a web service: ' . __FILE__ . ' - ' . __FUNCTION__, compact('reclamo_id', 'tipo', 'numero', 'fecha', 'monto', 'concepto', 'rma', 'pedido', 'url'));
    try {
        $reclamo = Reclamo::find($reclamo_id);
        $nc = NotaCredito::create(['reclamo_id' => $reclamo_id, 'tipo' => $tipo, 'numero' => $numero, 'fecha' => $fecha, 'monto' => $monto, 'concepto' => $concepto, 'rma' => $rma, 'pedido' => $pedido]);
        if ($url) {
            $urlArray = explode('.', $url);
            $filename = APP_TMPPATH . "tmpdoc." . end($urlArray);
            $url_file = fopen($url, 'r');
            if ($url_file) {
                file_put_contents($filename, $url_file);
                $descripcion = $tipo == 'nc' ? 'Nota de Crédito - ' . $numero : 'Nota de Débito - ' . $numero;
                (new \AttachmentCore())->addAttachmentToRequest($reclamo->ef_id, \FlowSettingsCore::get(FLOW_RECLAMOS, 'REC_ATT_ARCHIVO_NC'), $filename, APP_ENVPATH, 'admin', 'Nota de crédito / débito subida desde el módulo externo');
            }
        }
    } catch (Exception $e) {
        LogController::logWebServiceIn('Error de webservice: ' . $e->getMessage());
        return 'Error: ' . $e->getMessage();
    }
    return '';
}
 public function getResults()
 {
     $input = Request::createFromGlobals();
     // Traer reclamos
     $reclamos = Reclamo::where('id', '>', 0);
     $reclamos = $this->applyFilters($reclamos);
     $reclamos = $reclamos->get();
     $periodos = $this->getPredefinedFilters();
     foreach ($periodos as &$periodo) {
         $periodo->cantidad = 0;
         $periodo->monto = 0;
         $reclamos_periodo = $reclamos->filter(function ($reclamo) use($periodo) {
             return strtotime($reclamo->reclamo_fecha_inicio) > strtotime($periodo->start . ' 00:00:00') && strtotime($reclamo->reclamo_fecha_inicio) < strtotime($periodo->end . ' 23:59:59');
         });
         if (count($reclamos_periodo) > 0) {
             foreach ($reclamos_periodo as $reclamo) {
                 $periodo->cantidad += 1;
                 $periodo->monto += $reclamo->nc_monto;
             }
         }
     }
     // Get the records
     return $periodos;
 }
Exemple #6
0
function reclamoFinalizado($requestId)
{
    $messageArray = array("message_value" => "Solicitud finalizada con éxito!", "message_type" => "success");
    $user = User::getLoggedUser();
    $request = Request::with(['attachments' => function ($query) use($user) {
        return $query->where('attachment_filetype', \FlowSettingsCore::get($user->user_lastflow, 'REC_ATT_ARCHIVO_NC'));
    }])->find($requestId);
    $creator = User::find($request->request_createdby);
    $attachment_array = [];
    $attachment = $request->attachments->last();
    if ($attachment) {
        $attachment_array[] = APP_ENVPATH . '/attachments/requests/' . $attachment->attachment_name;
    }
    // Actualizar fecha de cierre
    $reclamo = Reclamo::where('ef_id', $requestId)->first();
    $reclamo->reclamo_fecha_fin = date("Y-m-d H:i:s");
    $reclamo->save();
    // Enviar mail a cliente
    $email = \RequestMetadataCore::get($requestId, "REC-EMAIL-CONTACTO");
    $subject = "AVISO: Reclamo finalizado";
    $emailContent = view('Reclamos.Emails.reclamo_finalizado', compact('request', 'reclamo'));
    if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
        MailController::sendGeneralMail([["email" => $email], ["email" => $creator->user_email]], $subject, $emailContent, [], [], $attachment_array);
    }
    return $messageArray;
}
 public function insertReclamo()
 {
     $input = Request::createFromGlobals();
     $handlerRequestCore = new \RequestCore();
     $handlerAttachmentCore = new \AttachmentCore();
     $clase = Clase::find($input->reclamo['clase']);
     // Asignar creador
     $creador = $asignado_a = FlowSettingsCore::get(FLOW_RECLAMOS, "REC_PRO_USUARIO_VL");
     if (FlowSettingsCore::get(FLOW_RECLAMOS, "REC_PRO_REGION_EXT") == $input->reclamo['region']) {
         $creador = $asignado_a = FlowSettingsCore::get(FLOW_RECLAMOS, "REC_PRO_USUARIO_EXP");
     }
     $extemporaneo = false;
     $customStep = "";
     foreach ($input->facturas as $factura) {
         if ($factura['infoFactura']['extemporaneo'] == true) {
             $customStep = FlowSettingsCore::get(FLOW_RECLAMOS, "REC_STEP_EXTEMPORANEAS");
             $asignado_a = FlowSettingsCore::get(FLOW_RECLAMOS, "REC_USER_EXTEMPORANEAS");
             $extemporaneo = true;
             break;
         }
     }
     $request_id = $handlerRequestCore->createNewRequest(0, 0, FLOW_RECLAMOS, "Reclamo - " . date("Y-m-d") . " - " . $input->cliente['nombre'], "Reclamo - " . date("Y-m-d") . " - " . $input->cliente['nombre'], $creador, $asignado_a, $customStep);
     $reclamo = Reclamo::create(['ef_id' => $request_id, 'cliente_codigo' => $input->cliente['codigo'], 'cliente_nombre' => $input->cliente['nombre'], 'cliente_identificacion' => $input->cliente['identificacion'], 'cliente_direccion' => $input->cliente['direccion'], 'contacto_nombre' => $input->contacto['nombre'], 'contacto_telefono' => $input->contacto['telefono'], 'contacto_email' => $input->contacto['email'], 'reclamo_descripcion' => $input->reclamo['descripcion'], 'reclamo_fecha_inicio' => date('Y-m-d H:i:s'), 'reclamo_clase' => $input->reclamo['clase'], 'reclamo_region' => $input->reclamo['region'], 'reclamo_extemporaneo' => $extemporaneo ? 1 : 0, 'reclamo_num_interno' => $input->reclamo['num_interno'], 'reclamo_monto' => $input->reclamo['total_reclamo'], 'visita_requiere' => 0]);
     $listaFacturas = array();
     foreach ($input->facturas as $factura) {
         foreach ($factura['detalles'] as $detalle) {
             if ($detalle['cantidad_reclamo'] > 0 || $detalle['cantidad_no_facturado'] > 0) {
                 if ($detalle['cantidad_no_facturado'] > 0) {
                     $cantidad = $detalle['cantidad_no_facturado'];
                     $valor = $detalle['valor_no_facturado'];
                     $lote = $detalle['lote_no_facturado'];
                 } else {
                     $cantidad = $detalle['cantidad_reclamo'];
                     $valor = $detalle['cantidad_reclamo'] * $detalle['precioUnitario'];
                     $lote = $detalle['lote'];
                 }
                 ReclamoDetalle::create(['reclamo_id' => $reclamo->id, 'factura' => $factura['infoFactura']['numero_factura'], 'factura_fecha' => $factura['infoFactura']['fechaEmision'], 'producto_comercial' => $detalle['clase'], 'codigo_item' => $detalle['codigoPrincipal'], 'descripcion_item' => $detalle['descripcion'], 'precio_unitario' => $detalle['precioUnitario'], 'cantidad_original' => $detalle['cantidad'], 'cantidad_reclamo' => $cantidad, 'valor_reclamo' => $valor, 'lote_reclamo' => $lote]);
                 $listaFacturas[] = $factura['infoFactura']['numero_factura'];
             }
         }
     }
     $listaFacturas = array_unique($listaFacturas);
     foreach ($input->adjuntos as $adjunto) {
         $handlerAttachmentCore->addAttachmentToRequest($request_id, $adjunto['filetype']['filetype_id'], $adjunto['filename'], APP_ENVPATH, 'admin', 'Adjunto del cliente');
     }
     RequestMetadataCore::set($request_id, 'REC-CODIGO-CLIENTE', $input->cliente['codigo']);
     RequestMetadataCore::set($request_id, 'REC-NOMBRE-CLIENTE', $input->cliente['nombre']);
     RequestMetadataCore::set($request_id, 'REC-IDENTIFICACION-CLIENTE', $input->cliente['identificacion']);
     RequestMetadataCore::set($request_id, 'REC-EMAIL-CLIENTE', $input->cliente['email']);
     RequestMetadataCore::set($request_id, 'REC-EMAIL-CONTACTO', $input->contacto['email']);
     RequestMetadataCore::set($request_id, 'REC-CLASE', $clase->nombre);
     RequestMetadataCore::set($request_id, 'REC-NUMERO-FACTURA', implode(',', $listaFacturas));
     RequestMetadataCore::set($request_id, 'REC-NUMERO-REC-CLIENTE', $input->reclamo['num_interno']);
     RequestMetadataCore::set($request_id, 'REC-DESCRIPCION', $input->reclamo['descripcion']);
     RequestMetadataCore::set($request_id, 'REC-MONTO-DECISION', $input->reclamo['total_reclamo']);
     $request = EFRequest::find($request_id);
     echo $request->request_inner_id;
 }
 public function getResults()
 {
     $input = Request::createFromGlobals();
     // Get customers
     $clientes = Reclamo::orderBy('cliente_nombre')->lists('cliente_nombre');
     $clientes = $clientes->unique();
     // Get unfiltered requests
     $reclamos = Reclamo::with('ef_request');
     // Apply filters
     $reclamos = $this->applyFilters($reclamos);
     $reclamos = $reclamos->get();
     $records = [];
     foreach ($clientes as $cliente) {
         $cliente_reclamos = $reclamos->filter(function ($reclamo) use($cliente) {
             return $reclamo->cliente_nombre == $cliente;
         });
         $numAbiertos = 0;
         $montoAbiertos = 0;
         $totalTimeArrayAbiertos = ['work' => 0, 'non-work' => 0, 'total' => 0];
         $numCerrados = 0;
         $montoCerrados = 0;
         $totalTimeArrayCerrados = ['work' => 0, 'non-work' => 0, 'total' => 0];
         foreach ($cliente_reclamos as $reclamo) {
             if ($reclamo->reclamo_fecha_fin != null && $reclamo->reclamo_fecha_fin != '' && $reclamo->reclamo_fecha_fin != '0000-00-00 00:00:00') {
                 // Set end date
                 $date_end = $reclamo->reclamo_fecha_fin;
                 // Get times
                 $timeArray = TimeController::getHours($reclamo->reclamo_fecha_inicio, $date_end);
                 $totalTimeArrayCerrados['work'] += $timeArray['work'];
                 $totalTimeArrayCerrados['non-work'] += $timeArray['non-work'];
                 $totalTimeArrayCerrados['total'] += $timeArray['total'];
                 $numCerrados++;
                 $montoCerrados += $reclamo->nc_monto;
             } else {
                 // Set end date
                 $date_end = date('Y-m-d H:i:s');
                 // Get times
                 $timeArray = TimeController::getHours($reclamo->reclamo_fecha_inicio, $date_end);
                 $totalTimeArrayAbiertos['work'] += $timeArray['work'];
                 $totalTimeArrayAbiertos['non-work'] += $timeArray['non-work'];
                 $totalTimeArrayAbiertos['total'] += $timeArray['total'];
                 $numAbiertos++;
                 $montoAbiertos += $reclamo->nc_monto;
             }
             // Set end date
             $date_end = $reclamo->reclamo_fecha_fin ? $reclamo->reclamo_fecha_fin : date('Y-m-d H:i:s');
             // Get times
             $timeArray = TimeController::getHours($reclamo->reclamo_fecha_inicio, $date_end);
         }
         $duracionAbiertos = 0;
         $duracionCerrados = 0;
         if ($input->duration == 'calendar') {
             if ($numAbiertos > 0) {
                 $duracionAbiertos = $totalTimeArrayAbiertos['total'] / $numAbiertos / 24;
             }
             if ($numCerrados > 0) {
                 $duracionCerrados = $totalTimeArrayCerrados['total'] / $numCerrados / 24;
             }
         } else {
             if ($numAbiertos > 0) {
                 $duracionAbiertos = $totalTimeArrayAbiertos['work'] / $numAbiertos / 8;
             }
             if ($numCerrados > 0) {
                 $duracionCerrados = $totalTimeArrayCerrados['work'] / $numCerrados / 8;
             }
         }
         if ($numAbiertos > 0 || $numCerrados > 0) {
             $records[] = ['nombre' => $cliente, 'num_abiertos' => $numAbiertos, 'monto_abiertos' => $montoAbiertos, 'duracion_abiertos' => $duracionAbiertos, 'num_cerrados' => $numCerrados, 'monto_cerrados' => $montoCerrados, 'duracion_cerrados' => $duracionCerrados, 'total' => $numAbiertos + $numCerrados];
         }
     }
     // Get the records
     return $records;
 }
 public function getResults()
 {
     $input = Request::createFromGlobals();
     // Tomar clases
     $clases = Reclamo::orderBy('reclamo_clase')->lists('reclamo_clase');
     $clases = $clases->unique();
     // Get unfiltered requests
     $reclamos = Reclamo::where('id', '>', 0);
     // Apply filters
     $reclamos = $this->applyFilters($reclamos);
     $reclamos = $reclamos->with('reclamo_causas')->get();
     $records = [];
     foreach ($clases as $clase) {
         $finalData = [];
         $obj_clase = Clase::find($clase);
         $problemas = Problema::where('clase_id', $obj_clase->id)->get();
         foreach ($problemas as $problema) {
             $causas = Causa::where('problema_id', $problema->id)->get();
             foreach ($causas as $causa) {
                 $cliente_reclamos = $reclamos->filter(function ($reclamo) use($clase) {
                     return $reclamo->reclamo_clase == $clase;
                 })->filter(function ($reclamo) use($causa) {
                     $retval = false;
                     foreach ($reclamo->reclamo_causas as $reclamo_causa) {
                         if ($reclamo_causa->causa_id == $causa->id && !$retval) {
                             $retval = true;
                         }
                     }
                     return $retval;
                 });
                 $numAbiertos = 0;
                 $montoAbiertos = 0;
                 $totalTimeArrayAbiertos = ['work' => 0, 'non-work' => 0, 'total' => 0];
                 $numCerrados = 0;
                 $montoCerrados = 0;
                 $totalTimeArrayCerrados = ['work' => 0, 'non-work' => 0, 'total' => 0];
                 foreach ($cliente_reclamos as $reclamo) {
                     if ($reclamo->reclamo_fecha_fin != null && $reclamo->reclamo_fecha_fin != '' && $reclamo->reclamo_fecha_fin != '0000-00-00 00:00:00') {
                         // Set end date
                         $date_end = $reclamo->reclamo_fecha_fin;
                         // Get times
                         $timeArray = TimeController::getHours($reclamo->reclamo_fecha_inicio, $date_end);
                         $totalTimeArrayCerrados['work'] += $timeArray['work'];
                         $totalTimeArrayCerrados['non-work'] += $timeArray['non-work'];
                         $totalTimeArrayCerrados['total'] += $timeArray['total'];
                         $numCerrados++;
                         $montoCerrados += $reclamo->nc_monto;
                     } else {
                         // Set end date
                         $date_end = date('Y-m-d H:i:s');
                         // Get times
                         $timeArray = TimeController::getHours($reclamo->reclamo_fecha_inicio, $date_end);
                         $totalTimeArrayAbiertos['work'] += $timeArray['work'];
                         $totalTimeArrayAbiertos['non-work'] += $timeArray['non-work'];
                         $totalTimeArrayAbiertos['total'] += $timeArray['total'];
                         $numAbiertos++;
                         $montoAbiertos += $reclamo->nc_monto;
                     }
                     // Set end date
                     $date_end = $reclamo->reclamo_fecha_fin ? $reclamo->reclamo_fecha_fin : date('Y-m-d H:i:s');
                     // Get times
                     $timeArray = TimeController::getHours($reclamo->reclamo_fecha_inicio, $date_end);
                 }
                 $duracionAbiertos = 0;
                 $duracionCerrados = 0;
                 if ($input->duration == 'calendar') {
                     if ($numAbiertos > 0) {
                         $duracionAbiertos = $totalTimeArrayAbiertos['total'] / $numAbiertos / 24;
                     }
                     if ($numCerrados > 0) {
                         $duracionCerrados = $totalTimeArrayCerrados['total'] / $numCerrados / 24;
                     }
                 } else {
                     if ($numAbiertos > 0) {
                         $duracionAbiertos = $totalTimeArrayAbiertos['work'] / $numAbiertos / 8;
                     }
                     if ($numCerrados > 0) {
                         $duracionCerrados = $totalTimeArrayCerrados['work'] / $numCerrados / 8;
                     }
                 }
                 if ($numAbiertos + $numCerrados > 0) {
                     $finalData[] = ['nombre' => $problema->nombre . ' - ' . $causa->nombre, 'num_abiertos' => $numAbiertos, 'monto_abiertos' => $montoAbiertos, 'duracion_abiertos' => $duracionAbiertos, 'num_cerrados' => $numCerrados, 'monto_cerrados' => $montoCerrados, 'duracion_cerrados' => $duracionCerrados, 'total' => $numAbiertos + $numCerrados];
                 }
             }
         }
         if (count($finalData) > 0) {
             $records[] = ['name' => $obj_clase->nombre, 'data' => $finalData];
         }
     }
     // Get the records
     return $records;
 }
Exemple #10
0
 public function removeAccion($id_reclamo, $id_accion)
 {
     $reclamo = Reclamo::find($id_reclamo);
     $reclamo->reclamo_acciones()->detach($id_accion);
     return new AjaxResponse('success', '');
 }
 protected function getGraphClaseRegion()
 {
     $input = Request::createFromGlobals();
     // Get graph/table data
     $graphArray = [];
     $tableArray = [];
     $graphArray['chart']['type'] = 'column';
     $graphArray['title']['text'] = 'Reclamos por clase / región';
     if ($input->filters['tipo_analisis'] == 'cantidad') {
         $graphArray['title']['text'] .= ' (cantidad)';
     } else {
         $graphArray['title']['text'] .= ' (valor)';
     }
     $graphArray['subtitle']['text'] = 'Haga click en una barra para ver información detallada';
     $graphArray['xAxis']['type'] = 'category';
     $graphArray['xAxis']['min'] = 0;
     if ($input->filters['tipo_analisis'] == 'cantidad') {
         $graphArray['yAxis']['title']['text'] = 'Número de reclamos';
     } else {
         $graphArray['yAxis']['title']['text'] = 'Valor';
     }
     // Drill up button styling
     $graphArray['drilldown']['drillUpButton'] = ['relativeTo' => 'spacingBox', 'position' => ['x' => -30, 'y' => 0], 'theme' => ['fill' => 'white', 'stroke-width' => 1, 'stroke' => 'silver', 'style' => ['font-size' => '10px'], 'states' => ['hover' => ['fill' => '#bada55'], 'select' => ['fill' => '#bada55', 'stroke' => '#039']]]];
     // Estructurar datos
     $estados = [['id' => 'open', 'name' => 'Abiertos'], ['id' => 'closed', 'name' => 'Cerrados']];
     $clases = Clase::all();
     $regiones = Region::all();
     // Nivel 1: Clases (Abiertas / Cerradas)
     foreach ($estados as $estado) {
         $clasesData = [];
         foreach ($clases as $clase) {
             $query = Reclamo::whereReclamoClase($clase->id)->whereHas('ef_request', function ($query) use($estado) {
                 if ($estado['id'] == 'open') {
                     $estado['id'] = '';
                 }
                 return $query->whereRequestStatus($estado['id']);
             })->analysis();
             if ($input->filters['tipo_analisis'] == 'cantidad') {
                 $num_reclamos = $query->count();
             } else {
                 $num_reclamos = $query->sum('nc_monto');
             }
             if ($num_reclamos) {
                 $clasesData[] = ['name' => $clase->nombre, 'y' => $num_reclamos, 'drilldown' => $estado['id'] . '-' . $clase->id];
             }
         }
         $graphArray["series"][] = ['name' => $estado['name'], 'data' => $clasesData];
     }
     // Nivel 2: Región
     foreach ($estados as $estado) {
         foreach ($clases as $clase) {
             $regionesData = [];
             foreach ($regiones as $region) {
                 $query = Reclamo::whereReclamoClase($clase->id)->whereReclamoRegion($region->id)->whereHas('ef_request', function ($query) use($estado) {
                     if ($estado['id'] == 'open') {
                         $estado['id'] = '';
                     }
                     return $query->whereRequestStatus($estado['id']);
                 })->analysis();
                 if ($input->filters['tipo_analisis'] == 'cantidad') {
                     $num_reclamos = $query->count();
                 } else {
                     $num_reclamos = $query->sum('nc_monto');
                 }
                 if ($num_reclamos) {
                     $regionesData[] = ['name' => $region->nombre, 'y' => $num_reclamos, 'drilldown' => $estado['id'] . '-' . $clase->id . '-' . $region->id];
                 }
             }
             $graphArray['drilldown']['series'][] = ['name' => $estado['name'], 'id' => $estado['id'] . '-' . $clase->id, 'data' => $regionesData];
         }
     }
     // Nivel 3: Reclamos
     foreach ($estados as $estado) {
         foreach ($clases as $clase) {
             foreach ($regiones as $region) {
                 $reclamosData = [];
                 $reclamos = Reclamo::whereReclamoClase($clase->id)->whereReclamoRegion($region->id)->whereHas('ef_request', function ($query) use($estado) {
                     if ($estado['id'] == 'open') {
                         $estado['id'] = '';
                     }
                     return $query->whereRequestStatus($estado['id']);
                 })->analysis()->get();
                 if ($reclamos) {
                     foreach ($reclamos as $reclamo) {
                         if ($input->filters['tipo_analisis'] == 'cantidad') {
                             $reclamosData[] = [(string) $reclamo->id, 1];
                         } else {
                             $reclamosData[] = [(string) $reclamo->id, $reclamo->nc_monto];
                         }
                     }
                 }
                 $graphArray['drilldown']['series'][] = ['name' => $estado['name'], 'id' => $estado['id'] . '-' . $clase->id . '-' . $region->id, 'data' => $reclamosData];
             }
         }
     }
     return ['graph' => $graphArray, 'table' => $tableArray];
 }
 public function generateRequestPDF()
 {
     $input = Request::createFromGlobals();
     $filename = APP_TMPPATH . 'requisicion.pdf';
     $reclamo = Reclamo::with(['clase', 'lineas', 'reclamo_causas.causa', 'reclamo_acciones.reclamos', 'reclamo_decision', 'reclamo_nc'])->whereEfId($input->request_id)->first();
     $timeArray = TimeController::getHours($reclamo->reclamo_fecha_inicio);
     $dias_calendario = number_format($timeArray['total'] / 24, 2);
     $dias_laborable = number_format($timeArray['work'] / 8, 2);
     PDFController::generatePDF(view('Reclamos.PDF.reclamo', compact('reclamo', 'dias_calendario', 'dias_laborable')), false, $filename);
     (new \AttachmentCore())->addAttachmentToRequest($input->request_id, \FlowSettingsCore::get(FLOW_RECLAMOS, 'REC_ATT_ARCHIVO_PDF'), $filename, APP_ENVPATH, $_SESSION['user_id'], "Reclamo");
     return ["status" => true, "message" => ""];
 }