private THistorialAprobacion nuevoHistorial(int codAprobacion, string comentario, string codAprobador, string estadoAprobacion) { var ha = new THistorialAprobacion() { CodAprobacion = codAprobacion, Comentario = comentario, CodAprobador = codAprobador, EstadoAprobacion = estadoAprobacion }; return(ha); }
public async Task <Unit> Handle(AprobacionCommand request, CancellationToken cancellationToken) { var data = request; if (!(data.EstadoAprobacion == null || request.EstadoAprobacion.Equals(APROBAR) || data.EstadoAprobacion.Equals(RECHAZAR) || data.EstadoAprobacion.Equals(MODIFICAR))) { throw new ArgumentException("Estado no valido"); } var aprobacion = _context.TAprobacion.Where(t => t.DocReferencia.Equals(data.DocReferencia)).OrderByDescending(t => t.Creado).FirstOrDefault(); if (aprobacion.EstadoDoc != "P") { throw new Exception("Este documento ya fue " + Getdescripcion(aprobacion.EstadoDoc)); } var codPosicion = peek(aprobacion.CadenaAprobacion); validar(codPosicion); aprobacion.CadenaAprobacion = pop(aprobacion.CadenaAprobacion); if (aprobacion.CadenaAprobacion.Equals("") && data.EstadoAprobacion == APROBAR) { aprobacion.EstadoDoc = data.EstadoAprobacion; var correo = _context.TPersona.Find(aprobacion.CodResponsable).Email; _sendCorreo.NotificarDocAprobado(correo, data.DocReferencia, data.CodTabla); } else if (data.EstadoAprobacion == RECHAZAR) { aprobacion.EstadoDoc = data.EstadoAprobacion; var correo = _context.TPersona.Find(aprobacion.CodResponsable).Email; _sendCorreo.NotificarRechazo(correo, data.DocReferencia, data.CodTabla); } else if (data.EstadoAprobacion == MODIFICAR) { aprobacion.EstadoDoc = data.EstadoAprobacion; var correo = _context.TPersona.Find(aprobacion.CodResponsable).Email; _sendCorreo.NotificarModificar(correo, data.DocReferencia, data.CodTabla); } else { var codJerResp = _context.TJerarquiaPersona.Where(jp => jp.CodPersona == aprobacion.CodResponsable).First(); while (peek(aprobacion.CadenaAprobacion).Contains(aprobacion.CodResponsable) || peek(aprobacion.CadenaAprobacion).Contains(codJerResp.CodPosicion + "")) { var ha = new THistorialAprobacion() { CodAprobacion = aprobacion.CodAprobacion, Comentario = "Aprobación Automatica", CodAprobador = aprobacion.CodResponsable, EstadoAprobacion = APROBAR }; aprobacion.Historial.Add(ha); aprobacion.CadenaAprobacion = pop(aprobacion.CadenaAprobacion); } if (aprobacion.CadenaAprobacion.Equals("")) { aprobacion.EstadoDoc = "A"; var correo = _context.TPersona.Find(aprobacion.CodResponsable).Email; _sendCorreo.NotificarDocAprobado(correo, data.DocReferencia, data.CodTabla); } else { enviarCorreos(peek(aprobacion.CadenaAprobacion), data.DocReferencia, data.CodTabla); } } var HistorialAprobacion = nuevoHistorial(aprobacion.CodAprobacion, data.Comentario, usuarioToCodPersona(), data.EstadoAprobacion.ToString()); aprobacion.Historial.Add(HistorialAprobacion); _context.TAprobacion.Update(aprobacion); await _context.SaveChangesAsync(cancellationToken); return(Unit.Value); }
public async Task <int> Handle(IniciarAprobacionCommand request, CancellationToken cancellationToken) { var version = 1; var validate_old = _context.TAprobacion.Where(t => t.DocReferencia.Equals(request.DocReferencia)).OrderByDescending(t => t.Creado).FirstOrDefault(); if (validate_old != null) { if (validate_old.EstadoDoc == "P" || validate_old.EstadoDoc.Equals(APROBAR) || validate_old.EstadoDoc.Equals(RECHAZAR)) { throw new ArgumentException("documento en uso"); } else { if (validate_old.EstadoDoc == MODIFICAR) { version = validate_old.Version + 1; } else { throw new ArgumentException("Estado de documento no valido"); } } } var aprobar = new TAprobacion(); aprobar.Version = version; aprobar.EstadoIncial(request.DocReferencia, request.CodTabla, request.CodResponsable, "P"); var cadenaAprobacionPosicion = _context.TProceso.Where(t => t.CodTabla == request.CodTabla).Select(p => p.CadenaAprobacion).FirstOrDefault(); if (cadenaAprobacionPosicion != null) { var cadenaApro = await plantillaToPosicion(cadenaAprobacionPosicion, request.CodTabla, request.DocReferencia, request.CodResponsable); aprobar.ProcesoAprobacion = cadenaApro; var codJerRes = _context.TJerarquiaPersona.Where(jp => jp.CodPersona == request.CodResponsable).First(); while (peek(cadenaApro).Contains(request.CodResponsable) || peek(cadenaApro).Contains(codJerRes.CodPosicion + "")) { var ha = new THistorialAprobacion() { // CodAprobacion = aprobar.CodAprobacion, Comentario = "Aprobación Automatica", CodAprobador = request.CodResponsable, EstadoAprobacion = APROBAR }; aprobar.Historial.Add(ha); cadenaApro = pop(cadenaApro); } aprobar.CadenaAprobacion = cadenaApro; if (cadenaApro.Equals("")) { aprobar.EstadoDoc = "A"; _context.TAprobacion.Add(aprobar); var save = await _context.SaveChangesAsync(cancellationToken); var correo = _context.TPersona.Find(request.CodResponsable).Email; _sendCorreo.NotificarDocAprobado(correo, request.DocReferencia, request.CodTabla); } else { _context.TAprobacion.Add(aprobar); var save = await _context.SaveChangesAsync(cancellationToken); var aprobador = peek(aprobar.CadenaAprobacion); var correos = ""; if (aprobador.Contains("J-")) { int CodPosicion = Convert.ToInt32(aprobador.Replace("J-", "")); var correo = _context.TJerarquiaPersona.Join(_context.TPersona, jer => jer.CodPersona, per => per.CodPersona, (jer, per) => new { jer = jer, per = per }) .Where(tuple => (tuple.jer.CodPosicion == CodPosicion && tuple.jer.CodTipoPersona == 1 && tuple.jer.FechaInicio <DateTime.Now && tuple.jer.FechaFin> DateTime.Now)).Select(p => p.per.Email); correos = string.Join(";", correo); } else { correos = _context.TPersona.Find(aprobador.Replace("P-", "")).Email; } _sendCorreo.NotificarAprobador(correos, request.DocReferencia, request.CodTabla); } } return(aprobar.CodAprobacion); }