예제 #1
0
 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;
 }
예제 #2
0
 /**
  * Remove the specified resource from storage.
  *
  * @param  int  $id
  * @return Response
  */
 public function destroy($id)
 {
     $record = Clase::find($id)->delete();
     return new AjaxResponse('success', '');
 }
예제 #3
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;
 }
예제 #4
0
 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];
 }
예제 #5
0
 public function getAdditionalData()
 {
     return ['predefined_filters' => $this->getPredefinedFilters(), 'regiones' => Region::all(), 'clases' => Clase::all()];
 }
예제 #6
0
 public function getFormData()
 {
     $input = Request::createFromGlobals();
     $reclamo = Reclamo::find($input->id);
     $clases = Clase::all();
     $regiones = Region::all();
     $problemas = Problema::all();
     if (count($problemas) > 0) {
         $causas = $this->getCausas($problemas->first()->id);
     } else {
         $causas = [];
     }
     $acciones = Accion::all();
     $decisiones = Solucion::all();
     $usuarios = User::noAdmin()->get();
     return ['clases' => $clases, 'regiones' => $regiones, 'problemas' => $problemas, 'causas' => $causas, 'acciones' => $acciones, 'decisiones' => $decisiones, 'usuarios' => $usuarios];
 }