コード例 #1
0
            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);
            }
コード例 #2
0
            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);
            }
コード例 #3
0
            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);
            }