public function getGraph()
 {
     $input = Request::createFromGlobals();
     // Get graph data
     $graphArray = [];
     $graphArray['chart']['type'] = 'bar';
     $graphArray['title']['text'] = 'Reclamos por Cliente';
     if ($input->tipo_analisis == 'cantidad') {
         $graphArray['title']['text'] .= ' (cantidad)';
     } else {
         $graphArray['title']['text'] .= ' (valor)';
     }
     $graphArray['xAxis']['type'] = 'category';
     $graphArray['xAxis']['min'] = 0;
     if ($input->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']];
     $clientes = Reclamo::where('id', '>', 0);
     $clientes = $this->applyFilters($clientes);
     $clientes = $clientes->lists('cliente_nombre');
     $clientes = $clientes->unique();
     // Nivel 1: Clientes (Abiertas / Cerradas)
     foreach ($estados as $estado) {
         $clientesData = [];
         foreach ($clientes as $cliente) {
             $query = Reclamo::whereClienteNombre($cliente)->whereHas('ef_request', function ($query) use($estado) {
                 if ($estado['id'] == 'open') {
                     $estado['id'] = '';
                 }
                 return $query->whereRequestStatus($estado['id']);
             });
             $query = $this->applyFilters($query);
             if ($input->tipo_analisis == 'cantidad') {
                 $num_reclamos = $query->count();
             } else {
                 $reclamos = $query->get();
                 $num_reclamos = 0;
                 foreach ($reclamos as $reclamo) {
                     $num_reclamos += $reclamo->nc_monto;
                 }
             }
             $clientesData[] = ['name' => $cliente, 'y' => $num_reclamos];
         }
         $graphArray["series"][] = ['name' => $estado['name'], 'data' => $clientesData];
     }
     return $graphArray;
 }
Пример #2
0
 public function getCliente()
 {
     $input = Request::createFromGlobals();
     $codigo_cliente = $input->codigo_cliente;
     $handlerFlowSettingsCore = new \FlowSettingsCore();
     $handlerWebServiceCore = new \WebServiceCore();
     $returnData = ["mensaje" => 'Error', "cliente" => null];
     if ($this->isTestEnv()) {
         $datosCliente = $this->getTestData();
     } else {
         $wsdl = $handlerFlowSettingsCore->getSettingValue(FLOW_RECLAMOS, "REC_WS_FACTURAS_WSDL");
         $operation = $handlerFlowSettingsCore->getSettingValue(FLOW_RECLAMOS, "REC_WS_FACTURAS_OPERATION");
         $namespace = $handlerFlowSettingsCore->getSettingValue(FLOW_RECLAMOS, "REC_WS_FACTURAS_NAMESPACE");
         $soapAction = $handlerFlowSettingsCore->getSettingValue(FLOW_RECLAMOS, "REC_WS_FACTURAS_SOAPACTION");
         $params = array("Ccust" => $codigo_cliente, "Nfactura" => "000-000-000000000");
         $datosCliente = $handlerWebServiceCore->callWebService($wsdl, $operation, $namespace, $soapAction, $params, true);
     }
     if ($datosCliente) {
         if ($this->isTestEnv()) {
             $datosCliente = $datosCliente["Longvarchar"]["infoFactura"];
             if ($datosCliente["identificacionComprador"] != "") {
                 $returnData = ["mensaje" => '', "cliente" => ["identificacion" => $datosCliente["identificacionComprador"], "codigo" => $datosCliente["codigoCliente"], "nombre" => $datosCliente["razonSocialComprador"], "pais" => $datosCliente["pais"], "direccion" => $datosCliente["direccion"], "email" => $datosCliente["email"], "telefono" => $datosCliente["telefono"]]];
                 $codigo_cliente = $datosCliente["codigoCliente"];
             } else {
                 $returnData = ["mensaje" => 'Cliente no existe', "cliente" => null];
             }
         } else {
             $datosCliente = json_decode($datosCliente["Longvarchar"])->infoFactura;
             if ($datosCliente->identificacionComprador != "") {
                 $returnData = ["mensaje" => '', "cliente" => ["identificacion" => $datosCliente->identificacionComprador, "codigo" => $datosCliente->codigoCliente, "nombre" => $datosCliente->razonSocialComprador, "pais" => $datosCliente->pais, "direccion" => $datosCliente->direccion, "email" => $datosCliente->email, "telefono" => $datosCliente->telefono]];
                 $codigo_cliente = $datosCliente->codigoCliente;
             } else {
                 $returnData = ["mensaje" => 'Cliente no existe', "cliente" => null];
             }
         }
         // Traer datos de contacto si el cliente existe
         $returnData['contacto'] = ['nombre' => '', 'telefono' => '', 'email' => ''];
         if ($returnData['mensaje'] == '') {
             $ultimo_reclamo = Reclamo::where('cliente_codigo', $codigo_cliente)->orderBy('id', 'DESC')->first();
             if ($ultimo_reclamo) {
                 $returnData['contacto'] = ['nombre' => $ultimo_reclamo->contacto_nombre, 'telefono' => $ultimo_reclamo->contacto_telefono, 'email' => $ultimo_reclamo->contacto_email];
             }
         }
     } else {
         $returnData = ["mensaje" => 'No se puede establecer comunicación con BPCS', "cliente" => null, "contacto" => ''];
     }
     return $returnData;
 }
 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;
 }
Пример #4
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;
}
Пример #5
0
 public function getResults()
 {
     $input = Request::createFromGlobals();
     // Tomar clases
     $clases = Reclamo::orderBy('reclamo_clase')->lists('reclamo_clase');
     $clases = $clases->unique();
     // Tomar regiones
     $regiones = Region::all();
     // Get unfiltered requests
     $reclamos = Reclamo::where('id', '>', 0);
     // Apply filters
     $reclamos = $this->applyFilters($reclamos);
     $reclamos = $reclamos->get();
     $records = [];
     foreach ($clases as $clase) {
         $obj_clase = Clase::find($clase);
         foreach ($regiones as $region) {
             $cliente_reclamos = $reclamos->filter(function ($reclamo) use($clase, $region) {
                 return $reclamo->reclamo_clase == $clase && $reclamo->reclamo_region == $region->id;
             });
             $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) {
                 $records[] = ['nombre' => $obj_clase->nombre . ' - ' . $region->nombre, '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;
 }
Пример #6
0
 /**
  * Initialize data
  */
 public function getInitialData()
 {
     if (isset($this->task->task_request)) {
         $this->reclamo = Reclamo::where('ef_id', $this->task->task_request)->first();
     }
 }