public async Task ActualizaHistorialPuestosContacto(UnidadOrganizacionalEmpresas model)
        {
            try
            {
                var contacto = await _db.Contacto.Where(x => x.ContactoId == model.ContactoId).AsNoTracking().FirstOrDefaultAsync();

                if (contacto != null)  //Cuando se agrega un contacto a una UO  (casos cuando se agrega un nuevo titular a la unidad)
                {
                    if (model.oldValueTitular != null)
                    {
                        //Actualizamos la informacion del ultimo puesto del contacto ACTUAL de la UO
                        await new ContactoPuestoHistoricoRepository().ModificaPuestoContacto(Convert.ToInt32(model.oldValueTitular), model.EmpresaId, null, null, "actualizar");
                    }
                    if (model.ContactoId != contacto.ContactoId)  //Con esto evitamos que con cada actualizacion de datos en una UO se agregue un puesto para el contacto
                    {
                        //Actualizamos la informacion del ultimo puesto del contacto NUEVO de la UO
                        await new ContactoPuestoHistoricoRepository().ModificaPuestoContacto(Convert.ToInt32(model.ContactoId), model.EmpresaId, model.ClaveUnidad, model.Puesto, "agregar");
                    }
                }
                else
                {
                    if (model.oldValueTitular != null)
                    {
                        //Actualizamos la informacion del ultimo puesto del contacto ACTUAL de la UO  (Casos en donde se quita a un titular de unidad)
                        await new ContactoPuestoHistoricoRepository().ModificaPuestoContacto(Convert.ToInt32(model.oldValueTitular), model.EmpresaId, null, null, "actualizar");
                    }
                }
            }
            catch (Exception e)
            {
                throw new Exception(e.Message, e);
            }
        }
        /// <summary>
        /// Crea un registro en el historial de cambios de unidades organizacionales de empresas
        /// </summary>
        /// <param name="_param">La unidad a la cual se le va a crear el registro</param>
        /// <param name="_accion">La accion que origina la actualizacion de la informacion</param>
        /// <returns></returns>
        public async Task Create(UnidadOrganizacionalEmpresas _param, string _accion)
        {
            try
            {
                HistorialUnidadesOrganizacionalesEmpresas model = new HistorialUnidadesOrganizacionalesEmpresas
                {
                    nombreActualUnidad        = _param.NombreUnidad,
                    nombreAnteriorUnidad      = _param.oldValueUnidad,
                    nombreAnteriorUnidadPadre = _param.nombrePadre,
                    autor            = _param.autor,
                    contactoId       = _param.ContactoId,
                    empresaId        = _param.EmpresaId,
                    claveUnidad      = _param.ClaveUnidad,
                    accion           = _accion,
                    claveUnidadPadre = _param.padre,
                    comentarios      = _param.comentarios,
                    fecha            = DateTime.Now
                };

                _db.HistorialUnidadesOrganizacionalesEmpresas.Add(model);
                await _db.SaveChangesAsync();
            }
            catch (Exception e)
            {
                throw new Exception(e.Message, e);
            }
        }
 /// <summary>
 /// Actualiza una entidad de tipo UnidadOrganizacionalEmpresas
 /// </summary>
 /// <param name="valOriginal">valor trackeado en entity framework</param>
 /// <param name="valNuevo">valor nuevo, normalmente el que se recibe desde web api</param>
 /// <returns></returns>
 public async Task Update(UnidadOrganizacionalEmpresas valOriginal, UnidadOrganizacionalEmpresas valNuevo)
 {
     try
     {
         _db.Entry(valOriginal).CurrentValues.SetValues(valNuevo);  //actualizamos los valores de la entidad
         await _db.SaveChangesAsync();
     }
     catch (Exception e)
     {
         throw new Exception(e.Message, e);
     }
 }
 public async Task Create(UnidadOrganizacionalEmpresas model)
 {
     try
     {
         _db.UnidadOrganizacionalEmpresas.Add(model);
         await _db.SaveChangesAsync();
     }
     catch (Exception e)
     {
         throw new Exception(e.Message, e);
     }
 }
Exemplo n.º 5
0
        public async Task <IHttpActionResult> ValidadorClaves(UnidadOrganizacionalEmpresas model)
        {
            try
            {
                var campo = await _repository.ValidadorClaves(model);

                return(Ok(campo));
            }
            catch (Exception e)
            {
                log.Error(new MDCSet(this.ControllerContext.RouteData), e);
                return(InternalServerError(e));
            }
        }
Exemplo n.º 6
0
        public async Task <IHttpActionResult> Create(UnidadOrganizacionalEmpresas obj)
        {
            try
            {
                log.Info(new MDCSet(this.ControllerContext.RouteData));
                await _repository.Create(obj);

                return(Ok("Unidad organizacional creada correctamente!"));
            }
            catch (Exception e)
            {
                log.Error(new MDCSet(this.ControllerContext.RouteData), e);
                return(InternalServerError(e));
            }
        }
Exemplo n.º 7
0
        public async Task <IHttpActionResult> GetInformacionNodoEmpresa(UnidadOrganizacionalEmpresas id)
        {
            try
            {
                var campo = await _repository.GetInformacionUnidadEmpresa(id.ClaveUnidad);

                return(Ok(campo));
            }
            catch (Exception e)
            {
                log.Error(new MDCSet(this.ControllerContext.RouteData), e);

                return(InternalServerError(e));
            }
        }
Exemplo n.º 8
0
        public async Task <IHttpActionResult> GetPropuestasAsociadosNodoEmpresa(UnidadOrganizacionalEmpresas id)
        {
            try
            {
                log.Info(new MDCSet(this.ControllerContext.RouteData), new InfoException(id.ClaveUnidad));
                var _propuestasAsociados = await _propuestasRepo.GetPropuestasAsociadosUnidadesEmpresa(id.ClaveUnidad);

                return(Ok(_propuestasAsociados));
            }
            catch (Exception e)
            {
                log.Error(new MDCSet(this.ControllerContext.RouteData), e);
                return(InternalServerError(e));
            }
        }
Exemplo n.º 9
0
        public async Task <IHttpActionResult> UpdateEstado(UnidadOrganizacionalEmpresas obj)
        {
            try
            {
                log.Info(new MDCSet(this.ControllerContext.RouteData));
                await _repository.UpdateEstado(obj);

                return(Ok("Registro actualizado correctamente!"));
            }
            catch (Exception e)
            {
                log.Error(new MDCSet(this.ControllerContext.RouteData), e);

                return(InternalServerError(e));
            }
        }
Exemplo n.º 10
0
        public async Task <IHttpActionResult> GetAllnodes(UnidadOrganizacionalEmpresas uo)
        {
            try
            {
                log.Info(new MDCSet(this.ControllerContext.RouteData));
                var campo = await _repository.GetAllnodes(uo);

                return(Ok(campo));
            }
            catch (Exception e)
            {
                log.Error(new MDCSet(this.ControllerContext.RouteData), e);

                return(InternalServerError(e));
            }
        }
        public async Task CrearHistorial(UnidadOrganizacionalEmpresas _param, UnidadOrganizacionalEmpresas _valueToCompare)
        {
            try
            {
                if (_valueToCompare != null)
                {
                    if ((_valueToCompare.NombreUnidad != _param.NombreUnidad) || (_valueToCompare.padre != _param.padre) || (_valueToCompare.ContactoId != _param.ContactoId))
                    {
                        var accion = "";
                        if ((_valueToCompare.NombreUnidad != _param.NombreUnidad))
                        {
                            accion += "Cambio de nombre de unidad, ";
                        }
                        else
                        {
                            if (!String.IsNullOrEmpty(_param.comentarios))
                            {
                                _param.oldValueUnidad = _param.comentarios;
                            }
                            else
                            {
                                _param.oldValueUnidad = null;
                            }
                        }

                        if ((_valueToCompare.padre != _param.padre))
                        {
                            accion += "Cambio de padre, ";
                        }
                        if ((_valueToCompare.ContactoId != _param.ContactoId))
                        {
                            accion += "Cambio de titular, ";
                        }
                        accion = accion.Substring(0, accion.Length - 2);
                        await Create(_param, accion);
                    }
                }
                else
                {
                    await Create(_param, "Se crea una nueva unidad");
                }
            }
            catch (Exception e)
            {
                throw new Exception(e.Message, e);
            }
        }
        public async Task Update(UnidadOrganizacionalEmpresas model)
        {
            try
            {
                var _model = await _db.UnidadOrganizacionalEmpresas.FirstOrDefaultAsync(e => e.ClaveUnidad == model.ClaveUnidad);

                if (_model != null)
                {
                    _db.Entry(_model).CurrentValues.SetValues(model);
                    await _db.SaveChangesAsync();
                }
            }
            catch (Exception e)
            {
                throw new Exception(e.Message, e);
            }
        }
        public async Task CrearArbolUnidadOrganizacional(UnidadOrganizacionalEmpresas model)
        {
            try
            {
                //(1) Se crean los nodos de la unidad organizacional
                await CreaNodo(model);

                //(2) Se crea un registro en el historial de puestos del contacto
                await ActualizaHistorialPuestosContacto(model);

                //(3) Se crea un registro en el historial de unidades organizacionales de las empresas
                await new HistorialUnidadesOrganizacionalesEmpresasRepository().CrearHistorial(model, null);
            }
            catch (Exception e)
            {
                throw new Exception(e.Message, e);
            }
        }
        public async Task UpdateEstado(UnidadOrganizacionalEmpresas obj)
        {
            try
            {
                var _obj = await _db.UnidadOrganizacionalEmpresas.FirstOrDefaultAsync(e => e.ClaveUnidad == obj.ClaveUnidad);

                if (_obj != null)
                {
                    _obj.Estado = obj.Estado;

                    await _db.SaveChangesAsync();
                }
            }
            catch (Exception e)
            {
                throw new Exception(e.Message, e);
            }
        }
Exemplo n.º 15
0
        public async Task <IHttpActionResult> ActualizaArbol(UnidadOrganizacionalEmpresas id)
        {
            try
            {
                await _repository.ActualizaArbol(id);

                //if (id.ContactoId != null)
                //{
                //    await _repository.ActualizaUnidadContacto(Convert.ToInt32(id.ContactoId), id.ClaveUnidad);
                //}
                return(Ok("Informacion actualizada"));
            }
            catch (Exception e)
            {
                log.Error(new MDCSet(this.ControllerContext.RouteData), e);

                return(InternalServerError(e));
            }
        }
        public async Task <Boolean> ValidadorClaves(UnidadOrganizacionalEmpresas model)
        {
            try
            {
                var existente = false;
                var datos     = await _db.UnidadOrganizacionalEmpresas.AsNoTracking().Distinct().ToListAsync();

                datos.RemoveAll(x => x.PatronClave == "");                       //Removemos las claves vacias (existen datos asi)
                var patrones      = datos.Select(x => x.PatronClave).Distinct(); //Hacemos un distinct del patron de las claves (de PEMEX588 recuperamos PEMEX)
                var coincidencias = patrones.Where(x => x.Equals(model.ClaveUnidad)).Count();
                if (coincidencias > 0)
                {
                    existente = true;
                }

                return(existente);
            }
            catch (Exception e)
            {
                throw new Exception(e.Message, e);
            }
        }
Exemplo n.º 17
0
        public async Task <IHttpActionResult> DeleteUnidad(UnidadOrganizacionalEmpresas model)
        {
            try
            {
                //log.Info(new MDCSet(this.ControllerContext.RouteData), new InfoException(Id));
                var message = await _repository.VerificaAccionEliminarUnidad(model.ClaveUnidad);

                if (!String.IsNullOrEmpty(message))
                {
                    throw new Exception(message);
                }
                else
                {
                    await _repository.Delete(model.ClaveUnidad);

                    return(Ok("Unidad organizacional eliminada correctamente!"));
                }
            }
            catch (Exception e)
            {
                log.Error(new MDCSet(this.ControllerContext.RouteData), e);
                return(InternalServerError(e));
            }
        }
        public async Task CreaNodo(UnidadOrganizacionalEmpresas model)
        {
            try
            {
                var ultimoNodo = "";
                int numero;

                var lista = await _db.UnidadOrganizacionalEmpresas.Where(x => x.EmpresaId == model.EmpresaId && x.padre == model.padre)
                            .OrderBy(x => x.FechaEfectiva)
                            .Select(x => x.ClaveUnidad)
                            .AsNoTracking().ToListAsync();

                if (lista.Count > 0)
                {
                    ultimoNodo = lista.ElementAt(lista.Count - 1); //De acuerdo a la lista elegimos el ultimo nodo
                    numero     = RetornaDigitos(ultimoNodo, 3);    //Retornamos todos los numeros que contiene la cadena para posteriormente tomarlos en cuenta para el proximo id de la clave de la unidad
                }
                else
                {
                    numero = 0;  //En caso de que sea el primer nodo raiz u hoja
                }


                if (model.padre != null)  //Para el caso de los NODOS HOJAS(cualquiera que tenga una unidad como padre)
                {
                    if (!String.IsNullOrEmpty(ultimoNodo))
                    {
                        if (ultimoNodo.IndexOf('.') > 0) //Para los nuevos casos como CFE1.2
                        {
                            var array  = ultimoNodo.Split('.');
                            var ultima = array[array.Length - 1];
                            numero = Convert.ToInt32(ultima);
                        }
                        else   //Para los casos migrados como CFE1285
                        {
                            numero = RetornaDigitos(ultimoNodo, 3);
                        }
                    }

                    var duplicidad = await Validador(model.padre.Trim() + "." + (++numero) + ""); //Verificamos si existe el registros

                    while (duplicidad.Count() > 0)                                                //Verifica las claves hasta que haya una clave disponible en la base de datos
                    {
                        numero     = numero * 2;
                        duplicidad = await Validador(model.padre.Trim() + "." + (numero) + "");
                    }

                    model.ClaveUnidad = model.padre.Trim() + "." + numero + "";            //Da como resultado algo parecido a: CFE1 + ".2"  ==> CFE1.2
                }
                else                                                                       //Para el caso de los NODOS RAMAS  (las que no tienen asociado ninguna unidad organizacional)
                {
                    var duplicidad = await Validador(model.ClaveUnidad + (++numero) + ""); //Verificamos si existe el registros

                    while (duplicidad.Count() > 0)                                         //Verifica las claves hasta que haya una clave disponible en la base de datos
                    {
                        numero     = numero * 2;
                        duplicidad = await Validador(model.ClaveUnidad + (numero) + "");
                    }

                    model.ClaveUnidad += numero;  //Da como resultado algo parecido a: CFE + "2"
                }

                _db.UnidadOrganizacionalEmpresas.Add(model);
                await _db.SaveChangesAsync();
            }
            catch (Exception e)
            {
                throw new Exception(e.Message, e);
            }
        }
        public async Task ActualizaArbol(UnidadOrganizacionalEmpresas param)
        {
            try
            {
                var nodo = await _db.UnidadOrganizacionalEmpresas.Where(x => x.ClaveUnidad == param.ClaveUnidad).FirstOrDefaultAsync();

                //El siguiente objeto se utiliza para realizar comparaciones de valores
                UnidadOrganizacionalEmpresas nodoToCompare = new UnidadOrganizacionalEmpresas();
                nodoToCompare.NombreUnidad = nodo.NombreUnidad;
                nodoToCompare.ContactoId   = nodo.ContactoId;
                nodoToCompare.padre        = nodo.padre;

                //(1) Se crean los nodos de la unidad organizacional
                if (nodo != null)
                {
                    if ((param.CampoAgrupador != param.oldValueCampoAgrupador) || (nodo.padre != param.padre)) //Cuando se detecta un cambio de campo agrupador o de padre se deben de actualizar las migas de pan
                    {
                        if (param.padre != null)                                                               //Es una raiz (nodos que NO estan a nivel 0 en una unidad organizacional)
                        {
                            if (nodo.padre != param.padre)                                                     //Cuando se hizo un cambio de padres entre los nodos
                            {
                                nodo.padre = param.padre;
                            }

                            var migaNodoPadre = await _db.UnidadOrganizacionalEmpresas.Where(x => x.ClaveUnidad.Equals(nodo.padre)).AsNoTracking().Select(x => x.Descripcion).FirstOrDefaultAsync();
                            await Update(nodo, param);  //actualizamos los demas parametros

                            ActualizaMigasDePanRamas(nodo.ClaveUnidad.Trim(), migaNodoPadre, param.CampoAgrupador);
                        }
                        else //Es una rama (nodos que ESTAN a nivel 0)
                        {
                            if (nodo.padre != param.padre)
                            {
                                nodo.padre = param.padre;
                            }
                            var migaNodoPadre = await _db.Empresa.Where(x => x.EmpresaId == param.EmpresaId).AsNoTracking().Select(x => x.NombreEmpresa).FirstOrDefaultAsync();

                            await Update(nodo, param); //actualizamos los demas parametros

                            ActualizaMigasDePanRamas(nodo.ClaveUnidad.Trim(), migaNodoPadre, param.CampoAgrupador);
                        }
                    }
                    else
                    {
                        await Update(nodo, param);

                        ActualizaMigasDePanRamas(param.ClaveUnidad.Trim(), param.newValueUnidad, param.CampoAgrupador);  //actualizamos la miga de pan (old value, new value)
                        //if (!param.CampoAgrupador)  //En caso de que sea un campo agrupador no se actualizaran las migas de pan
                        //{
                        //    ActualizaMigasDePanRamas(param.ClaveUnidad.Trim(), param.newValueUnidad, param.oldValueUnidad);  //actualizamos la miga de pan (old value, new value)
                        //}
                    }

                    //(2) Se crea un registro en el historial de puestos del contacto
                    await ActualizaHistorialPuestosContacto(param);

                    //(3) Se crea un registro en el historial de unidades organizacionales de las empresas
                    await new HistorialUnidadesOrganizacionalesEmpresasRepository().CrearHistorial(param, nodoToCompare);
                }
            }
            catch (Exception e)
            {
                throw new Exception(e.Message, e);
            }
        }
        public async Task <IEnumerable <UnidadOrganizacionalEmpresas> > GetAllnodes(UnidadOrganizacionalEmpresas uo)
        {
            try
            {
                List <UnidadOrganizacionalEmpresas> entities = null;


                if (String.IsNullOrEmpty(uo.ClaveUnidad))
                {
                    entities = await _db.UnidadOrganizacionalEmpresas
                               .Where(x => x.padre == null && x.EmpresaId == uo.EmpresaId)
                               .AsNoTracking().ToListAsync();

                    try
                    {
                        foreach (var item in entities)
                        {
                            if (item.ContactoId != null)
                            {
                                item.contacto = await _db.Contacto.AsNoTracking().Where(x => x.ContactoId == item.ContactoId).FirstOrDefaultAsync();
                            }

                            item.Children = await _db.UnidadOrganizacionalEmpresas
                                            .Where(x => x.padre == item.ClaveUnidad)
                                            .Where(x => x.Estado == 1)
                                            .OrderByDescending(e => e.FechaEfectiva)
                                            .AsNoTracking()
                                            .ToListAsync();

                            if (item.Children.Count > 0)
                            {
                                foreach (var child in item.Children)
                                {
                                    if (child.ContactoId != null)
                                    {
                                        child.contacto = await _db.Contacto.AsNoTracking().Where(x => x.ContactoId == child.ContactoId).FirstOrDefaultAsync();
                                    }
                                }
                            }
                        }
                    }
                    catch (Exception e) { }
                }
                else

                {
                    var entities1 = await _db.UnidadOrganizacionalEmpresas
                                    .Where(x => x.ClaveUnidad == uo.ClaveUnidad)
                                    .Where(x => x.Estado == 1)
                                    .OrderByDescending(e => e.FechaEfectiva)
                                    .AsNoTracking().ToListAsync();

                    entities1 = entities1.Distinct(new ComparerIdOrClave()).ToList();
                    foreach (var item in entities1)
                    {
                        if (item.ContactoId != null)
                        {
                            item.contacto = await _db.Contacto.AsNoTracking().Where(x => x.ContactoId == item.ContactoId).FirstOrDefaultAsync();
                        }

                        entities = await _db.UnidadOrganizacionalEmpresas
                                   .Where(x => x.padre == item.ClaveUnidad && x.EmpresaId == item.EmpresaId && x.Estado == 1)
                                   .AsNoTracking().ToListAsync();

                        item.Children = entities;
                        if (item.Children.Count > 0)
                        {
                            foreach (var child in item.Children)
                            {
                                if (child.ContactoId != null)
                                {
                                    child.contacto = await _db.Contacto.AsNoTracking().Where(x => x.ContactoId == child.ContactoId).FirstOrDefaultAsync();
                                }
                            }
                        }


                        break;
                    }
                    return(entities1.OrderBy(x => x.NombreUnidad));
                }
                return(entities.OrderBy(x => x.NombreUnidad));
            }
            catch (Exception e)
            {
                throw new Exception(e.Message, e);
            }
        }