public tblMatrizWorkzone UpdateMatriz(tblMatrizWorkzone Matriz)
        {
            var matrizToUpdate = _db.tblMatrizWorkzone.Find(Matriz.idMatrizWZ);

            matrizToUpdate.idWorkzone  = Matriz.idWorkzone;
            matrizToUpdate.Usuario     = Matriz.Usuario;
            matrizToUpdate.DataCriacao = Matriz.DataCriacao;

            _db.Entry(matrizToUpdate).State = EntityState.Modified;
            _db.SaveChanges();


            return(matrizToUpdate);
        }
        public tblMatrizWorkzone CreateMatriz(tblMatrizWorkzone Matriz)
        {
            var exist = GetMatrizByWZId(Matriz.idWorkzone);

            if (exist == null)
            {
                _db.tblMatrizWorkzone.Add(Matriz);

                _db.SaveChanges();

                var matrizCreated = _db.tblMatrizWorkzone
                                    .OrderByDescending(w => w.DataCriacao)
                                    .FirstOrDefault();

                return(matrizCreated);
            }
            else
            {
                return(exist);
            }
        }
        public void TransferirValoresMatrizTempToOficial(int WorkzoneID)
        {
            var exits      = _matrizService.GetMatrizByWZId(WorkzoneID);
            var matrizWz   = new tblMatrizWorkzone();
            var exitsMTemp = _matrizTempService.GetMatrizTempByWZId(WorkzoneID);

            //Se a matriz oficial do WZID existe -> deleta para criar uma nova
            // E deleta seus filhos tbm (Atividades e Treinamentos)
            if (exits != null)
            {
                _matrizFuncActivityService.DeleteMatrizAll(exits.idMatrizWZ);
                _matrizFuncTrainingService.DeleteMatrizAll(exits.idMatrizWZ);
            }



            // VERIFICA SE A MATRIZ TEMPORARIA POSSUI AVALIAÇÕES EM ATIVIDADE
            var avalAtiv = _matrizFuncActivityTempService.GetMatrizTempByIdMWZ(exitsMTemp.idMatrizWZTemp);

            tblMatrizFuncXAtividades        newAtivObj  = new tblMatrizFuncXAtividades();
            List <tblMatrizFuncXAtividades> newAtivList = new List <tblMatrizFuncXAtividades>();

            foreach (var aval in avalAtiv)
            {
                //var matrizOficialAtiv = _matrizFuncActivityService.GetMatrizByFuncXAtiv(exits.idMatrizWZ, aval.idAtividade, aval.idFuncionario);

                //if (matrizOficialAtiv == null)
                //{
                newAtivObj = new tblMatrizFuncXAtividades();

                newAtivObj.idAtividade      = aval.idAtividade;
                newAtivObj.idFuncionario    = aval.idFuncionario;
                newAtivObj.idItemPerfil     = aval.idItemPerfil;
                newAtivObj.cor              = aval.cor;
                newAtivObj.alocacaoForcada  = aval.alocacaoForcada;
                newAtivObj.idMatrizWorkzone = exits.idMatrizWZ;

                newAtivList.Add(newAtivObj);
                //}
            }

            //Cria todas as atividades e suas respectivas avaliações
            if (newAtivList.Count() > 0)
            {
                _matrizFuncActivityService.CreateAllMatriz(newAtivList);
            }


            // VERIFICA SE A MATRIZ TEMP POSSUI AVALIAÇÕES EM TREINAMENTOS
            var avalTrein = _matrizFuncTrainingTempService.GetMatrizTempByIdMWZ(exitsMTemp.idMatrizWZTemp);


            tblMatrizFuncXTreinamento        newTreinObj  = new tblMatrizFuncXTreinamento();
            List <tblMatrizFuncXTreinamento> newTreinList = new List <tblMatrizFuncXTreinamento>();

            foreach (var aval in avalTrein)
            {
                newTreinObj = new tblMatrizFuncXTreinamento();

                newTreinObj.idTreinamento    = aval.idTreinamento;
                newTreinObj.idFuncionario    = aval.idFuncionario;
                newTreinObj.idItemPerfil     = aval.idItemPerfil;
                newTreinObj.idMatrizWorkzone = exits.idMatrizWZ;

                newTreinList.Add(newTreinObj);
            }

            if (newTreinList.Count > 0)
            {
                _matrizFuncTrainingService.CreateAllMatriz(newTreinList);
            }
        }
        public ActionResult Matriz(int WorkzoneID, bool catchValueFromOficial = true)
        {
            CookieHelper.Delete("userId");
            var workzone = _workzone.GetWorkzoneById(WorkzoneID);

            try
            {
                //Veriica se o cara possui permissão para acessar a matriz de acordo com o CC
                //if (!AllowCC(workzone.idCC))
                //{
                //    //Response.Write("<script>alert('Sem acesso a esta tela. Verificar CC cadastrado no AutSis');</script>");
                //    //Thread.Sleep(3000);
                //    return RedirectToAction("Index", new { error = true });
                //}

                // DESCOMENTA ESSA LINHA DE CIMAAAAAAAAAAAAA DEPOIS
                SetImage();

                var exits        = _matrizService.GetMatrizByWZId(WorkzoneID);
                var matrizWz     = new tblMatrizWorkzone();
                var matrizWzTemp = new tblMatrizWorkzoneTemp();
                matrizWz.idMatrizWZ         = 0;
                matrizWzTemp.idMatrizWZTemp = 0;

                //VERIFICA SE A MATRIZ TEMPORÁRIA ESTÁ LIMPA
                var matrizTemp = _matrizTempService.GetMatrizTempByWZId(WorkzoneID);
                if (matrizTemp != null)
                {
                    _matrizFuncActivityTempService.DeleteMatrizTempAll(matrizTemp.idMatrizWZTemp);
                    _matrizFuncTrainingTempService.DeleteMatrizTempAll(matrizTemp.idMatrizWZTemp);
                    _matrizTempService.DeleteMatrizTemp(matrizTemp.idMatrizWZTemp);
                }


                if (exits == null)
                {
                    var username = "";
                    try
                    {
                        username = AuthorizationHelper.GetSystem().Usuario.ChaveAmericas;
                    }
                    catch
                    {
                        username = "";
                    }
                    // CRIA MATRIZ OFICIAL SE ELA N EXISTIR
                    tblMatrizWorkzone matrizXworzoneTemp = new tblMatrizWorkzone();
                    matrizXworzoneTemp.Usuario     = username;
                    matrizXworzoneTemp.DataCriacao = DateTime.Now;
                    matrizXworzoneTemp.idWorkzone  = WorkzoneID;
                    matrizWz = _matrizService.CreateMatriz(matrizXworzoneTemp);
                }
                else
                {
                    matrizWz = exits;
                }
                var exitsMTemp = _matrizTempService.GetMatrizTempByWZId(WorkzoneID);

                if (exitsMTemp == null)
                {
                    var username = "";
                    try
                    {
                        username = AuthorizationHelper.GetSystem().Usuario.ChaveAmericas;
                    }
                    catch
                    {
                        username = "";
                    }

                    // CRIA MATRIZ TEMPORÁRIA ONDE A EDIÇÃO SERÁ FEITA
                    tblMatrizWorkzoneTemp matrizXworzoneTempTemp = new tblMatrizWorkzoneTemp();
                    matrizXworzoneTempTemp.Usuario     = username;
                    matrizXworzoneTempTemp.DataCriacao = DateTime.Now;
                    matrizXworzoneTempTemp.idWorkzone  = WorkzoneID;
                    matrizWzTemp = _matrizTempService.CreateMatrizTemp(matrizXworzoneTempTemp);
                    exitsMTemp   = _matrizTempService.GetMatrizTempByWZId(WorkzoneID);

                    // VERIFICA SE A MATRIZ POSSUI AVALIAÇÕES EM ATIVIDADE
                    var avalAtiv = _matrizFuncActivityService.GetMatrizByMWZId(matrizWz.idMatrizWZ);
                    var idsActv  = new List <int>();

                    if (avalAtiv.Count() > 0)
                    {
                        tblMatrizFuncXAtividadesTemp newAvalObj = new tblMatrizFuncXAtividadesTemp();
                        var existInActivityAssociation          = _workzoneXActivity.GetWorzoneXActivityListByIdWz(matrizWz.idWorkzone);

                        foreach (var aval in avalAtiv)
                        {
                            if (existInActivityAssociation.Where(a => a.tblAtividades.idAtividade == aval.idAtividade) != null)
                            {
                                newAvalObj = new tblMatrizFuncXAtividadesTemp();

                                newAvalObj.idAtividade          = aval.idAtividade;
                                newAvalObj.idFuncionario        = aval.idFuncionario;
                                newAvalObj.idItemPerfil         = aval.idItemPerfil;
                                newAvalObj.idMatrizWorkzoneTemp = matrizWzTemp.idMatrizWZTemp;

                                _matrizFuncActivityTempService.CreateMatrizTemp(newAvalObj);
                            }
                            else
                            {
                                idsActv.Add(aval.idAtividade);
                            }
                        }
                    }


                    // VERIFICA SE A MATRIZ POSSUI AVALIAÇÕES EM TREINAMENTOS
                    var avalTrein = _matrizFuncTrainingService.GetMatrizByIdMWZ(matrizWz.idMatrizWZ);

                    if (avalTrein.Count() > 0)
                    {
                        tblMatrizFuncXTreinamentoTemp newTreinObj = new tblMatrizFuncXTreinamentoTemp();


                        foreach (var aval in avalTrein)
                        {
                            var training = _training.GetTrainingById(aval.idTreinamento);
                            var existTrainingInAssociation = true;

                            //VERIFICA SE AQUELE TREINAMENTO[N] QUE POSSUI AVALIAÇÃO EXISTE AINDA NA ASSOCIAÇÃO
                            // OU SE FOI DESASSOCIADO
                            foreach (var id in idsActv)
                            {
                                var returned = training.tblAtividadeXTreinamentos.Where(a => a.tblAtividades.idAtividade == id);
                                if (returned.Count() > 0)
                                {
                                    existTrainingInAssociation = true;
                                }
                            }

                            if (idsActv.Count == 0)
                            {
                                existTrainingInAssociation = true;
                            }

                            if (existTrainingInAssociation)
                            {
                                newTreinObj = new tblMatrizFuncXTreinamentoTemp();

                                newTreinObj.idTreinamento        = aval.idTreinamento;
                                newTreinObj.idFuncionario        = aval.idFuncionario;
                                newTreinObj.idItemPerfil         = aval.idItemPerfil;
                                newTreinObj.idMatrizWorkzoneTemp = matrizWzTemp.idMatrizWZTemp;

                                _matrizFuncTrainingTempService.CreateMatrizTemp(newTreinObj);
                            }
                        }
                    }
                }

                var activiesList = _workzoneXActivity.SetUpActivitiesList(WorkzoneID);
                List <tblTreinamento>     trainingList = new List <tblTreinamento>();
                List <tblTipoTreinamento> ttList       = new List <tblTipoTreinamento>();


                // OBTER TODAS OS TREINAMENTOS DE TODAS ATIVIDADES DA ZONA
                // E OS SEUS TIPOS
                foreach (var aList in activiesList)
                {
                    //Pega todos IDs de atividades associados a treinamentos DA ZONA
                    foreach (var aXt in aList.tblAtividadeXTreinamentos.OrderBy(t => t.tblTreinamento.idTipoTreinamento))
                    {
                        var x = aList.tblAtividadeXTreinamentos.OrderBy(t => t.tblTreinamento.idTipoTreinamento);

                        var aux = _training.GetTrainingById(aXt.idTreinamento);


                        //Verifica se o treinamento já existe na Lista
                        if (trainingList.Exists(t => t.IdTreinamento == aux.IdTreinamento) == false)
                        {
                            trainingList.Add(aux);
                        }

                        if (ttList.Exists(t => t.IdTipoTreinamento == aux.tblTipoTreinamento.IdTipoTreinamento) == false)
                        {
                            ttList.Add(aux.tblTipoTreinamento);
                        }
                    }
                }

                if (activiesList.Count() > 0 && trainingList.Count() > 0 && workzone.tblWorkzoneXFuncionario.Count() > 0)
                {
                    ViewBag.show = true;
                }
                else
                {
                    ViewBag.show = false;
                }

                ViewBag.trainingList  = trainingList.OrderBy(t => t.idTipoTreinamento);
                ViewBag.activiesList  = activiesList;
                ViewBag.ttList        = ttList.OrderBy(t => t.IdTipoTreinamento);
                ViewBag.tListCount    = trainingList.Count();
                ViewBag.activiesCount = activiesList.Count();
                ViewBag.ttListCount   = ttList.Count();
                ViewBag.MWZID         = matrizWz.idMatrizWZ;
            }
            catch (Exception ex)
            {
                log.Debug(ex.Message.ToString());
            }

            return(View("Matriz", workzone));
        }