Giter Site home page Giter Site logo

templus_models's Introduction

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"}]

templus_models's People

Contributors

leonardoherbert avatar diegoqlima avatar rodrigosol avatar

Stargazers

Paulo Henrique avatar MatheusFelipe avatar Alair Fonseca avatar Guilherme Andrade avatar Adimir Colen avatar Juarez Lustosa avatar Conrado Costa avatar  avatar  avatar

Watchers

 avatar Pedro Pires avatar Adimir Colen avatar Lesio Pinheiro avatar Thauan Zatta avatar Juarez Lustosa avatar James Cloos avatar  avatar  avatar Dante Marchi avatar Paulo Henrique Fernandes Pereira avatar Vinícius Cançado avatar Jonathan Marques avatar Bruno de Paula avatar MatheusFelipe avatar Alair Fonseca avatar Guilherme Andrade avatar  avatar  avatar Rodolfo Vilaça avatar Jonathan Rarolabs avatar

templus_models's Issues

Override generator não gerou rotas

Versão: 2.0.0

Rodei o override generator, e o output foi o seguinte:

Generating app/controllers/clientes_controller.rb
      create  app/controllers/clientes_controller.rb
      insert  config/routes.rb
      insert  app/controllers/clientes_controller.rb
      create  app/views/clientes/new.html.erb
      append  app/views/clientes/new.html.erb
      create  app/views/clientes/_new.html.erb
      append  app/views/clientes/_new.html.erb
      create  app/views/clientes/_form.html.erb
      append  app/views/clientes/_form.html.erb
Insira o form no arquivo app/views/clientes/_form.html.erb

Ele disse que adicionou alguma coisa no arquivo de rotas, mas nada foi adicionado. O arquivo ficou inalterado.

Eager loading das associações dos cruds

Instalei a gem bullet no excellence, e percebi que as associações dos models nunca são buscadas junto com o registro. A sugestão é fazer os includes() necessários nas associações que serão mostradas na tela. Por exemplo, no index de Cliente do excellence são mostradas 3 colunas que são associações (Nivel, TipoAdministracao e PlanoSoftware), e esse foi o warning da bullet:

user: pedropires
GET http://localhost:3000/crud/cliente
USE eager loading detected
  Cliente => [:niveis]
  Add to your finder: :includes => [:niveis]
Call stack
  /Users/pedropires/Projects/excellence/app/controllers/application_controller.rb:96:in `set_current_usuario'


user: pedropires
GET http://localhost:3000/crud/cliente
USE eager loading detected
  Cliente => [:tipo_administracao]
  Add to your finder: :includes => [:tipo_administracao]
Call stack
  /Users/pedropires/Projects/excellence/app/controllers/application_controller.rb:96:in `set_current_usuario'


user: pedropires
GET http://localhost:3000/crud/cliente
USE eager loading detected
  Cliente => [:plano_software]
  Add to your finder: :includes => [:plano_software]
Call stack
  /Users/pedropires/Projects/excellence/app/controllers/application_controller.rb:96:in `set_current_usuario'

Para a index, da pra implementar pegando os campos que foram declarados com campo_tabela e que são associações, e dando um includes() neles.
Pro show teria que pegar os campos declarados com campo_visualizacao e que forem associações.
Pro edit teria que dar um include em todas as associações.

Não registrar mime type de PDF no initializer

Desde 2011 o rails já registra o mime type de PDF automaticamente (nesse commit), e quando o raro crud inicializa novamente aparece um warning na tela:

actionpack-4.2.4/lib/action_dispatch/http/mime_type.rb:163: warning: already initialized constant Mime::PDF
actionpack-4.2.4/lib/action_dispatch/http/mime_type.rb:163: warning: previous definition of PDF was here

Parâmetro page sendo adicionado varias vezes na query string

Estou desenvolvendo um crud, e fico o tempo todo entrando no form de edit, e voltando pro index. Parece que a cada vez que o form é submetido, eu sou redirecionado para uma url com um ?page= adicionado no final da query string. Se eu submeter para a url ...?page=, vou ser redirecionado para ...?page=?page=.

A minha url neste momento está assim: http://localhost:3000/pt-BR/crud/historico_financeiro/2/edit?page=%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D%3Fpage%3D

Possível erro com permited params

Tenho dois models associados da seguinte forma, com o params_permitt definido:

class HistoricoFinanceiro
  has_many :movimentacoes_financeiras
  accepts_nested_attributes_for :movimentacoes_financeiras
  
  def self.params_permitt
    [movimentacoes_financeiras_attributes: [:tag_list]]
  end
end

class MovimentacaoFinanceira
  belongs_to :historico_financeiro
  act_as_taggable             # cria o atributo `tag_list`
end

Ao fazer uma requisição no formulário de HistoricoFinanceiro com movimentações financeiras associadas, apareceu no log do servidor unpermitted param tag_list. Mesmo assim as tags foram criadas sem problemas.

Troquei o params_permitt parao model MovimentacaoFinanceira, e o unpermitted param tag list sumiu.

A dúvida é: no primeiro caso, por que as tags foram criadas se o param tag_list não estava permitido? Ele deveria ter sido barrado, e as tags não deveriam ter sido criadas.

Relacionamento many to many

Olá, tenho um cliente que possui essa gem no seu sistema e preciso gerar um relacionamento many to many, entretanto estou com dificuldade! Se alguém puder auxiliar!

Desde já obrigado!

Deprecation Warning p/ Rails 5.1

recebi o seguinte warning do RaroCrud:

DEPRECATION WARNING: Method to_param is deprecated and will be removed in Rails 5.1, as ActionController::Parameters no longer inherits from hash. Using this deprecated behavior exposes potential security problems. If you continue to use this method you may be creating a security vulnerability in your app that can be exploited. Instead, consider using one of these documented methods which are not deprecated: http://api.rubyonrails.org/v5.0.2/classes/ActionController/Parameters.html (called from set_current_usuario at /Users/pedropires/Projects/replanner/app/controllers/application_controller.rb:31)

Dependência WickedPdf não resolvida

Instalamos o rarocrud branch i18n, e não conseguiu encontrar a gem WickedPdf. Ela deveria ter sido instalada automaticamente junto com o rarocrud.

override generator gerando arquivo desnecessário

Usei o generator override (rails g rarocrud:override Cliente new), e ele gerou 3 arquivos de view:

  • _form.html.erb
  • _new.html.erb
  • new.html.erb

O _new.html.erb não é usado, e não precisa ser gerado.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.