
Introdução
Neste Screencast, dividido em 5 partes, nós vamos criar um sistema administrativo completo usando Rails Admin, neste exemplo vamos criar uma plataforma para que uma empresa possa gerenciar as vendas do seus representantes comerciais com dois tipos de usuário: gerente e vendedor. O vendedor poderá entrar com novas vendas, clientes e ver as suas comissões, o gerente poderá criar produtos, descontos e outros usuários.
Também vamos aprender a implementar uma série de features úteis e comuns à maioria dos APPs como autenticação usando Devise, autorização usando CanCanCan, filtro de registros baseado em quem é o dono deles, upload de fotos, customização da aparência e exportação de dados para PDF usando gráficos.
Este é o primeiro tutorial do OneBitCode dividido em vários episódios em vídeos para aumentar o detalhamento e simplificar a explicação, então se você gostar desse formato deixa um feedback ainda em baixo para eu saber e produzir mais conteúdo como este.
Episódios
-
- Criando a estrutura do nosso Projeto + Seed (assistir)
- Autenticação + Autorização + Filtrando os resultados (assistir)
- Incluindo fotos + Atribuição automática de comissão (disponível)
- Configurando o Rails Admin + Customizando a aparência (Em breve)
- Exportando para PDF com gráficos + Testando tudo isto (Em breve)
O que vamos Aprender?
-
- Como criar um sistema administrativo
- Como implementar a autenticação
- Como implementar a autorização
- Como filtrar para que os vendedores vejam apenas seus próprios clientes, vendas e comissões
- Adicionando comissão automaticamente (Neste episódio)
- Como receber fotos no nosso sistema administrativo (Neste episódio)
- Como customizar a aparência do nosso sistema administrativo
- Como exportar para PDF e gerar gráficos
Ingredientes
-
- Ruby on Rails
- Sqlite3 (Mas você pode usar outro Database :))
- Gem: Rails Admin
- Gem: Rails Admin Rollincode
- Gem: Devise
- Gem: CanCanCan
- Gem: Carrierwave
Lista de comandos utilizados no Screencast parte 3
-
- Comissão automática e customização dos campos e tabelas:Adicionar no arquivo: /app/models/sale.rb
1has_one :comission
Adicionar no arquivo: /app/models/discount.rb
1has_many :sales
Alterar a linha “has_one: address” em “/app/models/client.rb” por:
1has_many :address
Rodar no Console
1rails g migration add_sale_id_to_product_quantity sale_id:integer
1rails g migration add_price_to_product price:decimal
1rake db:migrate
Adicionar no arquivo: /app/models/comission.rb
1enum status: [:pending, :payd]
Substituir o conteúdo do arquivo: /db/seeds.rb
12345678910111213141516# Criando nossos Users --- OBS: Depois que adicionarmos o devise precisamos incluir o email e senha dos usersUser.create name: 'José', status: :active, kind: :salesman, email: 'salesman@teste.com', password: 123456User.create name: 'Manuel', status: :active, kind: :salesman, email: 'salesman2@teste.com', password: 123456User.create name: 'Marcos', status: :active, kind: :manager, email: 'manager@teste.com', password: 123456# Criando alguns produtos de exemploProduct.create name: 'Smartphone', description:'Um smartphone novo ...', status: :active, price: 10Product.create name: 'Tablet', description:'Um tablet novo ...', status: :active, price: 20# Criando um desconto de exemploDiscount.create name: 'Desconto carnaval', description: 'Aplique esse desconto no carnaval', value: '10', kind: :porcent, status: :activeDiscount.create name: 'Desconto carnaval dinheiro', description: 'Aplique esse desconto quando possível', value: '10', kind: :money, status: :active# Crindo clientClient.create name: 'Paulo', company_name: 'Google', document: '1234', email: 'paulo@google.com', user: User.firstClient.create name: 'Julia', company_name: 'Google', document: 'abcd', email: 'julia@google.com', user: User.first
Rodar no console:
1rake db:drop db:create db:migrate db:seed
Adicionar no arquivo: /app/models/sale.rb
1234567891011121314151617181920after_save docalc = 0# Soma o preço dos produtos vezes a quantidade delesself.product_quantities.each {|p| calc += p.product.price * p.quantity}# Verifica se existe um desconto e aplica caso existaif self.discountif self.discount.kind == "porcent"calc -= calc / self.discount.valueelsif self.discount.kind == "money"calc -= self.discount.valueendend# Verifica se já existe uma comissão, caso sim atualiza, caso não cria uma nova.if self.comission.present?self.comission.update(value: (calc * 0.1), status: :pending)elseComission.create(value: (calc * 0.1), user: self.user, sale: self, status: :pending)endend
Adicionar no arquivo: /config/initializers/rails_admin.rb
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100config.model Sale docreate dofield :clientfield :sale_datefield :discountfield :notesfield :product_quantitiesfield :user_id, :hidden dodefault_value dobindings[:view]._current_user.idendendendedit dofield :clientfield :sale_datefield :discountfield :notesfield :product_quantitiesfield :user_id, :hidden dodefault_value dobindings[:view]._current_user.idendendendendconfig.model Client docreate dofield :namefield :company_namefield :documentfield :emailfield :phonefield :notesfield :statusfield :addressfield :user_id, :hidden dodefault_value dobindings[:view]._current_user.idendendendedit dofield :namefield :company_namefield :documentfield :emailfield :phonefield :notesfield :statusfield :addressfield :user_id, :hidden dodefault_value dobindings[:view]._current_user.idendendendlist dofield :namefield :company_namefield :documentfield :emailfield :phonefield :notesfield :statusfield :addressendendconfig.model ProductQuantity dovisible falseendconfig.model Address dovisible falseendconfig.model ProductQuantity doedit dofield :productfield :quantityfield :user_id, :hidden dodefault_value dobindings[:view]._current_user.idendendendend - Incluindo fotos no nosso Admin:Adicionar ao arquivo: Gemfile
1gem 'carrierwave'
Rodar no console:
1bundle
Rodar no console:
1rails generate uploader Photo
Rodar no console:
1rails g migration add_photo_to_product photo:string
Rodar no console:
1rake db:migrate
Adicionar ao arquivo: /app/models/product.rb
1mount_uploader :photo, PhotoUploader
- Comissão automática e customização dos campos e tabelas:Adicionar no arquivo: /app/models/sale.rb

Não perca nenhum conteúdo
Receba nosso resumo semanal com os novos posts, cursos, talks e vagas o/
Conclusão – Parte 3
Nesta parte nós aprendemos como chamar callbacks para atribuir automaticamente uma comissão ao vendedor, editamos as tabelas e os campos que aparecem no nosso sistema administrativo para melhorar a aparência dele e simplificar a navegação e adicionamos a possibilidade de subir uma foto no Produto.
Veja a primeira parte da série aqui.
Veja a segunda parte da série aqui.
Você pode ver o código completo acessando o projeto no Github clicando aqui e escolhendo a branch “Part3”, aproveita e me segue lá também 🙂
Os outros 2 episódios da série sairão dentro dos próximos dias então não se esqueça de se cadastrar no canal do Youtube e habilitar as notificações.
Muito Obrigado por acompanhar este Blog!
Sua presença aqui é uma honra para mim,
Abraço,
Leonardo Scorza.
Primeira vez no OneBitCode? Curtiu esse conteúdo?
O OneBitCode tem muito mais para você!
O OneBitCode traz conteúdos de qualidade, e em português, sobre programação com foco em Ruby on Rails e também JavaScript.
Além disso, aqui sempre levamos à você conteúdos valiosos sobre a carreira de programação, dicas sobre currículos, portfólios, perfil profissional, soft skills, enfim, tudo o que você precisa saber para continuar evoluindo como Programador(a)!
Fique por dentro de todos os conteúdos o/
Nossas redes sociais:
📹 • https://youtube.com/Onebitcode [Live todas as terças-feiras às 19h)
💻 • https://linkedin.com/company/onebitcode
🙂 • free dating web site los angeles
📱 • dating profiles for men
🐦 • https://onebitcode.com/dating-site-free-online/
Nossos cursos:
🥇 • free 100 dating site in usa
💎 • Curso Completo de Ruby
⚙ • Minicurso: API Rails 5 Completo
🐞 • Minicurso de Testes para Ruby on Rails com RSpec
Espero que curta nossos conteúdos e sempre que precisar de ajuda, fala com a gente!
Estamos aqui para você 🙂
Bem-vindo à família OneBitCode o/