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); }
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); }