Skip to content

rarolabs/templus_models

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Templus Models

Instalação

Rails 4

gem 'templus_models', '~> 1.0'

Rails 4 I18n

gem 'templus_models', '~> 2.0'

Rails 5 I18n

gem 'templus_models', '~> 3.0'

Gerando um CRUD

Utilize o generator CRUD para criar um novo crud

rails g crud empresa

o arquivo empresa_crud.rb será criado:

create  app/raro_crud/empresa_crud.rb

O arquivo já configura o CRUD com todos os attributos do modelo:

class EmpresaCrud < RaroCrud

  titulo "Empresas"
  subtitulo "Subtitulo", :index
  descricao "Descrição do Cadastro", :index

  link_superior "Novo Empresa", id: "novo-button", icon: "plus", link: "new"

  ordenar_por :created_at
  itens_por_pagina 20

  #Campos mostrados na index
  campo_tabela :nome,  label: "Nome"
  campo_tabela :contato,  label: "Contato"
  campo_tabela :telefone,  label: "Telefone"
  campo_tabela :endereco,  label: "Endereco"

  #Campos mostrados no formulários de cadastro
  campo_formulario :nome,  label: "Nome"
  campo_formulario :contato,  label: "Contato"
  campo_formulario :telefone,  label: "Telefone"
  campo_formulario :endereco,  label: "Endereco"

  #Campos mostrados na visualizacao
  campo_visualizacao :nome,  label: "Nome"
  campo_visualizacao :contato,  label: "Contato"
  campo_visualizacao :telefone,  label: "Telefone"
  campo_visualizacao :endereco,  label: "Endereco"

  #Campos mostrados na busca
  campo_busca :nome,  label: "Nome"
  campo_busca :contato,  label: "Contato"
  campo_busca :telefone,  label: "Telefone"
  campo_busca :endereco,  label: "Endereco"

  #Campos mostrados no relatório
  campo_listagem :nome, label: "Nome"
  campo_listagem :contato, label: "Contato", visible_if: Proc.new { Usuario.current.root? }
  campo_listagem :telefone, label: "Telefone"
  campo_listagem :endereco, label: "Endereco"

end

Alterar forma de visualização do campo

campo_visualizacao :tipo, label: "Tipo", label_method: :descricao_do_tipo

Atributo especial de endereço

Para vincular um formulário de cadastro de endereço utilize o método adicionar_endereco no arquivo:

class EmpresaCrud < RaroCrud

  titulo "Empresas"
  subtitulo "Subtitulo", :index
  descricao "Descrição do Cadastro", :index

  link_superior "Novo Empresa", id: "novo-button", icon: "plus", link: "new"

  adicionar_endereco
  ...
end

Depois adicione no seu modelo o método

accepts_nested_attributes_for :endereco, :allow_destroy => true

Campos do tipo data

Para vincular o datepicker no campo do tipo Date

campo_formulario :data_nascimento, label: "Data de nascimento", as: :string, input_html: {class: "datepicker"}

Para formatar a data na tabela, utilize o date_format

campo_tabela :created_at,  label: "Data", date_format: "%d/%m/%Y"

Para ordernar a tabela por outro campo

campo_tabela :tipo_veiculo,  label: "Tipo de Veiculo", sort_field: :tipo_veiculo_descricao

Campos do tipo boolean

Para vincular o iCheck no campo do tipo boolena

campo_formulario :data_nascimento, label: "Data de nascimento", input_html: {class: "i-checks"}

Busca por intervalo

Para buscas de valores em um intervalo

campo_busca :salario, label: "Salário", as: :range

Aplicando mascara

Para aplicar uma mascara em um campo

campo_formulario :data_nascimento, label: "Data de nascimento", input_html: {"data-mask" => "(99) 9999-9999"}

Para mascara de telefone com 8 e 9 digitos (com e sem DDD)

campo_formulario :data_nascimento, label: "Data de nascimento", input_html: {class: "mask-telefone"}
ou
campo_formulario :data_nascimento, label: "Data de nascimento", input_html: {class: "mask-telefone-ddd"}

Aplicando Dica

Para aplicar uma dica em um campo

campo_formulario :cpf, label: "CPF", hint: "Somente números"

Adicionando javascrit

Para adicionar um javascript em um formulário do RaroCrud, basta criar um arquivo .js dentro da seguinte pasta

assets/javascripts/crud/

Depois adicione em seu arquivo ModelCrud o javascript

script_formulario :cidade_estado

Adicionando escopos

Para adicionar um scope a uma index do RaroCrud

escopos [[:maiores_que_1000, "Maiores"], [:menores_que_1000, "Menores"]]

Para adicionar um partial para o scope em uma index do RaroCrud

escopos "/cancelamentos/escopos"

Adicionando ações

Para adicionar uma nova ação

acoes :pagar!, "Pagar"

Caso deseja inserir uma condição, basta adicionar um proc ao comando

acoes :pagar!, "Pagar", Proc.new {|p| Usuario.current.ability.can?(:create, p)}

Caso necessite de um ação que redireciona para uma view, basta adicionar uma partial

class PapelCrud < RaroCrud
acoes :associar, "Definir permissões", Proc.new {|p| Usuario.current.ability.can?(:create,p)}
end

Local e conteudo da partial

papeis/_associar.html.erb

<%= render_crud do %>
#Conteudo HTML
<% end %>

OBS: Caso você não necessite do template do RaroCrud, adicione somente o Conteudo HTML

Adicionando links para cada registro

links "Permissão", url: "/crud/papel"

Link com wiselink

links "Permissão Wiselink", url: "/crud/papel", wiselink: true

Link para associações

links "Testes1", associacao: :teste1

Link com partial

links "acoes", partial: "/atendimentos/acoes"

Retirando a opção de adicionar novo registro em relações belongs_to

campo_formulario :papel, label: "Papel", label_method: :descricao, add_registro: false

Adicionar condição para mostrar um campo no formulário

  campo_formulario :perfil, label: "Perfil", if: Proc.new {|obj| Usuario.current.root? }

Manipulando actions padrão do RaroCrud

Para remover um action da tabela do RaroCrud

sem_visualizacao
sem_edicao
sem_exclusao

Para remover um action de acordo com uma condição

edicao Proc.new {|obj| !obj.root? }
exclusao Proc.new {|obj| !obj.root? }
visualizacao Proc.new {|obj| obj.root? }

Para remover a opção de Exportar Relatório de acordo com uma condição

listagem Proc.new { |model| Usuario.current.root? }

Manipulando links superiores

Adicionando um link

link_superior "Novo Teste", id: "novo-button", icon: "plus", link: "new"

Esse link será /crud/teste/new

Adicionando uma url

link_superior "Inicio", id: "novo-button", icon: "", url: :busca_api_cidades
ou
link_superior "Inicio", id: "novo-button", icon: "", url: "/api/busca/cidades"

Nesse caso será um redirecionamento

Adicionando uma partial

link_superior "Novo", partial: "/usuarios/actions"

Aplicando permissão ao link

link_superior "Novo Teste", id: "novo-button", icon: "plus", link: "new", can: Proc.new {|obj| Usuario.current.ability.can?(:create, Teste)}

Adicionando aucomplete

Para adicionar autocomplete em um campo de formulário

campo_formulario :cidade, label: "Cidade", autocomplete: {classe: :cidade, campo: :nome, label_method: :cidade_estado}

Formulário Alinhado

Para adicionar formulários alinhados utilize o método grupo_formulario:

  campo_formulario :dado_boleto, label: "Dados para emissão de boleto",
                   grupo: [{campo: :banco, label: "Banco", add_registro: false},
                           {campo: :conta, label: "Conta"},
                           {campo: :observacao, label: "Instruções bancárias"}]

Não se esqueça de permitir os campos dos filhos no modelo do pai com accepts_nested_attributes_for

  accepts_nested_attributes_for :subtopicos, :allow_destroy => true

Caso deseja um label diferente para os botões Adicionar e Remover do grupo, basta adicionar o campo sublabel

  campo_formulario :dado_boleto, label: "Dados para emissão de boleto", sublabel: "Boleto"
                   grupo: [{campo: :banco, label: "Banco", add_registro: false},
                           {campo: :conta, label: "Conta"},
                           {campo: :observacao, label: "Instruções bancárias"}]