dorsale 2.1.10 → 2.1.11

Sign up to get free protection for your applications and to get access to all the features.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/stylesheets/dorsale/all.sass +1 -0
  3. data/app/assets/stylesheets/dorsale/users.sass +8 -0
  4. data/app/controllers/dorsale/billing_machine/invoices_controller.rb +2 -1
  5. data/app/controllers/dorsale/billing_machine/quotations_controller.rb +2 -1
  6. data/app/controllers/dorsale/users_controller.rb +69 -0
  7. data/app/mailers/dorsale/application_mailer.rb +8 -0
  8. data/app/mailers/dorsale/user_mailer.rb +9 -0
  9. data/app/models/dorsale/ability_helper.rb +4 -0
  10. data/app/models/dorsale/billing_machine/ability_helper.rb +2 -2
  11. data/app/models/dorsale/users/active.rb +20 -0
  12. data/app/models/dorsale/users/password_generation.rb +17 -0
  13. data/app/views/dorsale/billing_machine/invoices/show.html.slim +8 -4
  14. data/app/views/dorsale/billing_machine/quotations/show.html.slim +8 -4
  15. data/app/views/dorsale/comments/_comment.html.slim +1 -1
  16. data/app/views/dorsale/flyboy/tasks/_form.html.slim +1 -1
  17. data/app/views/dorsale/user_mailer/new_account.html.slim +4 -0
  18. data/app/views/dorsale/users/_details.html.slim +1 -0
  19. data/app/views/dorsale/users/_form.html.slim +6 -0
  20. data/app/views/dorsale/users/_list.html.slim +18 -0
  21. data/app/views/dorsale/users/edit.html.slim +3 -0
  22. data/app/views/dorsale/users/index.html.slim +5 -0
  23. data/app/views/dorsale/users/new.html.slim +1 -0
  24. data/app/views/dorsale/users/show.html.slim +1 -0
  25. data/config/locales/common.fr.yml +1 -0
  26. data/config/locales/en.yml +17 -1
  27. data/config/locales/fr.yml +16 -0
  28. data/config/routes.rb +4 -0
  29. data/db/migrate/20151103110115_add_is_active_to_users.rb +5 -0
  30. data/lib/dorsale/version.rb +1 -1
  31. data/spec/dummy/app/models/ability.rb +1 -0
  32. data/spec/dummy/app/models/user.rb +3 -0
  33. data/spec/dummy/app/views/layouts/application.html.slim +5 -0
  34. data/spec/dummy/db/schema.rb +2 -1
  35. data/spec/mailers/user_mailer.rb +22 -0
  36. data/spec/models/dorsale/users_spec.rb +33 -0
  37. data/spec/routing/dorsale/users_routing_spec.rb +38 -0
  38. metadata +23 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1e8cb873de3d6147d2932b4ba73fed3a313df886
4
- data.tar.gz: 0e611236df4986c81fdabcbbe5d6bf004a4e7a5c
3
+ metadata.gz: af0902e5d1cea5200ee84a3f215f7bc8ccdc2feb
4
+ data.tar.gz: 4d9781ebd5ff206216889eed95d17bc525d6705a
5
5
  SHA512:
6
- metadata.gz: 7c3c041c0d536402678495964d1824f1775869fc52aa8a43de2e02b7a4191706dd64df002239c9f00d01096bc13da838e254c90b649d19de52e5e2e1b416e4b2
7
- data.tar.gz: 8831493e3fa7f8a8d0db0bc1f7315da2d132cab4a256b68118dbe4c15960718d474af328756398feb534004f23e7a2673c064d39fd1b1c7523e45b08613e86f2
6
+ metadata.gz: f2b3f6483735d74a8671217ff2e31453c24d7548defd451a59c768977fb2954c808d8357ced70110399a18b575c24dda35bbc1a343ec0bf1c371e7ca8bcc2181
7
+ data.tar.gz: bc818dd46b78f372a8039ff22ab9f39879e2a0fafc145f4599338923019c77e1fdc59773e6648f3bd0d1f30eef7e6697394b235482a8379ec0b534e92a2c000a
@@ -12,3 +12,4 @@
12
12
  @import dorsale/styles
13
13
  @import dorsale/pagination
14
14
  @import dorsale/tables
15
+ @import dorsale/users
@@ -0,0 +1,8 @@
1
+ .users
2
+ .actions
3
+ text-align: right
4
+
5
+ .btn
6
+ margin: 0 0 0.5em 0.5em
7
+
8
+
@@ -66,6 +66,7 @@ module Dorsale
66
66
 
67
67
  respond_to do |format|
68
68
  format.pdf {
69
+ authorize! :download, @invoice
69
70
  pdf_data = @invoice.pdf.render
70
71
 
71
72
  file_name = [
@@ -87,7 +88,7 @@ module Dorsale
87
88
  def copy
88
89
  # callback in BillingMachine::ApplicationController
89
90
  @original = @invoice
90
- authorize! :read, @original
91
+ authorize! :copy, @original
91
92
 
92
93
  @invoice = @original.dup
93
94
 
@@ -86,6 +86,7 @@ module Dorsale
86
86
 
87
87
  respond_to do |format|
88
88
  format.pdf {
89
+ authorize! :download, @quotation
89
90
  pdf_data = @quotation.pdf.render_with_attachments
90
91
 
91
92
  file_name = [
@@ -135,7 +136,7 @@ module Dorsale
135
136
  end
136
137
 
137
138
  def copy
138
- authorize! :create, @quotation
139
+ authorize! :copy, @quotation
139
140
 
140
141
  new_quotation = @quotation.create_copy!
141
142
  flash[:notice] = t("messages.quotations.copy_ok")
@@ -0,0 +1,69 @@
1
+ module Dorsale
2
+ class UsersController < ::Dorsale::ApplicationController
3
+ handles_sortable_columns
4
+
5
+ before_action :set_user, only: [
6
+ :show,
7
+ :edit,
8
+ :update,
9
+ ]
10
+
11
+ def show
12
+
13
+ end
14
+
15
+ def index
16
+ authorize! :list, User
17
+ @users = User.all
18
+ end
19
+
20
+ def new
21
+ @user = User.new
22
+ authorize! :create, @user
23
+ end
24
+
25
+ def edit
26
+ authorize! :update, @user
27
+ end
28
+
29
+ def create
30
+ @user = User.new(user_params)
31
+ authorize! :create, @user
32
+ if @user.save
33
+ redirect_to dorsale.users_path, notice: t("messages.users.create_ok")
34
+ else
35
+ flash[:error] = t("messages.users.create_error")
36
+ render :new
37
+ end
38
+ end
39
+
40
+ def update
41
+ authorize! :update, @user
42
+ if @user.update(user_params)
43
+ redirect_to dorsale.users_path, notice: t("messages.users.update_ok")
44
+ else
45
+ flash[:error] = t("messages.users.update_error")
46
+ render :edit
47
+ end
48
+ end
49
+
50
+ private
51
+
52
+ def set_user
53
+ @user = User.find(params[:id])
54
+ end
55
+
56
+ def permitted_params
57
+ [
58
+ :email,
59
+ :password,
60
+ :password_confirmation,
61
+ :is_active,
62
+ ]
63
+ end
64
+
65
+ def user_params
66
+ params.require(:user).permit(permitted_params)
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,8 @@
1
+ module Dorsale
2
+ class ApplicationMailer < ActionMailer::Base
3
+ DEFAULT_FROM = "contact@example.org"
4
+ default from: DEFAULT_FROM
5
+
6
+ helper Dorsale::AllHelpers
7
+ end
8
+ end
@@ -0,0 +1,9 @@
1
+ module Dorsale
2
+ class UserMailer < ::Dorsale::ApplicationMailer
3
+ def new_account user, password
4
+ @user = user
5
+ @password = password
6
+ mail :to => user.email, :subject => t('emails.user.new_account.title')
7
+ end
8
+ end
9
+ end
@@ -3,5 +3,9 @@ module Dorsale
3
3
  def define_dorsale_comment_abilities
4
4
  can [:create, :update, :delete], ::Dorsale::Comment
5
5
  end
6
+
7
+ def define_user_abilities
8
+ can [:list, :create, :update, :delete], User
9
+ end
6
10
  end
7
11
  end
@@ -2,8 +2,8 @@ module Dorsale
2
2
  module BillingMachine
3
3
  module AbilityHelper
4
4
  def define_dorsale_billing_machine_abilities
5
- can [:list, :create, :read, :update, :pay, :copy], ::Dorsale::BillingMachine::Invoice
6
- can [:list, :create, :read, :update, :delete], ::Dorsale::BillingMachine::Quotation
5
+ can [:list, :create, :read, :update, :pay, :copy, :download], ::Dorsale::BillingMachine::Invoice
6
+ can [:list, :create, :read, :update, :delete, :copy, :download], ::Dorsale::BillingMachine::Quotation
7
7
  end
8
8
  end
9
9
  end
@@ -0,0 +1,20 @@
1
+ module Dorsale::Users::Active
2
+ def self.included(user_model)
3
+ user_model.class_eval do
4
+ validates :is_active, inclusion: {in: [true, false]}
5
+
6
+ def initialize(*)
7
+ super
8
+ self.is_active = true if is_active.nil?
9
+ end
10
+
11
+ def active_for_authentication?
12
+ super && self.is_active?
13
+ end
14
+
15
+ def inactive_message
16
+ I18n.t("messages.users.inactive")
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,17 @@
1
+ module Dorsale::Users::PasswordGeneration
2
+ def self.included(user_model)
3
+ user_model.class_eval do
4
+ before_validation :generate_password, on: :create
5
+ after_create :send_welcome_email
6
+
7
+ def generate_password
8
+ self.password ||= SecureRandom.hex(6).to_s
9
+ end
10
+
11
+ def send_welcome_email
12
+ Dorsale::UserMailer.new_account(self, password).deliver_later
13
+ end
14
+
15
+ end
16
+ end
17
+ end
@@ -1,10 +1,14 @@
1
1
  .billing_machine
2
2
  .invoice-details class="#{@invoice.payment_status}"
3
3
  .actions
4
- = copy_button dorsale.copy_billing_machine_invoice_path(@invoice)
5
- = update_button dorsale.edit_billing_machine_invoice_path(@invoice)
6
- = download_button dorsale.billing_machine_invoice_path(@invoice, format: :pdf)
7
- = dorsale_button dorsale.pay_billing_machine_invoice_path(@invoice), icon: :check, action: :pay, method: :patch
4
+ - if can?(:copy, @invoice)
5
+ = copy_button dorsale.copy_billing_machine_invoice_path(@invoice)
6
+ - if can?(:update, @invoice)
7
+ = update_button dorsale.edit_billing_machine_invoice_path(@invoice)
8
+ - if can?(:download, @invoice)
9
+ = download_button dorsale.billing_machine_invoice_path(@invoice, format: :pdf)
10
+ - if can?(:pay, @invoice)
11
+ = dorsale_button dorsale.pay_billing_machine_invoice_path(@invoice), icon: :check, action: :pay, method: :patch
8
12
 
9
13
  - if @invoice.customer
10
14
  .row
@@ -1,10 +1,14 @@
1
1
  .billing_machine
2
2
  .quotation-details
3
3
  .actions
4
- = update_button dorsale.edit_billing_machine_quotation_path(@quotation)
5
- = download_button dorsale.billing_machine_quotation_path(@quotation, format: :pdf)
6
- = copy_button dorsale.copy_billing_machine_quotation_path(@quotation), method: :post, confirm: true
7
- = dorsale_button dorsale.create_invoice_billing_machine_quotation_path(@quotation), method: :post, action: :create_invoice, confirm: true, icon: :magic
4
+ - if can?(:update, @quotation)
5
+ = update_button dorsale.edit_billing_machine_quotation_path(@quotation)
6
+ - if can?(:download, @quotation)
7
+ = download_button dorsale.billing_machine_quotation_path(@quotation, format: :pdf)
8
+ - if can?(:copy, @quotation)
9
+ = copy_button dorsale.copy_billing_machine_quotation_path(@quotation), method: :post, confirm: true
10
+ - if can?(:create, @quotation)
11
+ = dorsale_button dorsale.create_invoice_billing_machine_quotation_path(@quotation), method: :post, action: :create_invoice, confirm: true, icon: :magic
8
12
 
9
13
 
10
14
  - if @quotation.customer
@@ -26,7 +26,7 @@
26
26
  = ::Dorsale::Comment.t(:written_by)
27
27
  = " "
28
28
  span.author
29
- = comment.author.name
29
+ = comment.author.to_s
30
30
 
31
31
  p.text = text2html(comment.text)
32
32
 
@@ -23,7 +23,7 @@
23
23
 
24
24
  = f.hidden_field :taskable_id
25
25
  = f.hidden_field :taskable_type
26
- = f.input :owner_guid, collection: @owners.map{ |e| [e.name, e.guid] }
26
+ = f.input :owner_guid, collection: @owners.map{ |e| [e.to_s, e.guid] }
27
27
 
28
28
  = form_buttons
29
29
 
@@ -0,0 +1,4 @@
1
+ h1= t('emails.user.new_account.body.title')
2
+ h2= t('emails.user.new_account.body.subtitle')
3
+ p= t('emails.user.new_account.body.login', login: @user.email)
4
+ p= t('emails.user.new_account.body.password', password: @password)
@@ -0,0 +1 @@
1
+ h1 = @user
@@ -0,0 +1,6 @@
1
+ .well
2
+ = horizontal_form_for @user do |u|
3
+ = u.input :email
4
+ = u.input :is_active, as: :boolean, wrapper: :horizontal_radio_and_checkboxes
5
+
6
+ = form_buttons obj: @user
@@ -0,0 +1,18 @@
1
+ table.default
2
+ thead
3
+ tr
4
+ th.hidden-xs
5
+ = t("attributes.email")
6
+
7
+ th
8
+ = t("actions.actions")
9
+
10
+ tbody
11
+ - users.each do |user|
12
+ tr.user-line
13
+
14
+ td.hidden-xs.email
15
+ = user
16
+
17
+ td.actions
18
+ = update_button dorsale.edit_user_path(user)
@@ -0,0 +1,3 @@
1
+ .pull-right = link_to t("user_list"), dorsale.users_path, class: 'btn btn-default'
2
+ h1= @user.name
3
+ = render 'form'
@@ -0,0 +1,5 @@
1
+ .users
2
+ .actions
3
+ = create_button dorsale.new_user_path
4
+
5
+ = render "dorsale/users/list", users: @users
@@ -0,0 +1 @@
1
+ = render "form"
@@ -0,0 +1 @@
1
+ = render 'details'
@@ -123,6 +123,7 @@ fr:
123
123
  number : "Nombre"
124
124
  message : "Message"
125
125
  skype : "Skype"
126
+ is_active : "Actif ?"
126
127
 
127
128
  # BillingMachine
128
129
  unit : "Unité"
@@ -7,4 +7,20 @@ en:
7
7
  update_ok : "Comment updated."
8
8
  update_error : "One error occurs, comment can't be updated."
9
9
  delete_ok : "Comment deleted."
10
- delete_error : "One error occurs, comment can't be deleted."
10
+ delete_error : "One error occurs, comment can't be deleted."
11
+ users:
12
+ inactive: "This account is inactive"
13
+ create_ok : "User created."
14
+ create_error : "One error occurs, user can't be created."
15
+ update_ok : "User updated."
16
+ update_error : "One error occurs, user can't be updated."
17
+ emails:
18
+ user:
19
+ new_account:
20
+ title: "New account"
21
+ body:
22
+ title: "New account created"
23
+ subtitle: "Congratulation for your new account"
24
+ login: "Your login is: %{login}"
25
+ password: "Your password is: %{password}"
26
+ url_label: "Click here to access service"
@@ -8,3 +8,19 @@ fr:
8
8
  update_error : "Impossible de modifier le commentaire."
9
9
  delete_ok : "Le commentaire a été supprimé."
10
10
  delete_error : "Impossible de supprimer le commentaire."
11
+ users:
12
+ inactive: "Ce compte est inactif"
13
+ create_ok : "L'utilisateur a été créé."
14
+ create_error : "Impossible de créer l'utilisateur."
15
+ update_ok : "L'utilisateur a été modifié."
16
+ update_error : "Impossible de modifier l'utilisateur."
17
+ emails:
18
+ user:
19
+ new_account:
20
+ title: "Nouveau compte"
21
+ body:
22
+ title: "Nouveau compte créé"
23
+ subtitle: "Félicitation pour la création de votre compte."
24
+ login: "Votre login est: %{login}"
25
+ password: "Votre mot de passe est: %{password}"
26
+ url_label: "Cliquez ici pour accéder au service"
data/config/routes.rb CHANGED
@@ -1,10 +1,14 @@
1
1
  Dorsale::Engine.routes.draw do
2
2
  resources :comments, only: [:create, :edit, :update, :destroy]
3
3
 
4
+ resources :users, except: [:destroy]
5
+
4
6
  namespace :small_data do
5
7
  resources :filters, only: [:create]
6
8
  end
7
9
 
10
+
11
+
8
12
  namespace :alexandrie do
9
13
  resources :attachments, only: [:create, :destroy]
10
14
  end
@@ -0,0 +1,5 @@
1
+ class AddIsActiveToUsers < ActiveRecord::Migration
2
+ def change
3
+ add_column :users, :is_active, :boolean if table_exists?(:users)
4
+ end
5
+ end
@@ -1,3 +1,3 @@
1
1
  module Dorsale
2
- VERSION = "2.1.10"
2
+ VERSION = "2.1.11"
3
3
  end
@@ -9,6 +9,7 @@ class Ability
9
9
  def initialize(*)
10
10
  define_alexandrie_abilities
11
11
  define_dorsale_comment_abilities
12
+ define_user_abilities
12
13
  define_dorsale_flyboy_abilities
13
14
  define_dorsale_billing_machine_abilities
14
15
  define_dorsale_customer_vault_abilities
@@ -4,6 +4,9 @@ class User < ActiveRecord::Base
4
4
  devise :database_authenticatable, :registerable,
5
5
  :recoverable, :rememberable, :trackable, :validatable
6
6
 
7
+ include Dorsale::Users::Active
8
+ include Dorsale::Users::PasswordGeneration
9
+
7
10
  def name
8
11
  email
9
12
  end
@@ -20,6 +20,11 @@ html
20
20
  = icon_link_to "check-square-o", "Tâches", dorsale.flyboy_tasks_path
21
21
  = icon_link_to "euro", "Devis", dorsale.billing_machine_quotations_path
22
22
  = icon_link_to "euro", "Factures", dorsale.billing_machine_invoices_path
23
+ = icon_link_to "users", "Utilisateurs", dorsale.users_path
24
+ - if current_user
25
+ = link_to "Déconnexion", main_app.destroy_user_session_path, method: :delete
26
+ - else
27
+ = link_to "Connexion", main_app.new_user_session_path
23
28
 
24
29
  #flash.container
25
30
  = render "dorsale/flash"
@@ -11,7 +11,7 @@
11
11
  #
12
12
  # It's strongly recommended that you check this file into your version control system.
13
13
 
14
- ActiveRecord::Schema.define(version: 20151023135421) do
14
+ ActiveRecord::Schema.define(version: 20151103110115) do
15
15
 
16
16
  create_table "dorsale_addresses", force: :cascade do |t|
17
17
  t.string "street"
@@ -295,6 +295,7 @@ ActiveRecord::Schema.define(version: 20151023135421) do
295
295
  t.string "last_sign_in_ip"
296
296
  t.datetime "created_at", null: false
297
297
  t.datetime "updated_at", null: false
298
+ t.boolean "is_active"
298
299
  end
299
300
 
300
301
  add_index "users", ["email"], name: "index_users_on_email", unique: true
@@ -0,0 +1,22 @@
1
+ require 'rails_helper'
2
+
3
+ describe ::Dorsale::UserMailer do
4
+ describe "New Account" do
5
+ let(:user) { create(:user) }
6
+ let(:email) { ::Dorsale::UserMailer.new_account(user, user.password) }
7
+
8
+ it 'should send to the right person' do
9
+ expect(email.to).to eq([user.email])
10
+ end
11
+
12
+ it 'should have the right sender' do
13
+ expect(email.from).to eq(["contact@example.org"])
14
+ end
15
+
16
+ it 'should contain user_type, login and password' do
17
+ expect(email.body).to include user.email
18
+ expect(email.body).to include user.password
19
+ end
20
+
21
+ end
22
+ end
@@ -0,0 +1,33 @@
1
+ require "rails_helper"
2
+
3
+
4
+ RSpec.describe User, type: :model do
5
+
6
+ it "should have a valid factores" do
7
+ expect(create(:user)).to be_valid
8
+ end
9
+
10
+ it { is_expected.to respond_to :is_active }
11
+
12
+ describe "default values" do
13
+ it "default active value should be true" do
14
+ @user = create(:user)
15
+ expect(@user.is_active).to eq true
16
+ end
17
+
18
+ it 'should create a valid password upon creation' do
19
+ user = create(:user, password: nil, password_confirmation: nil)
20
+ expect(user).to be_persisted
21
+ end
22
+
23
+ it 'should not override choosen password' do
24
+ user = create(:user, password: "totototo", password_confirmation: nil)
25
+ expect(user.password).to eq "totototo"
26
+ end
27
+
28
+ it 'should send a welcome message upon creation' do
29
+ expect { create(:user)}.to change(ActionMailer::Base.deliveries, :count).by(1)
30
+ end
31
+ end
32
+
33
+ end
@@ -0,0 +1,38 @@
1
+ require "rails_helper"
2
+
3
+ RSpec.describe ::Dorsale::UsersController, type: :routing do
4
+ describe "routing" do
5
+ routes { ::Dorsale::Engine.routes }
6
+ it "routes to #index" do
7
+ expect(:get => "users").to route_to("dorsale/users#index")
8
+ end
9
+
10
+ it "routes to #new" do
11
+ expect(:get => "users/new").to route_to("dorsale/users#new")
12
+ end
13
+
14
+ it "route to #show" do
15
+ expect(:get => "users/1").to route_to("dorsale/users#show", :id => "1")
16
+ end
17
+
18
+ it "routes to #edit" do
19
+ expect(:get => "users/1/edit").to route_to("dorsale/users#edit", :id => "1")
20
+ end
21
+
22
+ it "routes to #create" do
23
+ expect(:post => "users").to route_to("dorsale/users#create")
24
+ end
25
+
26
+ it "routes to #update via PUT" do
27
+ expect(:put => "users/1").to route_to("dorsale/users#update", :id => "1")
28
+ end
29
+
30
+ it "routes to #update via PATCH" do
31
+ expect(:patch => "users/1").to route_to("dorsale/users#update", :id => "1")
32
+ end
33
+
34
+ it "doesn't route to #destroy" do
35
+ expect(:delete => "users/1").not_to be_routable
36
+ end
37
+ end
38
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dorsale
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.10
4
+ version: 2.1.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - agilidée
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-10-29 00:00:00.000000000 Z
11
+ date: 2015-11-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -429,6 +429,7 @@ files:
429
429
  - app/assets/stylesheets/dorsale/pagination.sass
430
430
  - app/assets/stylesheets/dorsale/styles.sass
431
431
  - app/assets/stylesheets/dorsale/tables.sass
432
+ - app/assets/stylesheets/dorsale/users.sass
432
433
  - app/controllers/dorsale/alexandrie/attachments_controller.rb
433
434
  - app/controllers/dorsale/application_controller.rb
434
435
  - app/controllers/dorsale/billing_machine/application_controller.rb
@@ -446,6 +447,7 @@ files:
446
447
  - app/controllers/dorsale/flyboy/task_comments_controller.rb
447
448
  - app/controllers/dorsale/flyboy/tasks_controller.rb
448
449
  - app/controllers/dorsale/small_data/filters_controller.rb
450
+ - app/controllers/dorsale/users_controller.rb
449
451
  - app/helpers/dorsale/alexandrie/attachments_helper.rb
450
452
  - app/helpers/dorsale/all_helpers.rb
451
453
  - app/helpers/dorsale/billing_machine/application_helper.rb
@@ -460,6 +462,8 @@ files:
460
462
  - app/helpers/dorsale/pagination_helper.rb
461
463
  - app/helpers/dorsale/routes_helper.rb
462
464
  - app/helpers/dorsale/text_helper.rb
465
+ - app/mailers/dorsale/application_mailer.rb
466
+ - app/mailers/dorsale/user_mailer.rb
463
467
  - app/models/dorsale/ability_helper.rb
464
468
  - app/models/dorsale/address.rb
465
469
  - app/models/dorsale/alexandrie/ability_helper.rb
@@ -497,6 +501,8 @@ files:
497
501
  - app/models/dorsale/small_data/filter.rb
498
502
  - app/models/dorsale/small_data/filter_strategy.rb
499
503
  - app/models/dorsale/user_scope.rb
504
+ - app/models/dorsale/users/active.rb
505
+ - app/models/dorsale/users/password_generation.rb
500
506
  - app/pdfs/dorsale/billing_machine/invoice_pdf.rb
501
507
  - app/pdfs/dorsale/billing_machine/quotation_pdf.rb
502
508
  - app/pdfs/dorsale/flyboy/roadmap.rb
@@ -584,6 +590,14 @@ files:
584
590
  - app/views/dorsale/flyboy/tasks/show.html.slim
585
591
  - app/views/dorsale/flyboy/tasks/summary.html.slim
586
592
  - app/views/dorsale/search/_form.html.slim
593
+ - app/views/dorsale/user_mailer/new_account.html.slim
594
+ - app/views/dorsale/users/_details.html.slim
595
+ - app/views/dorsale/users/_form.html.slim
596
+ - app/views/dorsale/users/_list.html.slim
597
+ - app/views/dorsale/users/edit.html.slim
598
+ - app/views/dorsale/users/index.html.slim
599
+ - app/views/dorsale/users/new.html.slim
600
+ - app/views/dorsale/users/show.html.slim
587
601
  - config/locales/alexandrie.en.yml
588
602
  - config/locales/alexandrie.fr.yml
589
603
  - config/locales/billing_machine.en.yml
@@ -613,6 +627,7 @@ files:
613
627
  - db/migrate/20151012181412_add_commercial_discount_to_invoices_and_quotations.rb
614
628
  - db/migrate/20151019100134_customer_vault_individuals_add_skype.rb
615
629
  - db/migrate/20151023135421_dorsale_billing_machine_quotations_add_state.rb
630
+ - db/migrate/20151103110115_add_is_active_to_users.rb
616
631
  - lib/active_record_comma_type_cast.rb
617
632
  - lib/dorsale.rb
618
633
  - lib/dorsale/alexandrie/prawn.rb
@@ -1552,6 +1567,7 @@ files:
1552
1567
  - spec/helpers/dorsale/flyboy/application_helper_spec.rb
1553
1568
  - spec/helpers/dorsale/link_helper_spec.rb
1554
1569
  - spec/helpers/dorsale/text_helper_spec.rb
1570
+ - spec/mailers/user_mailer.rb
1555
1571
  - spec/models/dorsale/ability_helper_spec.rb
1556
1572
  - spec/models/dorsale/address_spec.rb
1557
1573
  - spec/models/dorsale/alexandrie/ability_helper_spec.rb
@@ -1571,6 +1587,7 @@ files:
1571
1587
  - spec/models/dorsale/flyboy/task_comment_spec.rb
1572
1588
  - spec/models/dorsale/flyboy/task_spec.rb
1573
1589
  - spec/models/dorsale/small_data/filter_spec.rb
1590
+ - spec/models/dorsale/users_spec.rb
1574
1591
  - spec/pdfs/dorsale/billing_machine/invoice_pdf_spec.rb
1575
1592
  - spec/pdfs/dorsale/billing_machine/quotation_pdf_spec.rb
1576
1593
  - spec/rails_helper.rb
@@ -1585,6 +1602,7 @@ files:
1585
1602
  - spec/routing/dorsale/flyboy/task_comments_routing_spec.rb
1586
1603
  - spec/routing/dorsale/flyboy/tasks_routing_spec.rb
1587
1604
  - spec/routing/dorsale/small_data_routing_spec.rb
1605
+ - spec/routing/dorsale/users_routing_spec.rb
1588
1606
  - spec/spec_helper.rb
1589
1607
  - spec/support/devise.rb
1590
1608
  homepage: https://github.com/agilidee/dorsale
@@ -2537,6 +2555,7 @@ test_files:
2537
2555
  - spec/helpers/dorsale/flyboy/application_helper_spec.rb
2538
2556
  - spec/helpers/dorsale/link_helper_spec.rb
2539
2557
  - spec/helpers/dorsale/text_helper_spec.rb
2558
+ - spec/mailers/user_mailer.rb
2540
2559
  - spec/models/dorsale/ability_helper_spec.rb
2541
2560
  - spec/models/dorsale/address_spec.rb
2542
2561
  - spec/models/dorsale/alexandrie/ability_helper_spec.rb
@@ -2556,6 +2575,7 @@ test_files:
2556
2575
  - spec/models/dorsale/flyboy/task_comment_spec.rb
2557
2576
  - spec/models/dorsale/flyboy/task_spec.rb
2558
2577
  - spec/models/dorsale/small_data/filter_spec.rb
2578
+ - spec/models/dorsale/users_spec.rb
2559
2579
  - spec/pdfs/dorsale/billing_machine/invoice_pdf_spec.rb
2560
2580
  - spec/pdfs/dorsale/billing_machine/quotation_pdf_spec.rb
2561
2581
  - spec/rails_helper.rb
@@ -2570,5 +2590,6 @@ test_files:
2570
2590
  - spec/routing/dorsale/flyboy/task_comments_routing_spec.rb
2571
2591
  - spec/routing/dorsale/flyboy/tasks_routing_spec.rb
2572
2592
  - spec/routing/dorsale/small_data_routing_spec.rb
2593
+ - spec/routing/dorsale/users_routing_spec.rb
2573
2594
  - spec/spec_helper.rb
2574
2595
  - spec/support/devise.rb