public async Task <PlanCompVM> Handle(CreateLevTareaCommand request, CancellationToken cancellationToken)
            {
                PlanCompVM planVM = new PlanCompVM();
                TFile      file;
                var        cabeceraDTO = IService.imgUpload(request.File);

                int    codAccion  = cabeceraDTO.codAccion;
                string codPersona = cabeceraDTO.codPersona;

                var validandoRespLevTarea = _context.TResponsable.Where(i => i.CodAccion == codAccion && i.CodPersona == codPersona && i.Estado);


                if (validandoRespLevTarea.Count() > 0)
                {
                    TLevantamientoPlan levan = new TLevantamientoPlan();
                    levan.CodAccion  = codAccion;
                    levan.CodPersona = codPersona;
                    //lev.Correlativo = cabeceraDTO.correlativo;
                    levan.Descripcion      = cabeceraDTO.descripcion;
                    levan.Fecha            = cabeceraDTO.fecha;
                    levan.PorcentajeAvance = cabeceraDTO.porcentajeAvance;
                    levan.Rechazado        = false;
                    //levan.Creado = DateTime.Now;
                    //levan.CreadoPor = "admin";
                    //levan.Modificado = DateTime.Now;
                    //levan.ModificadoPor = "admin";

                    int verificador       = _context.TLevantamientoPlan.Count();
                    var ultCodCorrelativo = 1;
                    if (verificador != 0)
                    {
                        ultCodCorrelativo = _context.TLevantamientoPlan.Max(p => p.Correlativo) + 1;
                    }
                    IFormFileCollection files = request.File.Files;
                    foreach (var fil in files)
                    {
                        file = new TFile();
                        if (fil.Length < 0)
                        {
                            throw new GeneralFailureException("Imagen no valida");
                        }
                        file.ArchivoData = trans(fil);
                        file.TipoArchivo = fil.ContentType;
                        file.Estado      = true;
                        file.Nombre      = fil.FileName;
                        file.Descripcion = fil.Name;
                        //file.NroDocReferencia = ultCodCorrelativo.ToString();
                        ////file.NroSubDocReferencia = cabeceraDTO.nroSubDocReferencia;
                        file.NroDocReferencia    = codAccion.ToString();
                        file.NroSubDocReferencia = ultCodCorrelativo.ToString();
                        file.CodTablaRef         = "TACME";
                        _context.TFile.Add(file);
                    }
                    _context.TLevantamientoPlan.Add(levan);
                    await _context.SaveChangesAsync(cancellationToken);

                    var planAccionList = _context.TAccion.Include(i => i.RespPlanAccion).FirstOrDefault(i => i.CodAccion == codAccion && i.Estado);

                    //PlanRespVM plan = planAccionList.AsQueryable()
                    //.ProjectTo<PlanRespVM>(_mapper.ConfigurationProvider)
                    //.ToList().First();
                    PlanRespVM plan = new PlanRespVM();
                    plan.codAccion = planAccionList.CodAccion;

                    ResponsablesDto planRespDto;
                    foreach (var it in planAccionList.RespPlanAccion)
                    {
                        if (it.Estado)
                        {
                            var datos = _context.TLevantamientoPlan.Where(i => i.CodAccion == it.CodAccion && i.CodPersona == it.CodPersona && i.Estado);
                            planRespDto                 = new ResponsablesDto();
                            planRespDto.codAccion       = it.CodAccion;
                            planRespDto.codPersona      = it.CodPersona;
                            planRespDto.porcentajeMayor = 0;
                            planRespDto.estado          = it.Estado;
                            if (datos.Count() > 0)
                            {
                                var max = datos.Max(i => i.PorcentajeAvance);
                                planRespDto.porcentajeMayor = max;
                            }

                            PersonaVM respVM = new PersonaVM();

                            if (!String.IsNullOrEmpty(it.CodPersona))
                            {
                                //respVM = await _persons.RequestNombApellidos(it.CodPersona);
                                respVM = await _mediator.Send(new GetPersonaQuery()
                                {
                                    CodPersona = it.CodPersona
                                });
                            }
                            if (respVM != null)
                            {
                                planRespDto.nombres         = respVM.Nombres;
                                planRespDto.apellidoPaterno = respVM.ApellidoPaterno;
                                planRespDto.apellidoMaterno = respVM.ApellidoMaterno;
                            }
                            else
                            {
                                planRespDto.nombres         = "";
                                planRespDto.apellidoPaterno = "";
                                planRespDto.apellidoMaterno = "";
                            }

                            plan.RespPlanAccion.Add(planRespDto);
                        }
                    }

                    var sumaDiv = (plan.RespPlanAccion.Sum(i => i.porcentajeMayor) / plan.RespPlanAccion.Count());
                    var accion  = _context.TAccion.FirstOrDefault(i => i.CodAccion == codAccion && i.Estado);
                    //double sumatoria = 0;
                    if (sumaDiv > 0 && sumaDiv < 100)
                    {
                        accion.CodEstadoAccion = "03";
                    }

                    else if (sumaDiv >= 100)
                    {
                        accion.CodEstadoAccion = "02";
                    }

                    else
                    {
                        accion.CodEstadoAccion = "01";
                    }

                    plan.codEstadoAccion = accion.CodEstadoAccion;
                    _context.TAccion.Update(accion);
                    await _context.SaveChangesAsync(cancellationToken);

                    LevTareasFilesVM levTareasVM;
                    var levs = _context.TLevantamientoPlan.Where(i => i.CodAccion == codAccion && i.Estado);

                    List <String> codPersonas;
                    List <TFile>  result;
                    foreach (var item in levs)
                    {
                        result      = new List <TFile>();
                        codPersonas = new List <String>();
                        codPersonas.Add(item.CodPersona);
                        //List<String> nombPerson = await _persons.Request(codPersonas);
                        List <String> nombPerson = await _mediator.Send(new GetCode2NameQuery()
                        {
                            data = codPersonas
                        });

                        levTareasVM                  = new LevTareasFilesVM();
                        levTareasVM.codAccion        = item.CodAccion;
                        levTareasVM.codPersona       = item.CodPersona;
                        levTareasVM.correlativo      = item.Correlativo;
                        levTareasVM.descripcion      = item.Descripcion;
                        levTareasVM.estado           = item.Estado;
                        levTareasVM.fecha            = item.Fecha;
                        levTareasVM.porcentajeAvance = item.PorcentajeAvance;
                        levTareasVM.nombres          = "";
                        levTareasVM.Rechazado        = item.Rechazado;
                        if (nombPerson.Count != 0)
                        {
                            levTareasVM.nombres = nombPerson[0];
                        }
                        //result = _context.TFile.Where(i => i.NroDocReferencia == item.Correlativo.ToString()).ToList();
                        result = _context.TFile.Where(i => i.NroDocReferencia == item.CodAccion.ToString() && i.NroSubDocReferencia == item.Correlativo.ToString()).ToList();

                        FilesDto filesDto;

                        foreach (var it in result)
                        {
                            if (item.Estado == true)
                            {
                                filesDto = new FilesDto();

                                filesDto.size = it.ArchivoData.Length;
                                filesDto.correlativoArchivos = it.CorrelativoArchivos;
                                filesDto.descripcion         = it.Descripcion;
                                filesDto.grupoPertenece      = it.GrupoPertenece;
                                filesDto.nombre              = it.Nombre;
                                filesDto.nroDocReferencia    = it.NroDocReferencia;
                                filesDto.nroSubDocReferencia = it.NroSubDocReferencia;
                                filesDto.tipoArchivo         = it.TipoArchivo;
                                filesDto.estado              = it.Estado;
                                levTareasVM.files.Add(filesDto);
                            }
                        }
                        plan.registros.Add(levTareasVM);
                    }
                    plan.count = plan.registros.Count;
                    planVM.plan.Add(plan);
                    return(planVM);
                }
                else
                {
                    throw new GeneralFailureException("ERROR !! su levantamiento de tarea no esta ligado resposable !!");
                }
            }
            public async Task <Unit> Handle(UpdatePlanAccionCommand request, CancellationToken cancellationToken)
            {
                IList <PlanVM> planesAccion = new List <PlanVM>();

                planesAccion = request.planes;

                //var planAccion = planesAccion.AsQueryable()
                //   .ProjectTo<TAccion>(_mapper.ConfigurationProvider)
                //   .ToList();

                IList <ResponsablesDto> respJson;

                foreach (var accionJson in planesAccion)
                {
                    var dataBD = await _context.TAccion.Include(i => i.RespPlanAccion).FirstOrDefaultAsync(i => i.CodAccion == accionJson.codAccion && i.Estado);

                    if (dataBD != null)
                    {
                        dataBD.CodActiRelacionada = accionJson.codActiRelacionada;
                        dataBD.CodAreaHsec        = accionJson.codAreaHsec;
                        dataBD.FechaSolicitud     = accionJson.fechaSolicitud;
                        dataBD.CodActiRelacionada = accionJson.codActiRelacionada;
                        dataBD.CodSolicitadoPor   = accionJson.codSolicitadoPor;
                        dataBD.DocReferencia      = accionJson.docReferencia;
                        dataBD.DocSubReferencia   = accionJson.docSubReferencia;
                        dataBD.CodNivelRiesgo     = accionJson.codNivelRiesgo;
                        dataBD.Tarea        = accionJson.tarea;
                        dataBD.FechaInicial = accionJson.fechaInicial;
                        dataBD.FechaFinal   = accionJson.fechaFinal;
                        dataBD.Estado       = accionJson.estado;
                        dataBD.Aprobador    = accionJson.Aprobador;

                        respJson = new List <ResponsablesDto>();
                        respJson = accionJson.RespPlanAccion.ToList();
                        var respBD = dataBD.RespPlanAccion.ToList();
                        var inter  = respJson.Select(x => x.codPersona).Intersect(respBD.Select(x => x.CodPersona)).ToList();
                        var right  = respJson.Select(x => x.codPersona).Except(respBD.Select(x => x.CodPersona)).ToList();
                        var left   = respBD.Select(x => x.CodPersona).Except(respJson.Select(x => x.codPersona)).ToList();

                        foreach (var item in left)
                        {
                            var eliminar     = dataBD.RespPlanAccion.FirstOrDefault(i => i.CodPersona == item && i.CodAccion == dataBD.CodAccion && i.Estado);
                            var eliminarLevS = _context.TLevantamientoPlan.Where(i => i.CodPersona == item && i.CodAccion == dataBD.CodAccion && i.Estado);
                            if (eliminarLevS.Count() > 0)
                            {
                                foreach (var it in eliminarLevS)
                                {
                                    it.Estado = false;
                                    _context.TLevantamientoPlan.Update(it);
                                }
                            }
                            if (eliminar != null)
                            {
                                eliminar.Estado = false;
                                _context.TResponsable.Update(eliminar);
                            }
                        }
                        TResponsable responsable;
                        foreach (var item in right)
                        {
                            responsable = new TResponsable();
                            var agregar = accionJson.RespPlanAccion.FirstOrDefault(i => i.codPersona == item && i.codAccion == dataBD.CodAccion);
                            responsable.CodAccion  = agregar.codAccion;
                            responsable.CodPersona = agregar.codPersona;
                            responsable.Estado     = true;
                            if (responsable.CodAccion != 0 && responsable.CodPersona != null)
                            {
                                TLevantamientoPlan lev;
                                lev                  = new TLevantamientoPlan();
                                lev.CodAccion        = responsable.CodAccion;
                                lev.CodPersona       = responsable.CodPersona;
                                lev.PorcentajeAvance = 0;
                                lev.Estado           = false;
                                _context.TResponsable.Add(responsable);
                                _context.TLevantamientoPlan.Add(lev);
                            }
                        }
                        foreach (var it in inter)
                        {
                            var actualizar = _context.TResponsable.FirstOrDefault(i => i.CodPersona == it && i.CodAccion == dataBD.CodAccion);
                            if (actualizar != null)
                            {
                                actualizar.Estado = true;
                                _context.TResponsable.Update(actualizar);
                            }
                        }
                        _context.TAccion.Update(dataBD);
                        await _context.SaveChangesAsync(cancellationToken);
                    }
                }

                // Actualiza codEstadoAccion de plan de accion dataBD
                foreach (var accion in planesAccion)
                {
                    var dataBD = _context.TAccion.Include(i => i.RespPlanAccion).FirstOrDefault(i => i.CodAccion == accion.codAccion && i.Estado);//.Distinct().OrderBy(x => x);*//*.Skip(0).Take(10);*/

                    if (dataBD != null)
                    {
                        double suma  = 0;
                        int    count = 0;

                        foreach (var it in dataBD.RespPlanAccion)
                        {
                            if (it.Estado)
                            {
                                var levTarea = _context.TLevantamientoPlan.Where(I => I.CodAccion == accion.codAccion && I.CodPersona == it.CodPersona && I.Estado);
                                if (levTarea.Count() > 0)
                                {
                                    var maxLevTarea = levTarea.Max(I => I.PorcentajeAvance);
                                    suma += maxLevTarea;
                                    count++;
                                }
                            }
                        }

                        double sumaDiv = 0;
                        if (count > 0)
                        {
                            sumaDiv = (suma / count);
                        }

                        if (sumaDiv > 0 && sumaDiv < 100)
                        {
                            dataBD.CodEstadoAccion = "03";
                        }

                        else if (sumaDiv >= 100)
                        {
                            dataBD.CodEstadoAccion = "02";
                        }

                        else
                        {
                            dataBD.CodEstadoAccion = "01";
                        }
                        _context.TAccion.Update(dataBD);
                        await _context.SaveChangesAsync(cancellationToken);
                    }
                }
                return(Unit.Value);
            }