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; }
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; }
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 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; }
/** * Initialize data */ public function getInitialData() { if (isset($this->task->task_request)) { $this->reclamo = Reclamo::where('ef_id', $this->task->task_request)->first(); } }