public async Task <Unit> Handle(UpdateTemaCapacitacionCommand request, CancellationToken cancellationToken)
            {
                var codTemaCapacitaJson = request.VM.codTemaCapacita;
                var busquedaTema        = _context.TTemaCapacitacion.Include(i => i.TemaCapEspecifico).FirstOrDefault(i => i.CodTemaCapacita == codTemaCapacitaJson);

                busquedaTema.CodTemaCapacita = request.VM.codTemaCapacita;
                busquedaTema.CodTipoTema     = request.VM.codTipoTema;
                busquedaTema.CodAreaCapacita = request.VM.codAreaCapacita;
                busquedaTema.Descripcion     = request.VM.descripcion;
                busquedaTema.CompetenciaHs   = request.VM.competenciaHs;
                busquedaTema.CodHha          = request.VM.codHha;
                busquedaTema.Estado          = true;

                IList <UpdateTemaCapacitacionRequestDto> respJson = new List <UpdateTemaCapacitacionRequestDto>();
                var temasCapJson = request.VM.temaCapEspecifico;

                if (temasCapJson.Count() > 0)
                {
                    var respBD = busquedaTema.TemaCapEspecifico.ToList();

                    var inter = temasCapJson.Select(x => x.codPeligro).Intersect(respBD.Select(x => x.CodPeligro)).ToList();
                    var right = temasCapJson.Select(x => x.codPeligro).Except(respBD.Select(x => x.CodPeligro)).ToList();
                    var left  = respBD.Select(x => x.CodPeligro).Except(temasCapJson.Select(x => x.codPeligro)).ToList();

                    // ESTA EN AMBIOS TANTO EN LA BD Y JSON !! POR ELLO ACTUALIZA !!!
                    if (inter != null)
                    {
                        foreach (var codPeligro in inter)
                        {
                            var temaCapBD = respBD.FirstOrDefault(i => i.CodPeligro == codPeligro);
                            if (temaCapBD != null)
                            {
                                temaCapBD.Estado = true;
                                _context.TTemaCapEspecifico.Update(temaCapBD);
                            }
                        }
                    }

                    // ESTA EN EL JSON PERO NO EN LA BD ... POR LO TANDO AGREGA !!
                    if (right != null)
                    {
                        foreach (var CodPeligro in right)
                        {
                            var temaCapJson = temasCapJson.FirstOrDefault(i => i.codPeligro == CodPeligro);
                            if (temaCapJson != null)
                            {
                                var temaCapEntity = new TTemaCapEspecifico();

                                temaCapEntity.CodTemaCapacita  = codTemaCapacitaJson;
                                temaCapEntity.CodPeligro       = temaCapJson.codPeligro;
                                temaCapEntity.CodRiesgo        = temaCapJson.codRiesgo;
                                temaCapEntity.TemaCapacitacion = busquedaTema;
                                temaCapEntity.Estado           = true;
                                _context.TTemaCapEspecifico.Add(temaCapEntity);
                            }
                        }
                    }

                    // ESTA EN LA BD PERO NO EN EL JSON .... POR LO TANTO ELIMINA LOGICAMENTE !!
                    if (left != null)
                    {
                        foreach (var codPeligro in left)
                        {
                            var temaCapBD = respBD.FirstOrDefault(i => i.CodPeligro == codPeligro && i.Estado);
                            if (temaCapBD != null)
                            {
                                temaCapBD.Estado = false;
                                _context.TTemaCapEspecifico.Update(temaCapBD);
                            }
                        }
                    }
                }
                _context.TTemaCapacitacion.Update(busquedaTema);
                await _context.SaveChangesAsync(cancellationToken);

                return(Unit.Value);
            }
Ejemplo n.º 2
0
            public async Task <Unit> Handle(CreateTemaCapacitacionCommand request, CancellationToken cancellationToken)
            {
                var codTipoTema = request.CreateVM.codTipoTema;

                var numDig = "000";

                if (!String.IsNullOrEmpty(codTipoTema))
                {
                    var prefijo = "";
                    if (codTipoTema == "01")
                    {
                        prefijo = "CE";
                    }

                    else if (codTipoTema == "02")
                    {
                        prefijo = "OE";
                    }

                    else if (codTipoTema == "03")
                    {
                        prefijo = "TE";
                    }

                    var numReg = _context.TTemaCapacitacion.Where(I => I.CodTemaCapacita.Substring(0, 2) == prefijo).Count();
                    if (!String.IsNullOrEmpty(prefijo))
                    {
                        var ultNum = 1;
                        if (numReg > 0)
                        {
                            ultNum = int.Parse(_context.TTemaCapacitacion.Where(I => I.CodTemaCapacita.Substring(0, 2) == prefijo).Max(i => i.CodTemaCapacita.Substring(2, i.CodTemaCapacita.Length))) + 1;
                        }
                        var codTemaCapacita = prefijo + numDig.Substring(0, numDig.Length - ultNum.ToString().Length) + ultNum;

                        TTemaCapacitacion tema = new TTemaCapacitacion();

                        var desc    = request.CreateVM.descripcion.Trim();
                        var verDesc = _context.TTemaCapacitacion.Any(i => i.Estado && i.Descripcion.Trim().Equals(desc));

                        if (!verDesc)
                        {
                            tema.CodTemaCapacita = codTemaCapacita;
                            tema.CodTipoTema     = codTipoTema;
                            tema.CodAreaCapacita = request.CreateVM.codAreaCapacita;
                            tema.Descripcion     = request.CreateVM.descripcion;
                            tema.CompetenciaHs   = request.CreateVM.competenciaHs;
                            tema.CodHha          = request.CreateVM.codHha;
                            tema.Estado          = true;

                            var temCapListVM = request.CreateVM.temaCapEspecifico;

                            if (temCapListVM.Count() > 0)
                            {
                                TTemaCapEspecifico tempcap;
                                foreach (var item in temCapListVM)
                                {
                                    tempcap = new TTemaCapEspecifico();
                                    tempcap.CodTemaCapacita = tema.CodTemaCapacita;
                                    tempcap.CodPeligro      = item.codPeligro;
                                    tempcap.CodRiesgo       = item.codRiesgo;
                                    tempcap.Estado          = true;
                                    tema.TemaCapEspecifico.Add(tempcap);
                                }
                            }
                            _context.TTemaCapacitacion.Add(tema);
                            await _context.SaveChangesAsync(cancellationToken);
                        }

                        else
                        {
                            throw new ExceptionGeneral("Nombre del Tema ya existente !!");
                        }
                    }
                }
                return(Unit.Value);
            }