text: var pages = pages || {};
  pages.estabelecimento = pages.estabelecimento || {};
  
  pages.estabelecimento.model = function () {
  
      var vmEstabelecimento = function (estabelecimento) {
          var self = this;
  
          self.estabelecimentoId = ko.observable();
          self.nome = ko.observable();
          self.email = ko.observable();
          self.descricao = ko.observable();        
          self.url = ko.observable();
          self.telefone = ko.observable();
          self.celular = ko.observable();
          self.instagram = ko.observable();
          self.facebook = ko.observable();
          self.dataCadastro = ko.observable();
          self.situacao = ko.observable();
          self.urlCompleta = ko.observable();
  
          if (estabelecimento) {
              self.estabelecimentoId(estabelecimento.estabelecimentoId);
              self.nome(estabelecimento.nome);
              self.email(estabelecimento.email);
              self.descricao(estabelecimento.descricao);
              self.url(estabelecimento.url);
              self.telefone(estabelecimento.telefone);
              self.celular(estabelecimento.celular);
              self.instagram(estabelecimento.instagram);
              self.facebook(estabelecimento.facebook);
              self.dataCadastro(estabelecimento.dataCadastro);
              self.situacao(estabelecimento.situacao);
              self.urlCompleta(URL_SITE + '/Login/Index/' + estabelecimento.url);
          }
      };    
  
      return {       
          vmEstabelecimento
      };
  }();
  var pages = pages || {};
  pages.estabelecimento = pages.estabelecimento || {};
  
  pages.estabelecimento.services = function () {  
  
      var obterTodos = function (estabelecimentoNomeUrl) {
          var url = pages.metadata.actionUrl("/api/estabelecimentos?url=" + estabelecimentoNomeUrl);
          return pages.dataServices.get(url);
      }
  
      var salvar = function (parametro) {
          var url = pages.metadata.actionUrl("/api/estabelecimentos");
          return pages.dataServices.postAjax(url, parametro);
      }
  
      var obterPorId = function (id) {
          var url = pages.metadata.actionUrl("/api/estabelecimentos/" + id);
          return pages.dataServices.get(url);
      }           
  
      var deletar = function (id) {
          var url = pages.metadata.actionUrl("/api/estabelecimentos/" + id);
          return pages.dataServices.deleteAjax(url);
      }  
  
      var atualizar = function (id, parametro) {
          var url = pages.metadata.actionUrl("/api/estabelecimentos/" + id);
          return pages.dataServices.putAjax(url, parametro);
      } 
  
      return {       
          obterTodos,
          obterPorId,
          atualizar,
          salvar,
          deletar
      };
  }();
  var pages = pages || {};
  pages.estabelecimento = pages.estabelecimento || {};
  pages.estabelecimento.model = pages.estabelecimento.model || {};
  pages.estabelecimento.services = pages.estabelecimento.services || {};
  
  pages.metadata = pages.metadata || {};
  pages.dataServices = pages.dataServices || {};
  pages.utils = pages.utils || {};
  
  pages.estabelecimento.viewModel = function () {   
      var model = pages.estabelecimento.model;
      var service = pages.estabelecimento.services;
     
      var viewModelEstabelecimento = new function () {
          var self = this;       
          
          self.estabelecimentos = ko.observableArray([]);
          self.datatable = ko.observable();
          self.usuarioLogado = ko.observable(new pages.menu.model.vmUsuarioLogado(getDataToken()));
          self.permiteCadastrar = ko.observable(false);
          self.permiteExcluir = ko.observable(false);
  
          ko.computed(function () {
              if (self.usuarioLogado().isAdministrador()) {
                  self.permiteCadastrar(true);
                  self.permiteExcluir(true);
              } else {
                  self.permiteCadastrar(false);
                  self.permiteExcluir(false);
              }
          });
  
          self.init = function () {            
              self.obterEstabelecimentos(self.usuarioLogado().estabelecimentoNomeUrl() ? self.usuarioLogado().estabelecimentoNomeUrl() : '');
          };
  
          self.obterEstabelecimentos = function (estabelecimentoNomeUrl) {
              pages.dataServices.bloquearTela();
              service.obterTodos(estabelecimentoNomeUrl).then(function (result) {
                  result.data.forEach(function (item) {
                      self.estabelecimentos.push(new model.vmEstabelecimento(item));
                  });                
              }).catch(function (result) {
                  console.log(result.data);
              }).finally(function () {
                  self.inicializarDatatable();
                  pages.dataServices.desbloquearTela();
              });
          };
        
          self.inicializarDatatable = function () {
              var table = $('#datatable-estabelecimento').DataTable({
                  lengthChange: false,
                  order: [[0, 'desc']],
                  responsive: true,
                  columnDefs: [               
                  {
                      targets: [6],
                      orderable: false,
                      searchable: false,
                      className: "text-center"
                  }],
                  buttons: [
                      {
                          extend: 'pdfHtml5',
                          title: 'Listagem Estabelecimentos'
                      },
                  ],
                  language: pages.utils.languageDataTablePtBr               
              });
  
              table.buttons().container().appendTo('#datatable-estabelecimento_wrapper .col-md-6:eq(0)');            
              self.datatable(table);
          }; 
  
          self.editar = function (estabelecimentoId) {
              pages.dataServices.bloquearTela();
              window.location.href = "/Estabelecimento/Edicao/" + estabelecimentoId;
          };
  
          self.visualizar = function (estabelecimentoId) {
              pages.dataServices.bloquearTela();
              window.location.href = "/Estabelecimento/Visualizar/" + estabelecimentoId;
          };
  
          self.excluir = function (estabelecimentoId) {
              bootbox.dialog({
                  closeButton: false,
                  message: "Confirma a exclusão do estabelecimento?",               
                  buttons: {
                      nao: {
                          label: "NÃO",
                          className: "btn-sm btn-danger"
                      },
                      sim: {
                          label: "SIM",
                          className: "btn-sm btn-primary",
                          callback: function () {
                              pages.dataServices.bloquearTela();
                              service.deletar(estabelecimentoId).then(function () {
                                  bootbox.alert("Estabelecimento excluído com sucesso!", function () {  
                                      location.reload();                                                                      
                                  });                                 
                              }).catch(function (result) {
                                  if (result.exibeMensagem)
                                      bootbox.alert(result.data);
                              }).finally(function () {
                                  pages.dataServices.desbloquearTela();
                              });                            
                          }
                      }                    
                  }
              });            
          };       
  
          self.init();
  
      };
  
      ko.applyBindings(viewModelEstabelecimento, bindingBody);
  
      $('#datatable-estabelecimento tbody').on('click', '#btnEditar', function (event) {
          var estabelecimentoId = event.currentTarget.value;
          viewModelEstabelecimento.editar(estabelecimentoId);
      });
  
      $('#datatable-estabelecimento tbody').on('click', '#btnVisualizar', function (event) {
          var estabelecimentoId = event.currentTarget.value;
          viewModelEstabelecimento.visualizar(estabelecimentoId);
      });
  
      $('#datatable-estabelecimento tbody').on('click', '#btnExcluir', function (event) {
          var estabelecimentoId = event.currentTarget.value;
          viewModelEstabelecimento.excluir(estabelecimentoId);
      });    
          
  }();