I have a project built with Laravel 5.5 and PHP 7.4, and I am attempting to upload an Excel file using maatwebsite/excel
. However, when I upload it, the following error occurs:
Exception: "LogicException"
File: "/home/gestoriasif/SIIFAPP_WEB/vendor/symfony/http-foundation/File/MimeType/MimeTypeGuesser.php"
Line: 130
Message: "Unable to guess the mime type because no guessers are available (Did you enable the php_fileinfo extension?)."

code:
PersonaController.php:
```
text/x-generic PersonaController.php ( sticky PHP script, ASCII text, with CRLF line terminators )
<?php
namespace RTR\Http\Controllers\Admin\Persona;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;
use Illuminate\Validation\Rule;
use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
use RTR\ExcelExport\ClienteDiasFormato;
use RTR\ExcelExport\PersonaDiasFormato;
use RTR\Filterimport\ClienteDiasRead;
use RTR\Filterimport\PersonaRead;
use RTR\ExcelExport\ClienteRfvFormato;
use RTR\Http\Controllers\Controller;
use Illuminate\Support\Facades\Auth;
use RTR\Http\Resources\listaRecurso;
use RTR\modelos\TCategoria;
use RTR\modelos\TDiasVisita;
use RTR\modelos\TEstatusOrdene;
use RTR\modelos\TLogAuditoria;
use RTR\modelos\TPerfile;
use RTR\modelos\TPersona;
use RTR\modelos\TListanegra;
use RTR\modelos\TGrupopersona;
use RTR\modelos\TPaise;
use RTR\modelos\TTipoActividade;
use RTR\modelos\TTipoIncidente;
use RTR\modelos\TTipoPersona;
use RTR\modelos\TEspecialidade;
use RTR\modelos\TTipoEspecialidade;
use RTR\modelos\TClasePersona;
use RTR\modelos\TRankingCliente;
use RTR\modelos\TPlanificadore;
use RTR\modelos\TCiclo;
use RTR\modelos\TTitulo;
use RTR\modelos\TFrecuenciaVisita;
use RTR\Http\Resources\personaRecurso;
use RTR\Http\Resources\ADMVisita;
use Validator;
use RTR\ExcelExport\PersonaFormato\ClienteFormato;
class PersonaController extends Controller
{
public function __construct()
{
$this->middleware(function ($request, $next) {
$this->user = Auth::user();
return $next($request);
});
}
public function index(Request $request)
{
$Empresa=TPersona::withoutGlobalScopes()
->where('idOperador',$this->user->idOperador)
->where('idgrupo_persona','FABR')
->select(['idOperador','idPersona'])
->get();
$fabrica = $request->session()->get('user.teams');
return view('Admin.usuarios.home_personas',compact('Empresa','fabrica'));
}
...
public function LoadExcel(Request $request)
{
$validator = Validator::make($request->all(),
[
'FormatoPersona' => 'required|mimes:xlsx|max:1024',
'id' => 'required|exists:t_personas,idPersona'
]
);
if($validator->fails()){
return response()->json($validator->errors()->all(), 400);
}
$user = TPersona::where('idFabricante',$request->id)->first();
$file = $request->file('FormatoPersona');
$path = $file->getRealPath();
$filter = new PersonaRead();
$reader= IOFactory::createReaderForFile($path);
$reader->setReadFilter($filter);
$reader->setReadDataOnly(true);
$excel = $reader->load($path);
//$hoja= $excel->getSheetByName('TablaPrincipal');
$hoja = $excel->getSheetByName('TablaPrincipal');
$cantrow = $hoja->getCellCollection()->getHighestRow();
$data = $hoja->rangeToArray(
'A2:AN'.$cantrow,
NULL,
TRUE,
TRUE,
TRUE
);
//dd($data);
$errores = [];
//dd($data);
$valArray = array(
'A' => 'required',
'D' => 'nullable|exists:t_cadenas,id',
'E' => 'required|exists:t_paises,idpais',
'F' => 'string|max:3|nullable',// falta clave foranea con t_idiomas
'G' => 'string|max:3|nullable',//falta clave foranea con t_monedas
'H' => 'required|exists:t_tipo_personas,id',
'L' => 'required',
'M' => 'required|exists:t_grupopersonas,idgrupo_persona',
'N' => 'nullable|exists:t_clase_personas,id',
'P' => 'required|string|max:40',
'Q' => 'required|string|max:80',
'R' => 'required',
'T' => 'nullable|format_date:"Y-m-d"',
'U' => 'nullable|string|max:20',
'V' => 'string|max:20|nullable',
'W' => 'string|max:191|nullable',
'X' => 'exists:t_titulos,id|nullable',
'AA' => 'string|max:255|nullable',
'AB' => 'required|exists:t_estados,idestado',
'AC' => 'nullable|exists:t_ciudades,idCiudad',
'AD' => 'string|max:10|nullable',
'AE' => 'string|max:30|nullable',
'AF' => 'string|max:20|nullable',
'AG' => 'string|max:30|nullable',
'AH' => 'string|max:20|nullable',
'AI' => 'string|max:20|nullable',//coordenadas_a
'AJ' => 'string|max:20|nullable',//coordenadas_l
'AK' => 'string|max:120|nullable',
'AL' => 'string|max:20|nullable',
'AM' => 'string|max:191|nullable'
);
$rfvArr = array(
'C' => 'required|exists:t_personas,idPersona',
'D' => 'nullable|exists:t_cadenas,id',
'S' => 'required|string|max:1',
'Y' => 'required|exists:t_ciclos,id',
//campos no requeridos
'B' => 'nullable|string|exists:t_empresa_grupo,id',
'I' => 'nullable|exists:t_tipo_especialidad,idespecialidad',
'J' => 'nullable|exists:t_especialidades,id',
'K' => 'nullable|string|exists:t_sub_especialidad,id',
'N' => 'nullable|exists:t_clase_personas,id',
'O' => 'nullable|exists:t_ranking_clientes,id',
'Z' => 'nullable|exists:t_frecuencia_visitas,idfrecuencia',
'AN'=> 'nullable'
);
$cliArr = array(
'B' => 'nullable|exists:t_empresa_grupo,id',
'I' => 'required|exists:t_tipo_especialidad,idespecialidad',
'J' => 'required|exists:t_especialidades,id',
'K' => 'required|exists:t_sub_especialidad,id',
'O' => 'required|exists:t_ranking_clientes,id',
'Z' => 'required|exists:t_frecuencia_visitas,idfrecuencia',
//campos no requeridos
'C' => 'exists:t_personas,idPersona|nullable',
'S' => 'string|max:1|nullable',
'Y' => 'integer|exists:t_ciclos,id|nullable',
'AN' => 'numeric|max:100|nullable'
);
$mayArr = array(
'B' => 'nullable|exists:t_empresa_grupo,id',
'I' => 'required|exists:t_tipo_especialidad,idespecialidad',
'J' => 'required|exists:t_especialidades,id',
'K' => 'required|exists:t_sub_especialidad,id',
//campos no requeridos
'N' => 'nullable|exists:t_clase_personas,id',
'O' => 'exists:t_ranking_clientes,id|nullable',
'Z' => 'exists:t_frecuencia_visitas,idfrecuencia|nullable',
'C' => 'exists:t_personas,idPersona|nullable',
'S' => 'string|max:1|nullable',
'Y' => 'exists:t_ciclos,id|nullable',
'AN' => 'numeric|max:100|nullable'
);
foreach ($data as $row => $record) {
switch($record['M'])
{
case 'MAY':
$val = array_merge($valArray,$mayArr);
break;
case 'RFV':
$val = array_merge($valArray,$rfvArr);
break;
case 'CLI':
$val = array_merge($valArray,$cliArr);
break;
}
$validate = Validator::make($record, $val);
if($validate->fails()){
array_push($errores,['error'=>'Error en registro '.$row,'details'=>$validate->errors()->all()]);
}else{
$find = TPersona::withoutGlobalScopes()->where('idOperador',Auth::user()->idOperador)
->where('idFabricante',$request->id)
->where('idPersona',$record['A'])->first();
if($find){
array_push($errores,['error'=>'Error en registro '.$row,'details'=>['Registro ya existente']]);
}else{
if($record['M']=='CLI' || $record['M']=='MAY'){
$perfil=null;
}else{
$perfil=TPerfile::where('alias',$record['M'])->first()->id;
}
TPersona::create([
'idOperador'=>Auth::user()->idOperador,
'idFabricante'=>$request->id,
'idPersona'=>$record['A'],
'idempresa_Grupo'=>$record['B'],
'idsupervisor'=>$record['C'],
'idcadenas'=>$record['D'],
'idpais'=>$record['E'],
'ididioma'=>$record['F'],
'idmoneda'=>$record['G'],
'cod_tipo_persona'=>$record['H'],
'idespecialidad'=>$record['I'],
'idperfil'=>$perfil,
'idactividad_negocio'=>$record['J'],
'idsubespecialidad'=>$record['K'],
'documento_identidad'=>$record['L'],
'idgrupo_persona'=>$record['M'],
'idclase_persona'=>$record['N'],
'idranking'=>$record['O'],
'nombre_persona'=>$record['P'],
'apellido_persona'=>$record['Q'],
'nombre_completo_razon_social'=>$record['R'],
'sexo_genero_persona'=>$record['S'],
'fecha_nacimiento_registro'=>$record['T'],
'telefono_persona'=>$record['U'],
'movil_persona'=>$record['V'],
'email_persona'=>$record['W'],
'idtitulo'=>$record['X'],
'idciclos'=>$record['Y'],
'idfrecuencia'=>$record['Z'],
'direccion_domicilio'=>$record['AA'],
'idestado'=>$record['AB'],
'idciudad'=>$record['AC'],
'zona_postal'=>$record['AD'],
'banco_persona'=>$record['AE'],
'cuenta_principal_persona'=>$record['AF'],
'banco_persona_internacional'=>$record['AG'],
'cuenta_internacional_persona'=>$record['AH'],
'coordenadas_l'=>$record['AI'],
'coordenadas_a'=>$record['AJ'],
'persona_contacto'=>$record['AK'],
'telefono_contacto'=>$record['AL'],
'email_contacto'=>$record['AM'],
'descuento'=>(float)$record['AN'],
'idestatus'=>1,
]);
}
}
}
return response()->json(['error'=>$errores,'status'=> $errores ? 400 : 201]);
}
...
}
```
Monitor.blade.php:
```
@extends('layouts.main')
@section('titulo')
Monitor
@stop
@section('breadcrumb')
<li><a href="#">Procesos</a></li>
<li>Monitor de Archivos</li>
</ul>
@stop
@section('Content')
<div class="jumbotron rounded">
<monitor :empresas="{{$empresas}}"></monitor>
</div>
@endsection
```
monitor.vue:
```
<template>
<div id="monitor">
<div class="row">
<div class="col-md-4">
<v-select
:items="empresas"
v-model="empresa"
label="Empresa"
single-line
item-text="nombre_completo_razon_social"
item-value="idPersona"
return-object
dense
></v-select>
</div>
</div>
<v-dialog v-model="dialog" max-width="800px" style="max-height:100% !important">
<v-card>
<v-card-title>
<span class="headline">Errores de Archivo</span>
</v-card-title>
<hr />
<v-card-text>
<v-container grid-list-md>
<v-data-table
:headers="headers"
:items="errores"
class="elevation-1"
no-results-text="No se encuentra esta persona"
no-data-text="Sin Errores"
:rows-per-page-items = '[25,50,100,{"text":"All","value":-1}]'
>
<template slot="items" slot-scope="props">
<td >{{ props.item.error}}</td>
<td >{{ props.item.details[0]}}</td>
</template>
</v-data-table>
</v-container>
</v-card-text>
<v-card-actions>
<v-spacer></v-spacer>
<v-btn class="btn2 btn-w accent" flat @click.native="close">Cancelar</v-btn>
</v-card-actions>
</v-card>
</v-dialog>
<div class="row my-4">
<div class="col-12">
<ul class="nav nav-tabs justify-content-center" id="myTab" role="tablist">
<li class="nav-item">
<a class="nav-link active" id="home-tab" data-toggle="tab" href="#home" role="tab" aria-controls="home" aria-selected="true">Productos</a>
</li>
<li class="nav-item">
<a class="nav-link" id="profile-tab" data-toggle="tab" href="#profile" role="tab" aria-controls="profile" aria-selected="false">Personas</a>
</li>
<li class="nav-item">
<a class="nav-link" id="geografico-tab" data-toggle="tab" href="#geografico" role="tab" aria-controls="geografico" aria-selected="false">Geografico</a>
</li>
</ul>
</div>
<div class="tab-content" id="myTabContent">
<div class="tab-pane fade show active" id="home" role="tabpanel" aria-labelledby="home-tab">
<br>
<div class="border border-dark">
<div class="row px-2 py-0"><!--
<div class="col-sm-4 col-md-2 align-self-center justify-content-center">
<p class="font-bold text-center">Archivos de Categorias:</p>
<v-btn
color="accent"
outline
class="white--text float-right pt-1 px-2"
@click="formato('CategoriaPFormato')"
:disabled="!empresa"
>
Descargar
<v-icon right dark>cloud_download</v-icon>
</v-btn>
</div>
<div class="col-sm-8 col-md-4 border-right border-dark">
<vue-dropzone :options="dropzoneOptionsPCategoria" id="Pcategoria" ref="DPcategoria" class="my-3" v-on:vdropzone-sending="sendingEvent" v-on:vdropzone-success="succesEvent">
</vue-dropzone>
</div>
<div class="col-sm-4 col-md-2 align-self-center justify-content-center">
<p class="font-bold text-center">Archivos de linea de productos:</p>
<v-btn
color="accent"
outline
class="white--text float-right pt-1 px-2"
@click="formato('LineaFormato')"
:disabled="!empresa"
>
Descargar
<v-icon right dark>cloud_download</v-icon>
</v-btn>
</div>
<div class="col-sm-8 col-md-4">
<vue-dropzone :options="dropzoneOptionsLinea" id="Linea" ref="Dlinea" class="my-3" v-on:vdropzone-sending="sendingEvent" v-on:vdropzone-success="succesEvent">
</vue-dropzone>
</div>
<div class="col-sm-4 col-md-2 align-self-center justify-content-center">
<p class="font-bold text-center">Archivos de Tipos de productos:</p>
<v-btn
color="accent"
outline
class="white--text float-right pt-1 px-2"
@click="formato('TipoProductoFormato')"
:disabled="!empresa"
>
<div class="d-sm-none d-md-block">Descargar</div>
<v-icon right dark>cloud_download</v-icon>
</v-btn>
</div>
<div class="col-sm-8 col-md-4 border-right border-dark">
<vue-dropzone :options="dropzoneOptionsPtipo" id="Ptipo" ref="DPtipo" class="my-3" v-on:vdropzone-sending="sendingEvent" v-on:vdropzone-success="succesEvent">
</vue-dropzone>
</div> -->
<div class="col-sm-4 col-md-2 align-self-center justify-content-center">
<p class="font-bold text-center">Archivos de productos:</p>
<v-btn
color="accent"
outline
class="white--text float-right pt-1 px-2"
@click="formato('ProductoFormato')"
:disabled="!empresa"
>
Descargar
<v-icon right dark>cloud_download</v-icon>
</v-btn>
</div>
<div class="col-sm-8 col-md-4">
<vue-dropzone :options="dropzoneOptionsProducto" id="Producto" ref="Dproducto" class="my-3" v-on:vdropzone-sending="sendingEvent" v-on:vdropzone-success="succesEvent">
</vue-dropzone>
</div>
<div class="col-sm-4 col-md-2 align-self-center justify-content-center">
<p class="font-bold text-center">Archivos de Materiales para clientes:</p>
<v-btn
color="accent"
outline
class="white--text float-right pt-1 px-2"
@click="formato('CliMatFormato')"
:disabled="!empresa"
>
Descargar
<v-icon right dark>cloud_download</v-icon>
</v-btn>
</div>
<div class="col-sm-8 col-md-4">
<vue-dropzone :options="dropzoneCliMat" id="climat" ref="Dclimat" class="my-3" v-on:vdropzone-sending="sendingEvent" v-on:vdropzone-success="succesEvent">
</vue-dropzone>
</div>
</div>
</div>
</div>
<div class="tab-pane fade" id="profile" role="tabpanel" aria-labelledby="profile-tab">
<br>
<div class="border border-dark">
<div class="row px-2 py-0">
<div class="col-sm-4 col-md-2 align-self-center justify-content-center">
<p class="font-bold text-center"> Archivos de RFV, Mayoristas o Clientes. </p>
<v-btn
color="accent"
outline
class="white--text float-right pt-1 px-2"
@click="formato('PersonaFormato')"
:disabled="!empresa"
>
Descargar
<v-icon right dark>cloud_download</v-icon>
</v-btn>
</div>
<div class="col-sm-8 col-md-4">
<vue-dropzone :options="dropzoneOptionsPersona" id="Persona" ref="Dpersona" class="my-3" v-on:vdropzone-sending="sendingEvent" v-on:vdropzone-success="succesEvent">
</vue-dropzone>
</div>
<div class="col-sm-4 col-md-2 align-self-center justify-content-center">
<p class="font-bold text-center">Archivos de Clientes por RFV:</p>
<v-btn
color="accent"
outline
class="white--text float-right pt-1 px-2"
@click="formato('CliRfvFormato')"
:disabled="!empresa"
>
<div class="d-sm-none d-md-block">Descargar</div>
<v-icon right dark>cloud_download</v-icon>
</v-btn>
</div>
<div class="col-sm-8 col-md-4 border-right border-dark">
<vue-dropzone
:options="dropzoneCLIRFV"
id="clirfv"
ref="Dclirfv"
class="my-3"
v-on:vdropzone-sending="sendingEvent"
v-on:vdropzone-success="succesEvent"
>
</vue-dropzone>
</div>
<!--CliMatFormato ProductoFormato -->
<div class="col-sm-4 col-md-2 align-self-center justify-content-center">
<p class="font-bold text-center"> Archivos de dias de visita al cliente. </p>
<v-btn
color="accent"
outline
class="white--text float-right pt-1 px-2"
@click="formato('ClienteDiasFormato')"
:disabled="!empresa"
>
Descargar
<v-icon right dark>cloud_download</v-icon>
</v-btn>
</div>
<div class="col-sm-8 col-md-4">
<vue-dropzone :options="dropzoneOptionsDisponible" id="Persona" ref="Ddisponible" class="my-3" v-on:vdropzone-sending="sendingEvent" v-on:vdropzone-success="succesEvent">
</vue-dropzone>
</div>
</div>
</div>
</div>
<div class="tab-pane fade" id="geografico" role="tabpanel" aria-labelledby="geografico-tab">
<br>
<div class="border border-dark ">
<div class="row px-2 py-0">
<div class="col-sm-4 col-md-2 align-self-center justify-content-center">
<p class="font-bold text-center">Archivos de Zonas:</p>
<v-btn
color="accent"
outline
class="white--text float-right pt-1 px-2"
@click="formato('ZonaFormato')"
:disabled="!empresa"
>
Descargar
<v-icon right dark>cloud_download</v-icon>
</v-btn>
</div>
<div class="col-sm-8 col-md-4 border-right border-dark">
<vue-dropzone :options="dropzoneOptionsZona" id="zona" ref="Dzona" class="my-3" v-on:vdropzone-sending="sendingEvent" v-on:vdropzone-success="succesEvent">
</vue-dropzone>
</div>
<div class="col-sm-4 col-md-2 align-self-center justify-content-center">
<p class="font-bold text-center">Archivos de Rutas:</p>
<v-btn
color="accent"
outline
class="white--text float-right pt-1 px-2"
@click="formato('RutaFormato')"
:disabled="!empresa"
>
Descargar
<v-icon right dark>cloud_download</v-icon>
</v-btn>
</div>
<div class="col-sm-8 col-md-4 ">
<vue-dropzone :options="dropzoneOptionsRuta" id="ruta" ref="Druta" class="my-3" v-on:vdropzone-sending="sendingEvent" v-on:vdropzone-success="succesEvent">
</vue-dropzone>
</div>
<div class="col-sm-4 col-md-2 align-self-center justify-content-center">
<p class="font-bold text-center">Archivos de Cadenas:</p>
<v-btn
color="accent"
outline
class="white--text float-right pt-1 px-2"
@click="formato('CadenaFormato')"
:disabled="!empresa"
>
Descargar
<v-icon right dark>cloud_download</v-icon>
</v-btn>
</div>
<div class="col-sm-8 col-md-4 border-right border-dark">
<vue-dropzone :options="dropzoneOptionsCadena" id="cadena" ref="Dcadena" class="my-3" v-on:vdropzone-sending="sendingEvent" v-on:vdropzone-success="succesEvent">
</vue-dropzone>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
export default {
props : {
empresas: {
type: Array,
default: function () {
return []
}
}
},
watch:{
empresa(val, oldval){
if(val){
this.$refs.Dzona.enable();
this.$refs.Druta.enable();
this.$refs.Dcadena.enable();
//this.$refs.DPcategoria.enable();
//this.$refs.Dlinea.enable();
//this.$refs.DPtipo.enable();
this.$refs.Dproducto.enable();
this.$refs.Dclirfv.enable();
this.$refs.Dclimat.enable();
this.$refs.Dpersona.enable();
this.$refs.Ddisponible.enable();
}
}
},
data () {
return {
empresa: null,
dialog:false,
errores:[],
headers:[
{
text: 'Error',
align: 'left',
sortable: false,
value: ''
},
{ text: 'Detalle', sortable: false, value: '' },
],
dropzoneOptionsZona: {
url: '/procesos/monitor/LoadZona',
method: 'post',
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},
paramName: 'FormatoZona',
addRemoveLinks: true,
maxFilesize: 1,
maxFiles: 1,
uploadMultiple: false,
parallelUploads: 1,
dictDefaultMessage: "<i class='fa fa-file-excel siif--text fa-2x'></i> Click o Arrastra tu excel aquí para subirlos",
acceptedFiles: ".xlsx",
maxfilesexceeded: function(file) {
this.removeAllFiles();
this.addFile(file);
}
},
dropzoneOptionsRuta: {
url: '/procesos/monitor/LoadRuta',
method: 'post',
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},
paramName: 'FormatoRuta',
addRemoveLinks: true,
maxFilesize: 1,
maxFiles: 1,
uploadMultiple: false,
parallelUploads: 1,
dictDefaultMessage: "<i class='fa fa-file-excel siif--text fa-2x'></i> Click o Arrastra tu excel aquí para subirlos",
acceptedFiles: ".xlsx",
maxfilesexceeded: function(file) {
this.removeAllFiles();
this.addFile(file);
}
},
dropzoneOptionsCadena: {
url: '/procesos/monitor/LoadCadena',
method: 'post',
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},
paramName: 'FormatoCadena',
addRemoveLinks: true,
maxFilesize: 1,
maxFiles: 1,
uploadMultiple: false,
parallelUploads: 1,
dictDefaultMessage: "<i class='fa fa-file-excel siif--text fa-2x'></i> Click o Arrastra tu excel aquí para subirlos",
acceptedFiles: ".xlsx",
maxfilesexceeded: function(file) {
this.removeAllFiles();
this.addFile(file);
}
},
dropzoneOptionsPCategoria: {
addRemoveLinks: true,
dictDefaultMessage: "<i class='fa fa-file-excel siif--text fa-2x'></i> Click o Arrastra tu excel aquí para subirlos",
acceptedFiles: ".xlsx",
thumbnailHeight: 80,
resizeHeight : 80
},
dropzoneOptionsLinea: {
addRemoveLinks: true,
dictDefaultMessage: "<i class='fa fa-file-excel siif--text fa-2x'></i> Click o Arrastra tu excel aquí para subirlos",
acceptedFiles: ".xlsx",
thumbnailHeight: 80,
resizeHeight : 80
},
dropzoneOptionsPtipo: {
addRemoveLinks: true,
dictDefaultMessage: "<i class='fa fa-file-excel siif--text fa-2x'></i> Click o Arrastra tu excel aquí para subirlos",
acceptedFiles: ".xlsx",
thumbnailHeight: 80,
resizeHeight : 80
},
dropzoneOptionsProducto: {
url: '/procesos/monitor/LoadProducto',
method: 'post',
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},
paramName: 'FormatoProducto',
addRemoveLinks: true,
maxFilesize: 1,
maxFiles: 1,
uploadMultiple: false,
parallelUploads: 1,
dictDefaultMessage: "<i class='fa fa-file-excel siif--text fa-2x'></i> Click o Arrastra tu excel aquí para subirlos",
acceptedFiles: ".xlsx",
maxfilesexceeded: function(file) {
this.removeAllFiles();
this.addFile(file);
}
},
dropzoneCLIRFV: {
url: '/procesos/monitor/LoadCliRfv',
method: 'post',
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},
paramName: 'FormatoCliRfv',
addRemoveLinks: true,
maxFilesize: 1,
maxFiles: 1,
uploadMultiple: false,
parallelUploads: 1,
dictDefaultMessage: "<i class='fa fa-file-excel siif--text fa-2x'></i> Click o Arrastra tu excel aquí para subirlos",
acceptedFiles: ".xlsx",
maxfilesexceeded: function(file) {
this.removeAllFiles();
this.addFile(file);
}
},
dropzoneCliMat: {
url: '/procesos/monitor/LoadCliMat',
method: 'post',
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},
paramName: 'FormatoCliMat',
addRemoveLinks: true,
maxFilesize: 1,
maxFiles: 1,
uploadMultiple: false,
parallelUploads: 1,
dictDefaultMessage: "<i class='fa fa-file-excel siif--text fa-2x'></i> Click o Arrastra tu excel aquí para subirlos",
acceptedFiles: ".xlsx",
maxfilesexceeded: function(file) {
this.removeAllFiles();
this.addFile(file);
}
},
dropzoneOptionsPersona: {
url: '/procesos/monitor/LoadPersona',
method: 'post',
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},
paramName: 'FormatoPersona',
addRemoveLinks: true,
maxFilesize: 1,
maxFiles: 1,
uploadMultiple: false,
parallelUploads: 1,
dictDefaultMessage: "<i class='fa fa-file-excel siif--text fa-2x'></i> Click o Arrastra tu excel aquí para subirlos",
acceptedFiles: ".xlsx",
maxfilesexceeded: function(file) {
this.removeAllFiles();
this.addFile(file);
}
},
dropzoneOptionsDisponible: {
url: '/procesos/monitor/LoadClienteDisponible',
method: 'post',
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},
paramName: 'ClienteDiasFormato',
addRemoveLinks: true,
maxFilesize: 1,
maxFiles: 1,
uploadMultiple: false,
parallelUploads: 1,
dictDefaultMessage: "<i class='fa fa-file-excel siif--text fa-2x'></i> Click o Arrastra tu excel aquí para subirlos",
acceptedFiles: ".xlsx",
maxfilesexceeded: function(file) {
this.removeAllFiles();
this.addFile(file);
}
}
}
},
mounted : function () {
this.$refs.Dzona.disable();
this.$refs.Druta.disable();
this.$refs.Dcadena.disable();
//this.$refs.DPcategoria.disable();
//this.$refs.Dlinea.disable();
//this.$refs.DPtipo.disable();
this.$refs.Dproducto.disable();
this.$refs.Dclirfv.disable();
this.$refs.Dclimat.disable();
this.$refs.Dpersona.disable();
this.$refs.Ddisponible.disable();
},
methods: {
activegeografico() {
this.Module.productos=false;
this.Module.personas=false;
this.Module.geografico=true;
},
activeproductos() {
this.Module.geografico=false;
this.Module.personas=false;
this.Module.productos=true;
},
activepersonas() {
this.Module.geografico=false;
this.Module.productos=false;
this.Module.personas=true;
},
formato(filename){
axios({
method:'post',
url:'/procesos/monitor/'+filename,
responseType:'blob',
data: {
'id':this.empresa.idPersona
}
}).then((response)=> {
const url = window.URL.createObjectURL(new Blob([response.data]));
const link = document.createElement('a');
link.href = url;
link.setAttribute('download', filename+'.xlsx');
document.body.appendChild(link);
link.click();
}
);
},
close () {
this.dialog = false;
this.errores=[];
},
sendingEvent (file, xhr, formData) {
formData.append('id', this.empresa.idPersona);
},
succesEvent (file, response){
if(response.status==400){
this.errores=response.error;
this.dialog=true;
}
}
}
}
</script>
<style>
.dropzone {
padding: 5px 20px;
}
.dropzone .dz-preview {
min-height: 100px;
}
.dropzone .dz-preview .dz-details .dz-size {
margin-bottom: 0;
}
.dropzone .dz-preview .dz-progress {
top: 60%;
}
.vue-dropzone .dz-preview .dz-progress .dz-upload {
background: #35cc2f;
}
.dropzone .dz-preview .dz-success-mark svg, .dropzone .dz-preview .dz-error-mark svg {
display: block;
width: 3rem;
height: 3rem;
}
.vue-dropzone .dz-preview .dz-remove {
padding: 3px;
}
.vue-dropzone .dz-preview .dz-image img:not([src]) {
width: 150px;
height: 150px;
}
.btn2{
padding: 0 !important;
}
</style>
```
Comments
1 comment