public override void RefreshData()
 {
     if (_intBoo != null)
     {
         LoadArea();
         LoadPerson();
         if (_intBoo.CurrentBooking != null)
         {
             comboBoxPlace.SelectedItem   = _intBoo.CurrentBooking.Place;
             dateTimePickerCheckOut.Value = _intBoo.CurrentBooking.CheckOut;
             dateTimePickerCheckIn.Value  = _intBoo.CurrentBooking.CheckIn;
             textBoxPrice.Text            = CRE.GetExpenseFromId(_intBoo.CurrentBooking.ExpenseId, _intBoo.CurrentFinancialActivity.ListCRE)?.Amount.ToString();
             checkBoxConfirmed.Checked    = _intBoo.CurrentBooking.Confirmed;
             comboBoxArea.SelectedItem    = Area.GetAreaFromId(_intBoo.CurrentBooking.AreaId, _intBoo.Areas);
             LoadPayment();
             if (_intBoo.CurrentBooking.UserId != null)
             {
                 comboBoxPerson.SelectedItem = Person.GetPersonFromId(_intBoo.CurrentBooking.UserId, _intBoo.Persons);
             }
         }
         else
         {
             dateTimePickerCheckOut.Value = DateTime.Now.AddDays(1);
             dateTimePickerCheckIn.Value  = DateTime.Now;
         }
     }
     GetPrice();
 }
        private void RefreshDataGridView()
        {
            Area            area;
            Person          person;
            DataGridViewRow row;

            _dgvSearch.Rows.Clear();
            foreach (Booking booking in _filteredList.OrderBy(f => f.CheckIn))
            {
                area   = Area.GetAreaFromId(booking.AreaId, _intBoo.Areas);
                person = Person.GetPersonFromId(booking.UserId, _intBoo.Persons);

                _dgvSearch.Rows.Add();
                row     = _dgvSearch.Rows[_dgvSearch.Rows.Count - 1];
                row.Tag = booking.Id;
                row.Cells[ColumnArea.Index].Value = area != null?area.ToString() : string.Empty;

                row.Cells[ColumnUser.Index].Value = person != null?person.ToString() : string.Empty;

                row.Cells[ColumnConfirmed.Index].Value = booking.Confirmed;
                row.Cells[ColumnPrice.Index].Value     = CRE.GetExpenseFromId(booking.ExpenseId, _intBoo.CurrentFinancialActivity.ListCRE)?.Amount;
                row.Cells[ColumnPaid.Index].Value      = CRE.GetExpenseFromId(booking.ExpenseId, _intBoo.CurrentFinancialActivity.ListCRE)?.Paid;
                row.Cells[ColumnCheckIn.Index].Value   = booking.CheckIn.ToShortDateString();
                row.Cells[ColumnCheckOut.Index].Value  = booking.CheckOut.ToShortDateString();
                row.Cells[ColumnEdit.Index].Value      = Tools4Libraries.Resources.ResourceIconSet16Default.vcard_edit;
                row.Cells[ColumnDelete.Index].Value    = Tools4Libraries.Resources.ResourceIconSet16Default.vcard_delete;
                row.Cells[ColumnDetails.Index].Value   = Tools4Libraries.Resources.ResourceIconSet16Default.vcard;
            }

            _dgvSearch.Visible = _dgvSearch.Rows.Count != 0;
            _dgvSearch.Height  = (_dgvSearch.Rows.Count * 22) + _dgvSearch.ColumnHeadersHeight;
        }
        private void UpdateCurrentBook()
        {
            Movement mov;

            if (_intBoo.CurrentBooking == null)
            {
                _intBoo.CurrentBooking = new Booking();
            }
            if (string.IsNullOrEmpty(_intBoo.CurrentBooking.ExpenseId))
            {
                CRE exp = new CRE();
                _intBoo.CurrentBooking.ExpenseId = exp.Id;
                _intBoo.CurrentFinancialActivity.ListCRE.Add(exp);
            }

            try
            {
                CRE    exp          = CRE.GetExpenseFromId(_intBoo.CurrentBooking.ExpenseId, _intBoo.CurrentFinancialActivity.ListCRE);
                Area   filterArea   = (!string.IsNullOrEmpty(comboBoxArea.Text)) ? (Area)comboBoxArea.SelectedItem : null;
                Person filterPerson = (!string.IsNullOrEmpty(comboBoxPerson.Text)) ? (Person)comboBoxPerson.SelectedItem : null;

                if (filterArea != null)
                {
                    _intBoo.CurrentBooking.AreaId = filterArea.Id;
                }
                if (filterPerson != null)
                {
                    _intBoo.CurrentBooking.UserId = filterPerson.Id;
                }
                _intBoo.CurrentBooking.CheckIn   = dateTimePickerCheckIn.Value;
                _intBoo.CurrentBooking.CheckOut  = dateTimePickerCheckOut.Value;
                _intBoo.CurrentBooking.Confirmed = checkBoxConfirmed.Checked;
                _intBoo.CurrentBooking.Place     = (comboBoxPlace.SelectedItem == null) ? string.Empty : comboBoxPlace.SelectedItem.ToString();

                exp.Amount    = (string.IsNullOrEmpty(textBoxPrice.Text)) ? 0 : double.Parse(textBoxPrice.Text);
                exp.StartDate = dateTimePickerCheckIn.Value;
                exp.EndDate   = dateTimePickerCheckOut.Value;

                CRE.GetExpenseFromId(_intBoo.CurrentBooking.ExpenseId, _intBoo.CurrentFinancialActivity.ListCRE).Movements.Clear();
                foreach (DataGridViewRow row in _dataGridViewMovement.Rows)
                {
                    mov           = new Movement();
                    mov.StartDate = DateTime.Parse(row.Cells[ColumnDate.Index].Value.ToString());
                    mov.UserId.Add(Person.GetUserByText(row.Cells[ColumnUser.Index].Value, _intBoo.Persons)?.Id);
                    mov.Amount = float.Parse(row.Cells[ColumnAmount.Index].Value.ToString());
                    mov.Gop    = (Movement.GOP)Enum.Parse(typeof(Movement.GOP), row.Cells[ColumnSupport.Index].Value.ToString());
                    CRE.GetExpenseFromId(_intBoo.CurrentBooking.ExpenseId, _intBoo.CurrentFinancialActivity.ListCRE).Movements.Add(mov);
                }
            }
            catch (Exception)
            {
            }
        }
        private void Filter()
        {
            Area   filterArea   = comboBoxArea.SelectedItem.ToString() != "All" ? (Area)comboBoxArea.SelectedItem : null;
            Person filterPerson = comboBoxUsers.SelectedItem.ToString() != "All" ? (Person)comboBoxUsers.SelectedItem : null;

            _filteredList = _intBoo.Bookings;

            if (filterArea != null)
            {
                _filteredList = _filteredList.Where(f => f.AreaId.Equals(filterArea.Id)).ToList();
            }
            if (filterPerson != null)
            {
                _filteredList = _filteredList.Where(f => f.UserId.Equals(filterPerson.Id)).ToList();
            }
            if (!dateTimePickerEnd.Value.Equals(dateTimePickerEnd.MaxDate))
            {
                _filteredList = _filteredList.Where(f => f.CheckOut.Date <= dateTimePickerEnd.Value.Date).ToList();
            }
            if (!dateTimePickerStart.Value.Equals(dateTimePickerStart.MinDate))
            {
                _filteredList = _filteredList.Where(f => f.CheckIn.Date >= dateTimePickerStart.Value.Date).ToList();
            }

            if (checkBoxCompletedPaiements.Checked && !checkBoxNonCompletedPaiement.Checked)
            {
                _filteredList = _filteredList.Where(f => CRE.GetExpenseFromId(f.ExpenseId, _intBoo.CurrentFinancialActivity.ListCRE)?.Paid >= CRE.GetExpenseFromId(f.Id, _intBoo.CurrentFinancialActivity.ListCRE)?.Amount).ToList();
            }
            if (!checkBoxCompletedPaiements.Checked && checkBoxNonCompletedPaiement.Checked)
            {
                _filteredList = _filteredList.Where(f => CRE.GetExpenseFromId(f.ExpenseId, _intBoo.CurrentFinancialActivity.ListCRE)?.Paid < CRE.GetExpenseFromId(f.Id, _intBoo.CurrentFinancialActivity.ListCRE)?.Amount).ToList();
            }
            if (checkBoxConfirmedbooking.Checked && !checkBoxNonConfirmedbooking.Checked)
            {
                _filteredList = _filteredList.Where(f => f.Confirmed == true).ToList();
            }
            if (!checkBoxConfirmedbooking.Checked && checkBoxNonConfirmedbooking.Checked)
            {
                _filteredList = _filteredList.Where(f => f.Confirmed == false).ToList();
            }

            if (numericUpDownMaxPrice.Value != numericUpDownMaxPrice.Maximum)
            {
                _filteredList = _filteredList.Where(f => CRE.GetExpenseFromId(f.ExpenseId, _intBoo.CurrentFinancialActivity.ListCRE)?.Amount <= (double)numericUpDownMaxPrice.Value).ToList();
            }
            if (numericUpDownMinPrice.Value != numericUpDownMinPrice.Minimum)
            {
                _filteredList = _filteredList.Where(f => CRE.GetExpenseFromId(f.ExpenseId, _intBoo.CurrentFinancialActivity.ListCRE)?.Amount >= (double)numericUpDownMinPrice.Value).ToList();
            }

            RefreshDataGridView();
        }
        private void LoadPayment()
        {
            DataGridViewRow row;

            _dataGridViewMovement.Rows.Clear();
            var expense = CRE.GetExpenseFromId(_intBoo.CurrentBooking.ExpenseId, _intBoo.CurrentFinancialActivity.ListCRE);

            if (expense != null)
            {
                foreach (Movement mov in expense.Movements)
                {
                    _dataGridViewMovement.Rows.Add();
                    row = _dataGridViewMovement.Rows[_dataGridViewMovement.Rows.Count - 1];
                    row.Cells[ColumnUser.Index].Value    = Person.GetPersonFromId(mov.UserId?.FirstOrDefault(), _intBoo.Persons);
                    row.Cells[ColumnSupport.Index].Value = mov.Gop;
                    row.Cells[ColumnAmount.Index].Value  = mov.Amount;
                    row.Cells[ColumnDate.Index].Value    = mov.StartDate.ToShortDateString();
                    row.Cells[ColumnEdit.Index].Value    = Tools4Libraries.Resources.ResourceIconSet16Default.cog_edit;
                    row.Cells[ColumnDelete.Index].Value  = Tools4Libraries.Resources.ResourceIconSet16Default.cross;
                }
            }
        }
        private void AddPayment()
        {
            DataGridViewRow row;
            Movement        mov = new Movement();

            _intBoo.CurrentUser = (Person)comboBoxPerson.SelectedItem;
            mov.Amount          = float.Parse(textBoxNewPayment.Text);
            mov.UserId.Add(_intBoo.CurrentUser.Id);
            mov.StartDate = DateTime.Now;
            mov.Gop       = (Movement.GOP)Enum.Parse(typeof(Movement.GOP), comboBoxCash.SelectedItem.ToString());

            if (_intBoo.CurrentBooking.ExpenseId == null)
            {
                CRE exp = new CRE();
                exp.StartDate   = _intBoo.CurrentBooking.CheckIn;
                exp.EndDate     = _intBoo.CurrentBooking.CheckOut;
                exp.Description = textBoxDescription.Text;
                //exp.Save(_intBoo.CurrentFinancialActivity.PathActivity);
                exp.Movements.Add(mov);
                _intBoo.CurrentBooking.ExpenseId = exp.Id;
                _intBoo.CurrentFinancialActivity.ListCRE.Add(exp);
            }
            else
            {
                CRE.GetExpenseFromId(_intBoo.CurrentBooking.ExpenseId, _intBoo.CurrentFinancialActivity.ListCRE).Movements.Add(mov);
            }

            _dataGridViewMovement.Rows.Add();
            row = _dataGridViewMovement.Rows[_dataGridViewMovement.Rows.Count - 1];
            row.Cells[ColumnUser.Index].Value    = (Person)comboBoxPerson.SelectedItem;
            row.Cells[ColumnSupport.Index].Value = mov.Gop;
            row.Cells[ColumnAmount.Index].Value  = mov.Amount;
            row.Cells[ColumnDate.Index].Value    = mov.StartDate.ToShortDateString();
            row.Cells[ColumnEdit.Index].Value    = Tools4Libraries.Resources.ResourceIconSet16Default.cog_edit;
            row.Cells[ColumnDelete.Index].Value  = Tools4Libraries.Resources.ResourceIconSet16Default.cross;

            SaveBook();
        }
        public static SessaoLocal GetSessaoLocal(Sessao sessaoCorrente, DbContext _db)
        {
            ApplicationContext db          = (ApplicationContext)_db;
            SessaoLocal        SessaoLocal = new SessaoLocal()
            {
                dt_atualizacao = sessaoCorrente.dt_atualizacao,
                dt_criacao     = sessaoCorrente.dt_criacao,
                dt_desativacao = sessaoCorrente.dt_desativacao,
                empresaId      = sessaoCorrente.empresaId,
                ip             = sessaoCorrente.ip,
                isOnline       = sessaoCorrente.isOnline,
                login          = sessaoCorrente.login,
                sessaoId       = sessaoCorrente.sessaoId,
                sistemaId      = sessaoCorrente.sistemaId,
                usuarioId      = sessaoCorrente.usuarioId,
                value1         = sessaoCorrente.value1,
                value2         = sessaoCorrente.value2,
                value3         = sessaoCorrente.value3,
                value4         = sessaoCorrente.value4,
            };

            #region É Condômino?
            if ((from con in db.Condominos
                 join cre in db.Credenciados on con.CondominoID equals cre.CondominoID into CRE
                 from cre in CRE.DefaultIfEmpty()
                 where con.CondominioID == SessaoLocal.empresaId && (con.UsuarioID == SessaoLocal.usuarioId || cre.UsuarioID == SessaoLocal.usuarioId) && con.IndSituacao == "A"
                 select con.CondominoID).Count() > 0)
            {
                #region CondominoID
                SessaoLocal.CondominoID = (from con in db.Condominos
                                           join cre in db.Credenciados on con.CondominoID equals cre.CondominoID into CRE
                                           from cre in CRE.DefaultIfEmpty()
                                           where con.CondominioID == SessaoLocal.empresaId && (con.UsuarioID == SessaoLocal.usuarioId || cre.UsuarioID == SessaoLocal.usuarioId) && con.IndSituacao == "A"
                                           select con.CondominoID).FirstOrDefault();
                #endregion

                #region CredenciadoID
                SessaoLocal.CredenciadoID = (from con in db.Condominos
                                             join cre in db.Credenciados on con.CondominoID equals cre.CondominoID
                                             where con.CondominioID == SessaoLocal.empresaId && cre.UsuarioID == SessaoLocal.usuarioId && con.IndSituacao == "A"
                                             select cre.CredenciadoID).FirstOrDefault();
                #endregion

                #region Grupos do Condômino
                var _GrupoCondominoID = (from g in db.GrupoCondominoUsuarios where g.CondominoID == SessaoLocal.CondominoID select g.GrupoCondominoID).AsEnumerable();
                if (_GrupoCondominoID.Count() > 0)
                {
                    int i = 0;
                    SessaoLocal.GrupoCondominoID = new int[_GrupoCondominoID.Count()];
                    foreach (int GrupoCondominoID in _GrupoCondominoID)
                    {
                        SessaoLocal.GrupoCondominoID[i++] = GrupoCondominoID;
                    }
                }
                #endregion

                SessaoLocal.Unidades = (from uni in db.Unidades
                                        join con in db.CondominoUnidades on new { uni.CondominioID, uni.EdificacaoID, uni.UnidadeID } equals new { con.CondominioID, con.EdificacaoID, con.UnidadeID }
                                        where con.CondominoID == SessaoLocal.CondominoID
                                        select uni).ToList();
            }
            else
            {
                #region É Fornecedor
                SessaoLocal.FilaFornecedorID = (from f in db.FilaAtendimentos
                                                join u in db.FilaAtendimentoUsuarios on f.FilaAtendimentoID equals u.FilaAtendimentoID
                                                where f.CondominioID == SessaoLocal.empresaId &&
                                                u.UsuarioID == SessaoLocal.usuarioId &&
                                                u.Situacao == "A" &&
                                                f.IsFornecedor == "S"
                                                select f.FilaAtendimentoID).FirstOrDefault();
                #endregion
            }
            #endregion

            return(SessaoLocal);
        }
        private void LoadBookingsPayment()
        {
            int            indexRow;
            int            seuilAM, seuilPM;
            int            paidAM, paidPM;
            int            percentAM, percentPM;
            List <Booking> bookingContinuous;
            List <Booking> bookingCheckIn;
            List <Booking> bookingCheckOut;

            int[] indexColumns;

            foreach (Booking booking in _intBoo.Bookings)
            {
                var res = (from r in _dataGridViewPreview.Rows.Cast <DataGridViewRow>() where (((Area)r.Tag).Id).Equals(booking.AreaId) select r.Index).ToList();
                if (res.Count > 0)
                {
                    indexRow     = res.First();
                    indexColumns = (from c in _dataGridViewPreview.Columns.Cast <DataGridViewColumn>() where ((DateTime)c.Tag) >= booking.CheckIn && ((DateTime)c.Tag) <= booking.CheckOut.AddDays(1) select c.Index).ToArray();

                    foreach (int indexColumn in indexColumns)
                    {
                        bookingContinuous = _intBoo.Bookings.Where(b =>
                                                                   b.CheckIn.Date <((DateTime)_dataGridViewPreview.Columns[indexColumn].Tag).Date &&
                                                                                   b.CheckOut.Date> ((DateTime)_dataGridViewPreview.Columns[indexColumn].Tag).Date&&
                                                                   b.AreaId.Equals(((Area)_dataGridViewPreview.Rows[indexRow].Tag).Id)).ToList();

                        bookingCheckIn = _intBoo.Bookings.Where(b =>
                                                                b.CheckIn.Date == ((DateTime)_dataGridViewPreview.Columns[indexColumn].Tag).Date &&
                                                                b.CheckOut.Date > ((DateTime)_dataGridViewPreview.Columns[indexColumn].Tag).Date &&
                                                                b.AreaId.Equals(((Area)_dataGridViewPreview.Rows[indexRow].Tag).Id)).ToList();
                        bookingCheckIn.AddRange(bookingContinuous);

                        bookingCheckOut = _intBoo.Bookings.Where(b =>
                                                                 b.CheckIn.Date < ((DateTime)_dataGridViewPreview.Columns[indexColumn].Tag).Date &&
                                                                 b.CheckOut.Date == ((DateTime)_dataGridViewPreview.Columns[indexColumn].Tag).Date &&
                                                                 b.AreaId.Equals(((Area)_dataGridViewPreview.Rows[indexRow].Tag).Id)).ToList();
                        bookingCheckOut.AddRange(bookingContinuous);

                        paidPM    = bookingCheckIn.Where(b => CRE.GetExpenseFromId(b.ExpenseId, _intBoo.CurrentFinancialActivity.ListCRE).Amount == CRE.GetExpenseFromId(b.ExpenseId, _intBoo.CurrentFinancialActivity.ListCRE).Paid).Count();
                        paidAM    = bookingCheckOut.Where(b => CRE.GetExpenseFromId(b.ExpenseId, _intBoo.CurrentFinancialActivity.ListCRE).Amount == CRE.GetExpenseFromId(b.ExpenseId, _intBoo.CurrentFinancialActivity.ListCRE).Paid).Count();
                        percentAM = (bookingCheckOut.Count > 0) ? ((paidAM * 100) / bookingCheckOut.Count) : 0;
                        percentPM = (bookingCheckIn.Count > 0) ? ((paidPM * 100) / bookingCheckIn.Count) : 0;

                        if (bookingCheckIn.Count > 0 && percentAM == 100)
                        {
                            seuilAM = 2;
                        }
                        else if (bookingCheckIn.Count > 0 && percentAM > 50)
                        {
                            seuilAM = 0;
                        }
                        else if (bookingCheckIn.Count > 0)
                        {
                            seuilAM = 1;
                        }
                        else
                        {
                            seuilAM = 3;
                        }

                        if (bookingCheckOut.Count > 0 && percentPM == 100)
                        {
                            seuilPM = 2;
                        }
                        else if (bookingCheckOut.Count > 0 && percentPM > 50)
                        {
                            seuilPM = 0;
                        }
                        else if (bookingCheckOut.Count > 0)
                        {
                            seuilPM = 1;
                        }
                        else
                        {
                            seuilPM = 3;
                        }

                        (_dataGridViewPreview.Rows[indexRow].Cells[indexColumn] as TextAndImageCell).Value = string.Format("AM {0} - PM {1}", (bookingCheckOut.Count > 0) ? percentAM.ToString() + "%" : "N/A", (bookingCheckIn.Count > 0) ? percentPM.ToString() + "%" : "N/A");

                        ProcessColoration(bookingCheckIn.Count, bookingCheckOut.Count, seuilAM, seuilPM, indexRow, indexColumn);
                    }
                }
            }
        }
        public override IEnumerable <ChamadoViewModel> Bind(int?index, int pageSize = 50, params object[] param)
        {
            #region parâmetros

            /* 0. Data1
             * 1. Data2
             * 2. ChamadoMotivoID
             * 3. ChamadoStatusID
             * 4. FilaSolicitanteID
             * 5. FilaAtendimentoID
             * 6. EdificacaoID
             * 7. UnidadeID
             */

            DateTime _data1             = (DateTime)param[0];
            DateTime _data2             = (DateTime)param[1];
            int?     _ChamadoMotivoID   = (int?)param[2];
            int?     _ChamadoStatusID   = (int?)param[3];
            int?     _FilaSolicitanteID = (int?)param[4];
            int?     _FilaAtendimentoID = (int?)param[5];
            int?     _EdificacaoID      = (int?)param[6];
            int?     _UnidadeID         = (int?)param[7];
            #endregion

            var x = (from cha in db.Chamados
                     join FilaAtual in db.FilaAtendimentos on cha.FilaAtendimentoID equals FilaAtual.FilaAtendimentoID
                     join con in db.Condominos on cha.CondominoID equals con.CondominoID into CON
                     from con in CON.DefaultIfEmpty()
                     join cre in db.Credenciados on cha.CredenciadoID equals cre.CredenciadoID into CRE
                     from cre in CRE.DefaultIfEmpty()
                     join edi in db.Edificacaos on cha.EdificacaoID equals edi.EdificacaoID into EDI
                     from edi in EDI.DefaultIfEmpty()
                     join uni in db.Unidades on new { CondominioID = cha.CondominioID, EdificacaoID = cha.EdificacaoID.Value, UnidadeID = cha.UnidadeID.Value } equals new { uni.CondominioID, uni.EdificacaoID, uni.UnidadeID } into UNI
                     from uni in UNI.DefaultIfEmpty()
                     join sta in db.ChamadoStatuss on cha.ChamadoStatusID equals sta.ChamadoStatusID
                     join mot in db.ChamadoMotivos on cha.ChamadoMotivoID equals mot.ChamadoMotivoID
                     where cha.CondominioID == SessaoLocal.empresaId &&
                     cha.DataChamado >= _data1 && cha.DataChamado <= _data2 &&
                     sta.CondominioID == SessaoLocal.empresaId &&
                     mot.CondominioID == SessaoLocal.empresaId &&
                     (!_EdificacaoID.HasValue || (cha.EdificacaoID == _EdificacaoID && cha.UnidadeID == _UnidadeID)) &&
                     (!_FilaAtendimentoID.HasValue || cha.FilaAtendimentoID == _FilaAtendimentoID) &&
                     (!_FilaSolicitanteID.HasValue || cha.FilaSolicitanteID == _FilaSolicitanteID) &&
                     (!_ChamadoMotivoID.HasValue || cha.ChamadoMotivoID == _ChamadoMotivoID) &&
                     (!_ChamadoStatusID.HasValue || cha.ChamadoStatusID == _ChamadoStatusID)
                     orderby cha.DataChamado descending
                     select new ChamadoViewModel
            {
                empresaId = SessaoLocal.empresaId,
                ChamadoID = cha.ChamadoID,
                ChamadoMotivoID = cha.ChamadoMotivoID,
                DescricaoChamadoMotivo = mot.Descricao,
                ChamadoStatusID = cha.ChamadoStatusID,
                DescricaoChamadoStatus = sta.Descricao,
                FilaSolicitanteID = cha.FilaSolicitanteID,
                DescricaoFilaSolicitante = (from fil in db.FilaAtendimentos where fil.CondominioID == SessaoLocal.empresaId && fil.FilaAtendimentoID == cha.FilaSolicitanteID select fil.Descricao).FirstOrDefault(),
                FilaAtendimentoID = cha.FilaAtendimentoID,
                DescricaoFilaAtendimento = FilaAtual.Descricao,
                CondominoID = cha.CondominoID,
                CredenciadoID = cha.CredenciadoID,
                NomeCondomino = con != null ? con.Nome : "",
                NomeCredenciado = cre != null ? cre.Nome : "",
                EdificacaoID = cha.EdificacaoID,
                DescricaoEdificacao = edi.Descricao,
                UnidadeID = cha.UnidadeID,
                Codigo = uni.Codigo,
                DataChamado = cha.DataChamado,
                Assunto = cha.Assunto,
                UsuarioID = cha.UsuarioID,
                NomeUsuario = cha.NomeUsuario,
                LoginUsuario = cha.LoginUsuario,
                Prioridade = cha.Prioridade,
                DataUltimaAnotacao = cha.DataUltimaAnotacao,
                DataRedirecionamento = cha.DataRedirecionamento,
                UsuarioFilaID = cha.UsuarioFilaID,
                NomeUsuarioFila = cha.NomeUsuarioFila,
                LoginUsuarioFila = cha.LoginUsuarioFila
            }).ToList();
            return(x);
        }
        public override IEnumerable <ChamadoViewModel> Bind(int?index, int pageSize = 50, params object[] param)
        {
            #region parâmetros

            /* 0. Período:
             *      007 última semana
             *      030 últimos 30 dias
             *      060 últimos 60 dias
             *      090 Últimos 90 dias
             *      180 Últimos 180 dias
             *
             * 1. Edificação
             * 2. Unidade
             * 3. Condômino
             * 4. Fila de atendimento
             * 5. Chamado Motivo =>> Null = Todos
             * 6. Chamado Status =>> Null = Todos             *
             */

            #region Param1: Período
            DateTime _data1 = _data1 = Funcoes.Brasilia().Date.AddDays(-(int)param[0]);
            DateTime _data2 = Funcoes.Brasilia().Date;
            #endregion

            int?_EdificacaoID      = (int?)param[1];
            int?_UnidadeID         = (int?)param[2];
            int?_CondominoID       = (int?)param[3];
            int?_FilaAtendimentoID = (int?)param[4];
            int?_ChamadoMotivoID   = (int?)param[5];
            int?_ChamadoStatusID   = (int?)param[6];
            #endregion

            return((from cha in db.Chamados
                    join FilaAtual in db.FilaAtendimentos on cha.FilaAtendimentoID equals FilaAtual.FilaAtendimentoID
                    join con in db.Condominos on cha.CondominoID equals con.CondominoID into CON
                    from con in CON.DefaultIfEmpty()
                    join cre in db.Credenciados on cha.CredenciadoID equals cre.CredenciadoID into CRE
                    from cre in CRE.DefaultIfEmpty()
                    join edi in db.Edificacaos on cha.EdificacaoID equals edi.EdificacaoID into EDI
                    from edi in EDI.DefaultIfEmpty()
                    join uni in db.Unidades on new { CondominioID = cha.CondominioID, EdificacaoID = cha.EdificacaoID.Value, UnidadeID = cha.UnidadeID.Value } equals new { uni.CondominioID, uni.EdificacaoID, uni.UnidadeID } into UNI
                    from uni in UNI.DefaultIfEmpty()
                    join sta in db.ChamadoStatuss on cha.ChamadoStatusID equals sta.ChamadoStatusID
                    join mot in db.ChamadoMotivos on cha.ChamadoMotivoID equals mot.ChamadoMotivoID
                    where cha.CondominioID == SessaoLocal.empresaId &&
                    cha.DataChamado >= _data1 && cha.DataChamado <= _data2 &&
                    sta.CondominioID == SessaoLocal.empresaId &&
                    mot.CondominioID == SessaoLocal.empresaId &&
                    (!_EdificacaoID.HasValue || (cha.EdificacaoID == _EdificacaoID && cha.UnidadeID == _UnidadeID)) &&
                    (!_CondominoID.HasValue || cha.CondominoID == _CondominoID) &&
                    (!_FilaAtendimentoID.HasValue || cha.FilaAtendimentoID == _FilaAtendimentoID) &&
                    (!_ChamadoMotivoID.HasValue || cha.ChamadoMotivoID == _ChamadoMotivoID) &&
                    (!_ChamadoStatusID.HasValue || cha.ChamadoStatusID == _ChamadoStatusID)
                    orderby cha.DataChamado descending
                    select new ChamadoViewModel
            {
                empresaId = SessaoLocal.empresaId,
                ChamadoID = cha.ChamadoID,
                ChamadoMotivoID = cha.ChamadoMotivoID,
                DescricaoChamadoMotivo = mot.Descricao,
                ChamadoStatusID = cha.ChamadoStatusID,
                DescricaoChamadoStatus = sta.Descricao,
                FilaSolicitanteID = cha.FilaSolicitanteID,
                DescricaoFilaSolicitante = (from fil in db.FilaAtendimentos where fil.CondominioID == SessaoLocal.empresaId && fil.FilaAtendimentoID == cha.FilaSolicitanteID select fil.Descricao).FirstOrDefault(),
                FilaAtendimentoID = cha.FilaAtendimentoID,
                DescricaoFilaAtendimento = FilaAtual.Descricao,
                CondominoID = cha.CondominoID,
                CredenciadoID = cha.CredenciadoID,
                NomeCondomino = con != null ? con.Nome : "",
                NomeCredenciado = cre != null ? cre.Nome : "",
                EdificacaoID = cha.EdificacaoID,
                DescricaoEdificacao = edi.Descricao,
                UnidadeID = cha.UnidadeID,
                Codigo = uni.Codigo,
                DataChamado = cha.DataChamado,
                Assunto = cha.Assunto,
                UsuarioID = cha.UsuarioID,
                NomeUsuario = cha.NomeUsuario,
                LoginUsuario = cha.LoginUsuario,
                Prioridade = cha.Prioridade,
                DataUltimaAnotacao = cha.DataUltimaAnotacao,
                DataRedirecionamento = cha.DataRedirecionamento,
                UsuarioFilaID = cha.UsuarioFilaID,
                NomeUsuarioFila = cha.NomeUsuarioFila,
                LoginUsuarioFila = cha.LoginUsuarioFila
            }).ToList());
        }
        public override IEnumerable <ChamadoViewModel> Bind(int?index, int pageSize = 50, params object[] param)
        {
            int _FilaCondominoID = DWMSessaoLocal.FilaCondominoID(sessaoCorrente, this.db);

            return((from cha in db.Chamados
                    join FilaAtual in db.FilaAtendimentos on cha.FilaAtendimentoID equals FilaAtual.FilaAtendimentoID
                    join con in db.Condominos on cha.CondominoID equals con.CondominoID into CON
                    from con in CON.DefaultIfEmpty()
                    join cre in db.Credenciados on cha.CredenciadoID equals cre.CredenciadoID into CRE
                    from cre in CRE.DefaultIfEmpty()
                    join edi in db.Edificacaos on cha.EdificacaoID equals edi.EdificacaoID into EDI
                    from edi in EDI.DefaultIfEmpty()
                    join uni in db.Unidades on new { CondominioID = cha.CondominioID, EdificacaoID = cha.EdificacaoID.Value, UnidadeID = cha.UnidadeID.Value } equals new { uni.CondominioID, uni.EdificacaoID, uni.UnidadeID } into UNI
                    from uni in UNI.DefaultIfEmpty()
                    join sta in db.ChamadoStatuss on cha.ChamadoStatusID equals sta.ChamadoStatusID
                    join mot in db.ChamadoMotivos on cha.ChamadoMotivoID equals mot.ChamadoMotivoID
                    where  cha.CondominioID == SessaoLocal.empresaId &&
                    sta.CondominioID == SessaoLocal.empresaId &&
                    mot.CondominioID == SessaoLocal.empresaId &&
                    ((cha.ChamadoStatusID == 3 && (SessaoLocal.CondominoID > 0 || SessaoLocal.CredenciadoID > 0)) ||
                     cha.ChamadoStatusID != 3) &&       // 3-Encerrado
                    (cha.UsuarioID == SessaoLocal.usuarioId || cha.UsuarioFilaID == SessaoLocal.usuarioId ||
                     (cha.CondominoID.HasValue && cha.CondominoID == SessaoLocal.CondominoID && SessaoLocal.CondominoID > 0) ||
                     (from usu in db.FilaAtendimentoUsuarios
                      where usu.FilaAtendimentoID == cha.FilaAtendimentoID
                      select usu.UsuarioID).Contains(SessaoLocal.usuarioId))
                    orderby cha.DataChamado descending
                    select new ChamadoViewModel
            {
                empresaId = SessaoLocal.empresaId,
                ChamadoID = cha.ChamadoID,
                ChamadoMotivoID = cha.ChamadoMotivoID,
                DescricaoChamadoMotivo = mot.Descricao,
                ChamadoStatusID = cha.ChamadoStatusID,
                DescricaoChamadoStatus = sta.Descricao,
                FilaSolicitanteID = cha.FilaSolicitanteID,
                DescricaoFilaSolicitante = (from fil in db.FilaAtendimentos where fil.CondominioID == SessaoLocal.empresaId && fil.FilaAtendimentoID == cha.FilaSolicitanteID select fil.Descricao).FirstOrDefault(),
                FilaAtendimentoID = cha.FilaAtendimentoID,
                DescricaoFilaAtendimento = FilaAtual.Descricao,
                FilaCondominoID = _FilaCondominoID,
                CondominoID = cha.CondominoID,
                CredenciadoID = cha.CredenciadoID,
                NomeCondomino = con != null ? con.Nome : "",
                NomeCredenciado = cre != null ? cre.Nome : "",
                EdificacaoID = cha.EdificacaoID,
                DescricaoEdificacao = edi.Descricao,
                UnidadeID = cha.UnidadeID,
                Codigo = uni.Codigo,
                DataChamado = cha.DataChamado,
                Assunto = cha.Assunto,
                UsuarioID = cha.UsuarioID,
                NomeUsuario = cha.NomeUsuario,
                LoginUsuario = cha.LoginUsuario,
                Prioridade = cha.Prioridade,
                DataUltimaAnotacao = cha.DataUltimaAnotacao,
                DataRedirecionamento = cha.DataRedirecionamento,
                UsuarioFilaID = cha.UsuarioFilaID,
                NomeUsuarioFila = cha.NomeUsuarioFila,
                LoginUsuarioFila = cha.LoginUsuarioFila
            }).ToList());
        }