示例#1
0
        /// <summary>
        /// Obtiene registros del catalogo PostLogs
        /// </summary>
        /// <param name="postLog">Objeto con filtros adicionales</param>
        /// <param name="blnDate">True. filtra pos ppDT</param>
        /// <returns>Lista de tipo PostLog</returns>
        /// <history>
        /// [emoguel] created 11/04/2016
        /// [emoguel] modified 28/06/2016--->Se volvió async
        /// </history>
        public async static Task <List <PostLog> > GetPostsLog(PostLog postLog = null, bool blnDate = false)
        {
            return(await Task.Run(() =>
            {
                using (var dbContext = new IMEntities(ConnectionHelper.ConnectionString()))
                {
                    var query = from pp in dbContext.PostsLogs.Include("Personnel").Include("Personnel_ChangedBy").Include("Post")
                                select pp;

                    #region Filtros
                    if (postLog != null) //verficamos que se tenga un objeto
                    {
                        if (blnDate)     //Filtro por fecha
                        {
                            query = query.Where(pp => DbFunctions.TruncateTime(pp.ppDT).Value == DbFunctions.TruncateTime(postLog.ppDT).Value);
                        }

                        if (!string.IsNullOrWhiteSpace(postLog.ppChangedBy))//Filtro por changedBy
                        {
                            query = query.Where(pp => pp.ppChangedBy == postLog.ppChangedBy);
                        }

                        if (!string.IsNullOrWhiteSpace(postLog.pppe))//Filtro por Perssonel
                        {
                            query = query.Where(pp => pp.pppe == postLog.pppe);
                        }
                    }
                    #endregion

                    return query.OrderByDescending(pp => pp.ppDT).ToList();
                }
            }));
        }
示例#2
0
        /// <summary>
        /// Carga la lista del grid
        /// </summary>
        /// <param name="postLog">Objeto a seleccionar</param>
        /// <history>
        /// [emoguel] created 11/04/2016
        /// </history>
        private async void LoadPostLogs(PostLog postLog = null)
        {
            try
            {
                status.Visibility = Visibility.Visible;
                int            nIndex      = 0;
                List <PostLog> lstPostsLog = await BRPostsLog.GetPostsLog(_postLogFilter, _blnDate);

                dgrPostsLog.ItemsSource = lstPostsLog;
                if (lstPostsLog.Count > 0)
                {
                    if (postLog != null)
                    {
                        postLog = lstPostsLog.Where(pp => pp.ppID == postLog.ppID).FirstOrDefault();
                        nIndex  = lstPostsLog.IndexOf(postLog);
                    }

                    GridHelper.SelectRow(dgrPostsLog, nIndex);
                    btnDel.IsEnabled = _blnDel;
                }
                else
                {
                    btnDel.IsEnabled = false;
                }

                StatusBarReg.Content = lstPostsLog.Count + " Posts Log.";
                status.Visibility    = Visibility.Collapsed;
            }
            catch (Exception ex)
            {
                UIHelper.ShowMessage(ex);
            }
        }
示例#3
0
        /// <summary>
        /// Valida que un registro cumpla con los filtros actuales
        /// </summary>
        /// <param name="postLog">objeto a validar</param>
        /// <returns>True. Si cumple | False. No cumple</returns>
        /// <history>
        /// [emoguel] created 12/04/2016
        /// </history>
        private bool ValidateFilter(PostLog postLog)
        {
            if (_blnDate)//Filtro por Fecha
            {
                if (postLog.ppDT.Date != _postLogFilter.ppDT.Date)
                {
                    return(false);
                }
            }

            if (!string.IsNullOrWhiteSpace(_postLogFilter.ppChangedBy))//Filtro por Chaged By
            {
                if (_postLogFilter.ppChangedBy != postLog.ppChangedBy)
                {
                    return(false);
                }
            }

            if (!string.IsNullOrWhiteSpace(_postLogFilter.pppe))//Filtro por personel
            {
                if (postLog.pppe != _postLogFilter.pppe)
                {
                    return(false);
                }
            }
            return(true);
        }
示例#4
0
        /// <summary>
        /// Muestra la ventana detalle
        /// </summary>
        /// <history>
        /// [emoguel] 11/04/2016 Created
        /// </history>
        private void Cell_DoubleClick(object sender, RoutedEventArgs e)
        {
            PostLog          postLog          = (PostLog)dgrPostsLog.SelectedItem;
            frmPostLogDetail frmPostLogDetail = new frmPostLogDetail();

            frmPostLogDetail.Owner      = this;
            frmPostLogDetail.enumMode   = (_blnEdit) ? EnumMode.Edit : EnumMode.ReadOnly;
            frmPostLogDetail.oldPostLog = postLog;
            if (frmPostLogDetail.ShowDialog() == true)
            {
                int            nIndex      = 0;
                List <PostLog> lstPostsLog = (List <PostLog>)dgrPostsLog.ItemsSource;
                if (ValidateFilter(frmPostLogDetail.postLog))
                {
                    ObjectHelper.CopyProperties(postLog, frmPostLogDetail.postLog, true); //Actualizamos los datos del objeto
                    lstPostsLog.Sort((x, y) => y.ppDT.CompareTo(x.ppDT));                 //Ordenamos la lista
                    nIndex = lstPostsLog.IndexOf(postLog);                                //Obtenemos la posición
                }
                else
                {
                    lstPostsLog.Remove(postLog);//Quitamos el registro
                }
                dgrPostsLog.Items.Refresh();
                GridHelper.SelectRow(dgrPostsLog, nIndex);
                StatusBarReg.Content = lstPostsLog.Count + " Posts Log.";
            }
        }
示例#5
0
        /// <summary>
        /// Guarda|actualiza un registro en la Bd
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        /// <history>
        /// [emoguel] created 13/04/2016
        /// [emoguel] modified 30/05/2016
        /// </history>
        private async void btnAccept_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                btnAccept.Focus();
                if (enumMode == EnumMode.Search)
                {
                    if (dpppDT.Value != null)
                    {
                        blnDate      = true;
                        postLog.ppDT = Convert.ToDateTime(dpppDT.Value);
                    }
                    else
                    {
                        blnDate = false;
                    }
                    _isClosing   = true;
                    DialogResult = true;
                    Close();
                }
                else
                {
                    if (ObjectHelper.IsEquals(postLog, oldPostLog) && enumMode != EnumMode.Add)
                    {
                        _isClosing = true;
                        Close();
                    }
                    else
                    {
                        #region Insertar|Agregar
                        string strMsj = ValidateHelper.ValidateForm(this, "Post Log");
                        if (strMsj == "")
                        {
                            int nRes = await BREntities.OperationEntity(postLog, enumMode);

                            UIHelper.ShowMessageResult("PostLog", nRes);
                            if (nRes > 0)
                            {
                                _isClosing = true;
                                var postsLog = await BRPostsLog.GetPostsLog(postLog);

                                postLog      = postsLog.FirstOrDefault();
                                DialogResult = true;
                                Close();
                            }
                        }
                        else
                        {
                            UIHelper.ShowMessage(strMsj);
                        }
                        #endregion
                    }
                }
            }
            catch (Exception ex)
            {
                UIHelper.ShowMessage(ex);
            }
        }
示例#6
0
        public JsonResult ReReleaseLog(int id, int status)
        {
            PublicUserModel loginUser    = this.GetLoginUser();
            PostLog         reReleaseLog = ncBase.CurrentEntities.PostLog.Where(o => o.ID == id && o.Status == status && o.UserID == loginUser.UserID).FirstOrDefault();

            if (reReleaseLog.IsNoNull())
            {
                reReleaseLog.Status = 0;
                ncBase.CurrentEntities.SaveChanges();
                return(Json(new { code = 1, msg = "成功" }));
            }
            return(Json(new { code = 1, msg = "可能系统重发了" }));
        }
示例#7
0
        /// <summary>
        /// Abre la ventana detalle en modo busqueda
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        /// <history>
        /// [emoguel] created 13/04/2016
        /// </history>
        private void btnSearch_Click(object sender, RoutedEventArgs e)
        {
            frmPostLogDetail frmPostLogDetail = new frmPostLogDetail();

            frmPostLogDetail.Owner      = this;
            frmPostLogDetail.oldPostLog = _postLogFilter;
            frmPostLogDetail.enumMode   = EnumMode.Search;
            frmPostLogDetail.blnDate    = _blnDate;
            if (frmPostLogDetail.ShowDialog() == true)
            {
                _postLogFilter = frmPostLogDetail.postLog;
                _blnDate       = frmPostLogDetail.blnDate;
                LoadPostLogs();
            }
        }
示例#8
0
        /// <summary>
        /// Abre la ventana detalle en modo add
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        /// <history>
        /// [emoguel] created 12/04/2016
        /// </history>
        private void btnAdd_Click(object sender, RoutedEventArgs e)
        {
            frmPostLogDetail frmPostLogDetail = new frmPostLogDetail();

            frmPostLogDetail.Owner    = this;
            frmPostLogDetail.enumMode = EnumMode.Add;
            if (frmPostLogDetail.ShowDialog() == true)
            {
                PostLog postLog = frmPostLogDetail.postLog;
                if (ValidateFilter(postLog))
                {
                    List <PostLog> lstPostsLog = (List <PostLog>)dgrPostsLog.ItemsSource;
                    lstPostsLog.Add(postLog);                                 //Agregamos el registro
                    lstPostsLog.Sort((x, y) => y.ppDT.CompareTo(x.ppDT));     //ordenamos la lista
                    int nIndex = lstPostsLog.IndexOf(postLog);                //obtenemos la posición del registro
                    dgrPostsLog.Items.Refresh();                              //Actualizamos la vista
                    GridHelper.SelectRow(dgrPostsLog, nIndex);                //Seleccionamos el registro
                    StatusBarReg.Content = lstPostsLog.Count + " Posts Log."; //Actualizamos el contador
                }
            }
        }
示例#9
0
        /// <summary>
        ///   Agrega | Actualiza un equipo de PRs
        /// </summary>
        /// <param name="idUser">Clave de usuario</param>
        /// <param name="team">Objeto a guardar</param>
        /// <param name="blnUpdate">True - Actualiza | False - Agrega</param>
        /// <param name="lstAdd">Personnels a asignar al equipo</param>
        /// <param name="lstDel">Personeels a remover del equipo</param>
        /// <param name="lstChanged">Lista de integrantes que tuvieron cambios</param>
        /// <returns>0. No se guardó | 1. Se guardó | -1. Existe un registro con el mismo ID</returns>
        /// <history>
        ///   [vku] 13/Jul/2016 Created
        /// </history>
        public async static Task <int> SaveTeam(string idUser, TeamGuestServices team, bool blnUpdate, List <Personnel> lstAdd, List <Personnel> lstDel, List <Personnel> lstChanged)
        {
            bool HadPost = false;
            int  nRes    = await Task.Run(() =>
            {
                using (var dbContext = new IMEntities(ConnectionHelper.ConnectionString()))
                {
                    using (var transaction = dbContext.Database.BeginTransaction(System.Data.IsolationLevel.Serializable))
                    {
                        try
                        {
                            #region ChangePersonnel
                            if (lstChanged.Count > 0)
                            {
                                foreach (Personnel pe in lstChanged)
                                {
                                    dbContext.Entry(pe).State = EntityState.Modified;
                                }
                            }
                            #endregion

                            #region Update
                            if (blnUpdate)
                            {
                                dbContext.Entry(team).State = EntityState.Modified;
                            }
                            #endregion
                            #region Add
                            else
                            {
                                TeamGuestServices teamVal = dbContext.TeamsGuestServices.Where(te => te.tgID == team.tgID).FirstOrDefault();
                                if (teamVal != null)
                                {
                                    return(-1);
                                }
                                else
                                {
                                    dbContext.TeamsGuestServices.Add(team);
                                }
                            }
                            #endregion

                            #region addPerssonnel
                            if (lstAdd.Count > 0)
                            {
                                dbContext.Personnels.AsEnumerable().Where(pe => lstAdd.Any(pee => pee.peID == pe.peID)).ToList().ForEach(pe =>
                                {
                                    pe.peTeamType = EnumToListHelper.GetEnumDescription(EnumTeamType.TeamPRs);
                                    pe.pePlaceID  = team.tglo;
                                    pe.peTeam     = team.tgID;
                                    if (pe.pepo == "GS" || pe.pepo == "OPC")
                                    {
                                        HadPost = true;
                                    }
                                    if (BRPrograms.GetProgramByLocation(team.tglo) == EnumToListHelper.GetEnumDescription(EnumProgram.Inhouse))
                                    {
                                        pe.pepo = "GS";
                                    }
                                    else
                                    {
                                        pe.pepo = "OPC";
                                    }

                                    DateTime dtmServerDate = BRHelpers.GetServerDateTime();

                                    TeamLog teamLog     = new TeamLog();
                                    teamLog.tlDT        = dtmServerDate;
                                    teamLog.tlChangedBy = idUser;
                                    teamLog.tlpe        = pe.peID;
                                    teamLog.tlTeamType  = pe.peTeamType;
                                    teamLog.tlPlaceID   = pe.pePlaceID;
                                    teamLog.tlTeam      = pe.peTeam;
                                    dbContext.TeamsLogs.Add(teamLog);
                                    if (HadPost == false)
                                    {
                                        PostLog postLog     = new PostLog();
                                        postLog.ppChangedBy = idUser;
                                        postLog.ppDT        = dtmServerDate;
                                        postLog.pppe        = pe.peID;
                                        postLog.pppo        = pe.pepo;
                                        dbContext.PostsLogs.Add(postLog);
                                    }
                                });
                            }
                            #endregion

                            #region del Personnel
                            if (lstDel.Count > 0)
                            {
                                dbContext.Personnels.AsEnumerable().Where(pe => lstDel.Any(pee => pee.peID == pe.peID)).ToList().ForEach(pe =>
                                {
                                    pe.peTeamType = null;
                                    pe.pePlaceID  = null;
                                    pe.peTeam     = null;
                                    pe.pepo       = null;
                                    pe.peLinerID  = null;

                                    DateTime dtmServerDate = BRHelpers.GetServerDateTime();

                                    TeamLog teamLog     = new TeamLog();
                                    teamLog.tlDT        = dtmServerDate;
                                    teamLog.tlChangedBy = idUser;
                                    teamLog.tlpe        = pe.peID;
                                    teamLog.tlTeamType  = pe.peTeamType;
                                    teamLog.tlPlaceID   = pe.pePlaceID;
                                    teamLog.tlTeam      = pe.peTeam;
                                    dbContext.TeamsLogs.Add(teamLog);

                                    PostLog postLog     = new PostLog();
                                    postLog.ppChangedBy = idUser;
                                    postLog.ppDT        = dtmServerDate;
                                    postLog.pppe        = pe.peID;
                                    postLog.pppo        = pe.pepo;
                                    dbContext.PostsLogs.Add(postLog);
                                });
                            }
                            #endregion

                            int nSave = dbContext.SaveChanges();
                            transaction.Commit();
                            return(nSave);
                        }
                        catch
                        {
                            transaction.Rollback();
                            return(0);
                        }
                    }
                }
            });

            return(nRes);
        }
示例#10
0
        /// <summary>
        ///    Agrega | Actualiza un equipo de PRs
        /// </summary>
        /// <param name="idUser">Clave de usuario</param>
        /// <param name="team">Objeto a guardar</param>
        /// <param name="blnUpdate">True - Actualiza | False - Agrega</param>
        /// <param name="lstAdd">Personnels a asignar al equipo</param>
        /// <param name="lstDel">Personeels a remover del equipo</param>
        /// <param name="lstChanged">Lista de integrantes que tuvieron cambios</param>
        /// <returns>0. No se guardó | 1. Se guardó | -1. Existe un registro con el mismo ID</returns>
        /// <history>
        ///   [vku] 23/Jul/2016 Created
        /// </history>
        public async static Task <int> SaveTeam(string idUser, TeamSalesmen team, bool blnUpdate, List <Personnel> lstAdd, List <Personnel> lstDel, List <Personnel> lstChanged)
        {
            int nRes = await Task.Run(() =>
            {
                using (var dbContext = new IMEntities(ConnectionHelper.ConnectionString()))
                {
                    using (var transaction = dbContext.Database.BeginTransaction(System.Data.IsolationLevel.Serializable))
                    {
                        try
                        {
                            #region ChangePersonnel
                            if (lstChanged.Count > 0)
                            {
                                foreach (Personnel p in lstChanged)
                                {
                                    dbContext.Entry(p).State = EntityState.Modified;

                                    DateTime dtmServerDate = BRHelpers.GetServerDateTime();

                                    PostLog postLog     = new PostLog();
                                    postLog.ppChangedBy = idUser;
                                    postLog.ppDT        = dtmServerDate;
                                    postLog.pppe        = p.peID;
                                    postLog.pppo        = p.pepo;
                                    dbContext.PostsLogs.Add(postLog);
                                }
                            }
                            #endregion

                            #region Update
                            if (blnUpdate)
                            {
                                dbContext.Entry(team).State = EntityState.Modified;
                            }
                            #endregion
                            #region Add
                            else
                            {
                                TeamSalesmen teamVal = dbContext.TeamsSalesmen.Where(te => te.tsID == team.tsID).FirstOrDefault();
                                if (teamVal != null)
                                {
                                    return(-1);
                                }
                                else
                                {
                                    dbContext.TeamsSalesmen.Add(team);
                                }
                            }
                            #endregion

                            #region addPerssonnel
                            if (lstAdd.Count > 0)
                            {
                                dbContext.Personnels.AsEnumerable().Where(pe => lstAdd.Any(pee => pee.peID == pe.peID)).ToList().ForEach(pe =>
                                {
                                    pe.peTeamType = EnumToListHelper.GetEnumDescription(EnumTeamType.TeamSalesmen);
                                    pe.pePlaceID  = team.tssr;
                                    pe.peTeam     = team.tsID;

                                    DateTime dtmServerDate = BRHelpers.GetServerDateTime();

                                    TeamLog teamLog     = new TeamLog();
                                    teamLog.tlDT        = dtmServerDate;
                                    teamLog.tlChangedBy = idUser;
                                    teamLog.tlpe        = pe.peID;
                                    teamLog.tlTeamType  = pe.peTeamType;
                                    teamLog.tlPlaceID   = pe.pePlaceID;
                                    teamLog.tlTeam      = pe.peTeam;
                                    dbContext.TeamsLogs.Add(teamLog);
                                    Personnel p = lstAdd.Where(pa => pa.peID == pe.peID).FirstOrDefault();
                                    if (p.pepo != pe.pepo)
                                    {
                                        dbContext.Entry(p).State = EntityState.Modified;

                                        PostLog postLog     = new PostLog();
                                        postLog.ppChangedBy = idUser;
                                        postLog.ppDT        = dtmServerDate;
                                        postLog.pppe        = pe.peID;
                                        postLog.pppo        = p.pepo;
                                        dbContext.PostsLogs.Add(postLog);
                                    }
                                });
                            }
                            #endregion

                            #region del Personnel
                            if (lstDel.Count > 0)
                            {
                                dbContext.Personnels.AsEnumerable().Where(pe => lstDel.Any(pee => pee.peID == pe.peID)).ToList().ForEach(pe =>
                                {
                                    pe.peTeamType = null;
                                    pe.pePlaceID  = null;
                                    pe.peTeam     = null;

                                    DateTime dtmServerDate = BRHelpers.GetServerDateTime();

                                    TeamLog teamLog     = new TeamLog();
                                    teamLog.tlDT        = dtmServerDate;
                                    teamLog.tlChangedBy = idUser;
                                    teamLog.tlpe        = pe.peID;
                                    teamLog.tlTeamType  = pe.peTeamType;
                                    teamLog.tlPlaceID   = pe.pePlaceID;
                                    teamLog.tlTeam      = pe.peTeam;
                                    dbContext.TeamsLogs.Add(teamLog);
                                });
                            }
                            #endregion

                            int nSave = dbContext.SaveChanges();
                            transaction.Commit();
                            return(nSave);
                        }
                        catch
                        {
                            transaction.Rollback();
                            return(0);
                        }
                    }
                }
            });

            return(nRes);
        }
示例#11
0
        /// <summary>
        /// Actualiza la lista
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        /// <history>
        /// [emoguel] created 12/04/2016
        /// </history>
        private void btnRef_Click(object sender, RoutedEventArgs e)
        {
            PostLog posLog = (PostLog)dgrPostsLog.SelectedItem;

            LoadPostLogs(posLog);
        }
示例#12
0
        /// <summary>
        /// Guarda un personnel y todos sus permisos
        /// </summary>
        /// <param name="idUser">id del usuario que está editando el personnel</param>
        /// <param name="personnel">personnel a guardar</param>
        /// <param name="blnUpdate">True. Actualiza | False. inserta</param>
        /// <param name="lstPermissionAdd">Permisos a agregar</param>
        /// <param name="lstPermissionDel">Permisos a eliminar</param>
        /// <param name="lstPermissionUpd">Permisos a actualizar</param>
        /// <param name="lstLeadSourceDel">Leadsource a eliminar</param>
        /// <param name="lstLeadSourceAdd">LeadSource a agregar</param>
        /// <param name="lstWarehouseDel">Warehouses a eliminar</param>
        /// <param name="lstWarehousesAdd">Warehouses a agregar</param>
        /// <param name="lstSalesRoomDel">Salesroom a eliminar</param>
        /// <param name="lstSalesRoomAdd">SalesRoom a agregar</param>
        /// <param name="lstRolesDel">Roles a eliminar</param>
        /// <param name="lstRoleAdd">Roles a agregar</param>
        /// <param name="blnPostLog">Si se modifico el puesto</param>
        /// <param name="blnTeamsLog">Si se cambio de tem</param>
        /// <returns>-1. Existe un registro con el mismo ID | 0. No se guardó | >0. Se guardó correctamente</returns>
        /// <history>
        /// [emoguel] created 22/06/2016
        /// </history>
        public static async Task <int> SavePersonnel(string idUser, Personnel personnel, bool blnUpdate, List <PersonnelPermission> lstPermissionAdd, List <PersonnelPermission> lstPermissionDel, List <PersonnelPermission> lstPermissionUpd,
                                                     List <PersonnelAccess> lstLeadSourceDel, List <PersonnelAccess> lstLeadSourceAdd, List <PersonnelAccess> lstWarehouseDel, List <PersonnelAccess> lstWarehousesAdd, List <PersonnelAccess> lstSalesRoomDel,
                                                     List <PersonnelAccess> lstSalesRoomAdd, List <Role> lstRoleDel, List <Role> lstRoleAdd, bool blnPostLog, bool blnTeamsLog, bool blnSaveLog, List <string> lstRolesLog, bool blnLocation, List <string> lsLeadSourcesLog, List <string> lstSalesRoomLog)
        {
            int nRes = await Task.Run(() =>
            {
                using (var dbContext = new IMEntities(ConnectionHelper.ConnectionString()))
                {
                    using (var transacction = dbContext.Database.BeginTransaction(System.Data.IsolationLevel.Serializable))
                    {
                        try
                        {
                            int nSave = 0;
                            Personnel personnelSave = new Personnel();
                            #region Personnel
                            if (blnUpdate)//Actualizar
                            {
                                personnelSave = dbContext.Personnels.Where(pe => pe.peID == personnel.peID).Include(pe => pe.Roles).FirstOrDefault();
                                //dbContext.Entry(personnel).State = EntityState.Modified;
                                ObjectHelper.CopyProperties(personnelSave, personnel);
                            }
                            else//Agregar
                            {
                                if (dbContext.Personnels.Where(pe => pe.peID == personnel.peID).FirstOrDefault() != null)
                                {
                                    return(-1);
                                }
                                else
                                {
                                    dbContext.Personnels.Add(personnel);
                                    personnelSave = personnel;
                                }
                            }
                            #endregion

                            #region PersonnelPermission
                            //Eliminar
                            lstPermissionDel.ForEach(pp =>
                            {
                                dbContext.Entry(pp).State = EntityState.Deleted;
                            });

                            //Add
                            lstPermissionAdd.ForEach(pp =>
                            {
                                pp.pppe = personnelSave.peID;
                                dbContext.Entry(pp).State = EntityState.Added;
                            });

                            //update
                            lstPermissionUpd.ForEach(pp =>
                            {
                                pp.pppe = personnelSave.peID;
                                dbContext.Entry(pp).State = EntityState.Modified;
                            });
                            #endregion

                            #region Roles
                            //Del
                            personnelSave.Roles.Where(ro => lstRoleDel.Any(roo => ro.roID == roo.roID)).ToList().ForEach(ro =>
                            {
                                personnelSave.Roles.Remove(ro);
                            });

                            //Add
                            lstRoleAdd = dbContext.Roles.AsEnumerable().Where(ro => lstRoleAdd.Any(roo => ro.roID == roo.roID)).ToList();
                            lstRoleAdd.ForEach(ro =>
                            {
                                personnelSave.Roles.Add(ro);
                            });
                            #endregion

                            #region leadSource
                            //Eliminar
                            lstLeadSourceDel.ForEach(pl =>
                            {
                                pl.plpe   = personnelSave.peID;
                                pl.plLSSR = "LS";
                                dbContext.Entry(pl).State = EntityState.Deleted;
                            });

                            //Del
                            lstLeadSourceAdd.ForEach(pl =>
                            {
                                pl.plpe   = personnelSave.peID;
                                pl.plLSSR = "LS";
                                dbContext.PersonnelAccessList.Add(pl);
                            });
                            #endregion

                            #region SalesRoom
                            //Del
                            lstSalesRoomDel.ForEach(pl =>
                            {
                                pl.plpe   = personnelSave.peID;
                                pl.plLSSR = "SR";
                                dbContext.Entry(pl).State = EntityState.Deleted;
                            });

                            //Add
                            lstSalesRoomAdd.ForEach(pl =>
                            {
                                pl.plpe   = personnelSave.peID;
                                pl.plLSSR = "SR";
                                dbContext.PersonnelAccessList.Add(pl);
                            });
                            #endregion

                            #region Warehouses
                            //Del
                            lstWarehouseDel.ForEach(pl =>
                            {
                                pl.plpe   = personnelSave.peID;
                                pl.plLSSR = "WH";
                                dbContext.Entry(pl).State = EntityState.Deleted;
                            });

                            //Add
                            lstWarehousesAdd.ForEach(pl =>
                            {
                                pl.plpe   = personnelSave.peID;
                                pl.plLSSR = "WH";
                                dbContext.PersonnelAccessList.Add(pl);
                            });
                            #endregion

                            DateTime dtmServerDate = BRHelpers.GetServerDateTime();

                            #region postLog
                            if (blnPostLog)
                            {
                                PostLog postLog     = new PostLog();
                                postLog.ppChangedBy = idUser;
                                postLog.ppDT        = dtmServerDate;
                                postLog.pppe        = personnel.peID;
                                postLog.pppo        = personnel.pepo;
                                dbContext.PostsLogs.Add(postLog);
                            }
                            #endregion

                            #region TeamsLog
                            if (blnTeamsLog)
                            {
                                TeamLog teamLog     = new TeamLog();
                                teamLog.tlDT        = dtmServerDate;
                                teamLog.tlChangedBy = idUser;
                                teamLog.tlpe        = personnel.peID;
                                teamLog.tlTeamType  = (personnel.peTeamType == "") ? null : personnel.peTeamType;
                                teamLog.tlPlaceID   = personnel.pePlaceID;
                                teamLog.tlTeam      = personnel.peTeam;
                                dbContext.TeamsLogs.Add(teamLog);
                            }
                            #endregion

                            #region PersonnelLog
                            if (blnSaveLog)
                            {
                                PersonnelLog personnelLog = new PersonnelLog {
                                    plgpe = personnel.peID, plgDT = dtmServerDate, plgChangedBy = idUser, plgde = personnel.pede, plgpo = personnel.pepo, plglo = (blnLocation) ? personnel.pePlaceID : null, plgsr = (!blnLocation) ? personnel.pePlaceID : null
                                };
                                dbContext.PersonnelLogs.Add(personnelLog);
                                nSave = dbContext.SaveChanges();
                                #region Roles
                                //Roles a ligar al log
                                var lstRolesSave = dbContext.Roles.Where(ro => lstRolesLog.Contains(ro.roID)).ToList();
                                lstRolesSave.ForEach(ro => personnelLog.Roles.Add(ro));
                                #endregion

                                #region LeadSources
                                //leadSource a ligar al log
                                List <LeadSource> lstLS = dbContext.LeadSources.Where(ls => lsLeadSourcesLog.Contains(ls.lsID)).ToList();
                                lstLS.ForEach(ls => personnelLog.LeadSources.Add(ls));
                                #endregion

                                #region SalesRoom
                                //SalesRooms a ligar al log
                                List <SalesRoom> lstSr = dbContext.SalesRooms.Where(sr => lstSalesRoomLog.Contains(sr.srID)).ToList();
                                lstSr.ForEach(sr => personnelLog.SalesRooms.Add(sr));
                                #endregion
                            }
                            #endregion

                            nSave += dbContext.SaveChanges();
                            transacction.Commit();
                            return(nSave);
                        }
                        catch
                        {
                            transacction.Rollback();
                            throw;
                        }
                    }
                }
            });

            return(nRes);
        }