expense_gun 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. checksums.yaml +7 -0
  2. data/Rakefile +34 -0
  3. data/app/assets/javascripts/expense_gun/application.js +4 -0
  4. data/app/assets/stylesheets/expense_gun/application.sass +4 -0
  5. data/app/assets/stylesheets/expense_gun/expenses.sass +20 -0
  6. data/app/assets/stylesheets/expense_gun/layout.sass +2 -0
  7. data/app/controllers/expense_gun/application_controller.rb +7 -0
  8. data/app/controllers/expense_gun/expense_lines_controller.rb +64 -0
  9. data/app/controllers/expense_gun/expenses_controller.rb +107 -0
  10. data/app/helpers/expense_gun/application_helper.rb +4 -0
  11. data/app/helpers/expense_gun/form_helper.rb +11 -0
  12. data/app/models/expense_gun/ability.rb +30 -0
  13. data/app/models/expense_gun/category.rb +5 -0
  14. data/app/models/expense_gun/expense.rb +62 -0
  15. data/app/models/expense_gun/expense_line.rb +26 -0
  16. data/app/views/expense_gun/expense_lines/_form.html.slim +16 -0
  17. data/app/views/expense_gun/expense_lines/edit.html.slim +4 -0
  18. data/app/views/expense_gun/expense_lines/new.html.slim +4 -0
  19. data/app/views/expense_gun/expenses/_form.html.slim +5 -0
  20. data/app/views/expense_gun/expenses/edit.html.slim +4 -0
  21. data/app/views/expense_gun/expenses/index.html.slim +63 -0
  22. data/app/views/expense_gun/expenses/new.html.slim +4 -0
  23. data/app/views/expense_gun/expenses/show.html.slim +84 -0
  24. data/app/views/kaminari/bootstrap3/_gap.html.slim +2 -0
  25. data/app/views/kaminari/bootstrap3/_page.html.slim +6 -0
  26. data/app/views/kaminari/bootstrap3/_paginator.html.slim +8 -0
  27. data/config/cucumber.yml +8 -0
  28. data/config/initializers/formtastic.rb +78 -0
  29. data/config/routes.rb +13 -0
  30. data/db/migrate/20141201092102_create_expense_gun_expenses.rb +8 -0
  31. data/db/migrate/20141201100548_expenses_add_state.rb +5 -0
  32. data/db/migrate/20141201111528_create_expense_gun_expense_lines.rb +13 -0
  33. data/db/migrate/20141201115918_create_expense_gun_categories.rb +9 -0
  34. data/db/migrate/20141201145608_expense_lines_add_category_id.rb +5 -0
  35. data/db/migrate/20141202143656_categories_rename_tax.rb +5 -0
  36. data/db/migrate/20141202151845_expenses_add_date.rb +5 -0
  37. data/db/migrate/20141203153649_field_names_like_billing_machine.rb +7 -0
  38. data/lib/expense_gun/admin/category.rb +12 -0
  39. data/lib/expense_gun/engine.rb +9 -0
  40. data/lib/expense_gun/version.rb +3 -0
  41. data/lib/expense_gun.rb +8 -0
  42. data/lib/tasks/cucumber.rake +65 -0
  43. data/lib/tasks/expense_gun_tasks.rake +4 -0
  44. data/spec/dummy/README.rdoc +28 -0
  45. data/spec/dummy/Rakefile +6 -0
  46. data/spec/dummy/app/admin/dashboard.rb +33 -0
  47. data/spec/dummy/app/assets/javascripts/active_admin.js.coffee +1 -0
  48. data/spec/dummy/app/assets/javascripts/application.js +13 -0
  49. data/spec/dummy/app/assets/stylesheets/active_admin.css.scss +17 -0
  50. data/spec/dummy/app/assets/stylesheets/application.css +15 -0
  51. data/spec/dummy/app/controllers/application_controller.rb +5 -0
  52. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  53. data/spec/dummy/app/views/layouts/expense_gun/application.html.slim +20 -0
  54. data/spec/dummy/bin/bundle +3 -0
  55. data/spec/dummy/bin/rails +4 -0
  56. data/spec/dummy/bin/rake +4 -0
  57. data/spec/dummy/config/application.rb +23 -0
  58. data/spec/dummy/config/boot.rb +5 -0
  59. data/spec/dummy/config/database.yml +25 -0
  60. data/spec/dummy/config/environment.rb +5 -0
  61. data/spec/dummy/config/environments/development.rb +37 -0
  62. data/spec/dummy/config/environments/production.rb +78 -0
  63. data/spec/dummy/config/environments/test.rb +39 -0
  64. data/spec/dummy/config/initializers/active_admin.rb +233 -0
  65. data/spec/dummy/config/initializers/assets.rb +8 -0
  66. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  67. data/spec/dummy/config/initializers/cookies_serializer.rb +3 -0
  68. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  69. data/spec/dummy/config/initializers/inflections.rb +16 -0
  70. data/spec/dummy/config/initializers/mime_types.rb +4 -0
  71. data/spec/dummy/config/initializers/session_store.rb +3 -0
  72. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  73. data/spec/dummy/config/locales/en.yml +23 -0
  74. data/spec/dummy/config/routes.rb +4 -0
  75. data/spec/dummy/config/secrets.yml +22 -0
  76. data/spec/dummy/config.ru +4 -0
  77. data/spec/dummy/db/schema.rb +42 -0
  78. data/spec/dummy/public/404.html +67 -0
  79. data/spec/dummy/public/422.html +67 -0
  80. data/spec/dummy/public/500.html +66 -0
  81. data/spec/dummy/public/favicon.ico +0 -0
  82. data/spec/factories/expense_gun_category.rb +7 -0
  83. data/spec/factories/expense_gun_expense.rb +11 -0
  84. data/spec/factories/expense_gun_expense_line.rb +10 -0
  85. data/spec/factories.rb +5 -0
  86. data/spec/models/category_spec.rb +12 -0
  87. data/spec/models/expense_line_spec.rb +81 -0
  88. data/spec/models/expense_spec.rb +171 -0
  89. data/spec/rails_helper.rb +52 -0
  90. data/spec/spec_helper.rb +85 -0
  91. metadata +319 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 0e08be595ad351a7b620475f7c85e81d4e5956ae
4
+ data.tar.gz: a3284770e9fd5d1d057087fe45ee708ce6790cc2
5
+ SHA512:
6
+ metadata.gz: 44f9fb09c8b001ea8b5160f1a178cc428c67847e900e9cc0d72fea45d1f3bf996bbb9c7173aa2f7174627d814588cfca81b3f62402a4d5cd98a90271a0c7d235
7
+ data.tar.gz: 9bb3e349247c589c2b7e3f79096667b641f72f3cdbaab2a6609529f96c5c7cdc52340fb55b3ee7b8379a7f289150a2a482c9acd454857d61e027246d8d7195d3
data/Rakefile ADDED
@@ -0,0 +1,34 @@
1
+ begin
2
+ require 'bundler/setup'
3
+ rescue LoadError
4
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
5
+ end
6
+
7
+ require 'rdoc/task'
8
+
9
+ RDoc::Task.new(:rdoc) do |rdoc|
10
+ rdoc.rdoc_dir = 'rdoc'
11
+ rdoc.title = 'ExpenseGun'
12
+ rdoc.options << '--line-numbers'
13
+ rdoc.rdoc_files.include('README.rdoc')
14
+ rdoc.rdoc_files.include('lib/**/*.rb')
15
+ end
16
+
17
+ APP_RAKEFILE = File.expand_path("../spec/dummy/Rakefile", __FILE__)
18
+ load 'rails/tasks/engine.rake'
19
+
20
+
21
+
22
+ Bundler::GemHelper.install_tasks
23
+
24
+ require 'rake/testtask'
25
+
26
+ Rake::TestTask.new(:test) do |t|
27
+ t.libs << 'lib'
28
+ t.libs << 'test'
29
+ t.pattern = 'test/**/*_test.rb'
30
+ t.verbose = false
31
+ end
32
+
33
+
34
+ task default: :test
@@ -0,0 +1,4 @@
1
+ //= require jquery
2
+ //= require jquery_ujs
3
+ //= require bootstrap
4
+ //= require_tree .
@@ -0,0 +1,4 @@
1
+ //= require_tree .
2
+ //= require_self
3
+
4
+ @import bootstrap
@@ -0,0 +1,20 @@
1
+ .expenses
2
+ .panel strong
3
+ display: inline-block
4
+ width: 45%
5
+ .panel .date
6
+ text-align: right
7
+ color: #666
8
+ .actions-block
9
+ text-align: right
10
+ padding: 1em 0
11
+ .btn
12
+ margin-left: 0.5em
13
+ &:first-child
14
+ margin-left: 0
15
+
16
+ @media print
17
+ p
18
+ margin: 0
19
+ font-size: 10pt
20
+ line-height: 1.25em
@@ -0,0 +1,2 @@
1
+ body
2
+ padding-bottom: 1em
@@ -0,0 +1,7 @@
1
+ module ExpenseGun
2
+ class ApplicationController < ActionController::Base
3
+ def current_ability
4
+ @current_ability ||= Ability.new(nil)
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,64 @@
1
+ require_dependency "expense_gun/application_controller"
2
+
3
+ module ExpenseGun
4
+ class ExpenseLinesController < ApplicationController
5
+ before_action :set_objects
6
+
7
+ def index
8
+ redirect_to expense_path(@expense)
9
+ end
10
+
11
+ def new
12
+ authorize! :edit, @expense
13
+
14
+ @expense_line = @expense.expense_lines.new
15
+ end
16
+
17
+ def create
18
+ authorize! :edit, @expense
19
+
20
+ @expense_line = @expense.expense_lines.new(expense_line_params)
21
+
22
+ if @expense_line.save
23
+ flash[:success] = "Expense line created"
24
+ redirect_to expense_path(@expense)
25
+ else
26
+ render :new
27
+ end
28
+ end
29
+
30
+ def edit
31
+ authorize! :edit, @expense
32
+ end
33
+
34
+ def update
35
+ authorize! :edit, @expense
36
+
37
+ if @expense_line.update_attributes(expense_line_params)
38
+ flash[:success] = "Expense line updated"
39
+ redirect_to expense_path(@expense)
40
+ else
41
+ render :edit
42
+ end
43
+ end
44
+
45
+ def destroy
46
+ authorize! :edit, @expense
47
+
48
+ @expense_line.destroy
49
+ flash[:success] = "Expense line destroyed"
50
+ redirect_to expense_path(@expense)
51
+ end
52
+
53
+ private
54
+
55
+ def set_objects
56
+ @expense = Expense.find params[:expense_id]
57
+ @expense_line = ExpenseLine.find params[:id] if params[:id].present?
58
+ end
59
+
60
+ def expense_line_params
61
+ params.require(:expense_line).permit!
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,107 @@
1
+ require_dependency "expense_gun/application_controller"
2
+
3
+ module ExpenseGun
4
+ class ExpensesController < ApplicationController
5
+ before_action :set_expense, only: [:show, :edit, :update, :destroy, :submit, :accept, :refuse, :cancel]
6
+
7
+ def index
8
+ authorize! :list, Expense
9
+
10
+ if params[:state].blank?
11
+ redirect_to state: "submited"
12
+ return
13
+ end
14
+
15
+ if params[:state] == "all"
16
+ @expenses ||= Expense.all
17
+ else
18
+ @expenses ||= Expense.where(state: params[:state])
19
+ end
20
+
21
+ @expenses = @expenses.page(params[:page])
22
+ @all_expenses ||= Expense.all
23
+ end
24
+
25
+ def new
26
+ authorize! :create, Expense
27
+
28
+ @expense ||= Expense.new
29
+ end
30
+
31
+ def create
32
+ authorize! :create, Expense
33
+
34
+ @expense ||= Expense.new(expense_params)
35
+
36
+ if @expense.save
37
+ flash[:success] = "Expense created"
38
+ redirect_to expense_path(@expense)
39
+ else
40
+ render :new
41
+ end
42
+ end
43
+
44
+ def show
45
+ authorize! :show, @expense
46
+ end
47
+
48
+ def edit
49
+ authorize! :edit, @expense
50
+
51
+ @expense_line ||= ExpenseGun::ExpenseLine.new
52
+ end
53
+
54
+ def update
55
+ authorize! :edit, @expense
56
+
57
+ if @expense.update_attributes(expense_params)
58
+ flash[:success] = "Expense updated"
59
+ redirect_to expense_path(@expense)
60
+ else
61
+ render :edit
62
+ end
63
+ end
64
+
65
+ def submit
66
+ authorize! :submit, @expense
67
+
68
+ @expense.submit!
69
+ flash[:success] = "Expense submited"
70
+ redirect_to expenses_path
71
+ end
72
+
73
+ def accept
74
+ authorize! :accept, @expense
75
+
76
+ @expense.accept!
77
+ flash[:success] = "Expense accepted"
78
+ redirect_to expense_path(@expense)
79
+ end
80
+
81
+ def refuse
82
+ authorize! :refuse, @expense
83
+
84
+ @expense.refuse!
85
+ flash[:success] = "Expense refused"
86
+ redirect_to expenses_path
87
+ end
88
+
89
+ def cancel
90
+ authorize! :cancel, @expense
91
+
92
+ @expense.cancel!
93
+ flash[:success] = "Expense canceled"
94
+ redirect_to expenses_path
95
+ end
96
+
97
+ private
98
+
99
+ def set_expense
100
+ @expense = Expense.find(params[:id])
101
+ end
102
+
103
+ def expense_params
104
+ params.require(:expense).permit!
105
+ end
106
+ end
107
+ end
@@ -0,0 +1,4 @@
1
+ module ExpenseGun
2
+ module ApplicationHelper
3
+ end
4
+ end
@@ -0,0 +1,11 @@
1
+ module ExpenseGun
2
+ module FormHelper
3
+ def form(*args, &block)
4
+ semantic_form_for(*args, &block)
5
+ end
6
+
7
+ def form_errors(f)
8
+ f.semantic_errors
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,30 @@
1
+ module ExpenseGun
2
+ class Ability
3
+ include CanCan::Ability
4
+
5
+ def initialize(user)
6
+ can :list, Expense
7
+ can :create, Expense
8
+ can :show, Expense
9
+
10
+ can :edit, Expense do |expense|
11
+ expense.may_edit?
12
+ end
13
+ can :submit, Expense do |expense|
14
+ expense.may_submit?
15
+ end
16
+
17
+ can :accept, Expense do |expense|
18
+ expense.may_accept?
19
+ end
20
+
21
+ can :refuse, Expense do |expense|
22
+ expense.may_refuse?
23
+ end
24
+
25
+ can :cancel, Expense do |expense|
26
+ expense.may_cancel?
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,5 @@
1
+ module ExpenseGun
2
+ class Category < ActiveRecord::Base
3
+ validates :name, presence: true
4
+ end
5
+ end
@@ -0,0 +1,62 @@
1
+ module ExpenseGun
2
+ class Expense < ActiveRecord::Base
3
+ include AASM
4
+
5
+ has_many :expense_lines, inverse_of: :expense
6
+
7
+ validates :name, presence: true
8
+ validates :date, presence: true
9
+
10
+ def initialize(*args)
11
+ super
12
+ self.date = Date.today if self.date.nil?
13
+ end
14
+
15
+ # Sum of line amounts
16
+ def total_all_taxes
17
+ expense_lines.map(&:total_all_taxes).sum
18
+ end
19
+
20
+ # Sum of line emplee payback
21
+ def total_employee_payback
22
+ expense_lines.map(&:employee_payback).sum
23
+ end
24
+
25
+ # Sum of deductible deductible vat
26
+ def total_vat_deductible
27
+ expense_lines.map(&:total_vat_deductible).sum
28
+ end
29
+
30
+ def current_state
31
+ aasm.current_state
32
+ end
33
+
34
+ aasm(column: :state, whiny_transitions: false) do
35
+ state :new, initial: true
36
+ state :submited
37
+ state :accepted
38
+ state :refused
39
+ state :canceled
40
+
41
+ event :submit do
42
+ transitions from: :new, to: :submited
43
+ end
44
+
45
+ event :accept do
46
+ transitions from: :submited, to: :accepted
47
+ end
48
+
49
+ event :refuse do
50
+ transitions from: :submited, to: :refused
51
+ end
52
+
53
+ event :cancel do
54
+ transitions from: [:new, :submited, :accepted], to: :canceled
55
+ end
56
+ end
57
+
58
+ def may_edit?
59
+ current_state == :new
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,26 @@
1
+ module ExpenseGun
2
+ class ExpenseLine < ActiveRecord::Base
3
+ belongs_to :expense
4
+ belongs_to :category
5
+
6
+ def initialize(h = {})
7
+ super({company_part: 100}.merge(h))
8
+ end
9
+
10
+ validates :expense, presence: true
11
+ validates :name, presence: true
12
+ validates :date, presence: true
13
+ validates :category, presence: true
14
+ validates :total_all_taxes, presence: true, numericality: {greater_than_or_equal_to: 1.0}
15
+ validates :vat, presence: true, numericality: {greater_than_or_equal_to: 1.0}
16
+ validates :company_part, presence: true, numericality: {greater_than_or_equal_to: 1.0, less_than_or_equal_to: 100.0}
17
+
18
+ def employee_payback
19
+ (total_all_taxes * company_part / 100)
20
+ end
21
+
22
+ def total_vat_deductible
23
+ category.vat_deductible == true ? vat : 0.0
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,16 @@
1
+ = form [expense_gun, @expense, @expense_line] do |f|
2
+ .panel.panel-default
3
+ .panel-body
4
+ .row
5
+ .col-md-6
6
+ = f.input :name
7
+ = f.input :date, as: :string, input_html: {type: :date}
8
+ .form-group
9
+ label for="expense_line_category_id" Category
10
+ = f.collection_select :category_id, ExpenseGun::Category.all, :id, :name, {include_blank: true}, {class: "form-control"}
11
+ .col-md-6
12
+ = f.input :total_all_taxes
13
+ = f.input :vat
14
+ = f.input :company_part
15
+
16
+ = f.actions
@@ -0,0 +1,4 @@
1
+ h1 Edit expense line
2
+
3
+ .expenses.expense_lines
4
+ = render "form"
@@ -0,0 +1,4 @@
1
+ h1 = "#{@expense.name} : New expense line"
2
+
3
+ .expenses.expense_lines
4
+ = render "form"
@@ -0,0 +1,5 @@
1
+ .row: .col-md-6
2
+ = form [expense_gun, @expense] do |f|
3
+ = f.input :name
4
+ = f.input :date, as: :string, input_html: {type: :date}
5
+ = f.actions
@@ -0,0 +1,4 @@
1
+ h1 = @expense.name
2
+
3
+ .expenses
4
+ = render "form"
@@ -0,0 +1,63 @@
1
+ h1 Expenses list
2
+
3
+ .row.expenses
4
+ .col-md-4
5
+ ul.nav.nav-pills.nav-stacked
6
+ - for state in %w(submited new accepted refused canceled)
7
+ li class=("active" if params[:state] == state)
8
+ a href=expense_gun.url_for(state: state)
9
+ = state.capitalize
10
+ span.badge.pull-right = @all_expenses.where(state: state).count
11
+
12
+ li class=("active" if params[:state] == "all")
13
+ a href=expense_gun.url_for(state: "all")
14
+ = "All"
15
+ span.badge.pull-right = @all_expenses.count
16
+
17
+ hr
18
+
19
+ p = link_to "New expense", expense_gun.new_expense_path, class: "btn btn-success"
20
+
21
+ .col-md-8
22
+ - for expense in @expenses
23
+ .panel.panel-default
24
+ .panel-heading
25
+ .row
26
+ .col-md-8
27
+ h2.panel-title = expense.name
28
+ .col-md-4
29
+ .date = expense.date
30
+ .panel-body
31
+ .row: .col-md-6
32
+ p
33
+ strong = "Employee :"
34
+ = expense.user.full_name if expense.respond_to?(:user)
35
+
36
+ p
37
+ strong = "State :"
38
+ = expense.current_state.capitalize
39
+
40
+ p
41
+ strong = "Total all taxes :"
42
+ = "#{expense.total_all_taxes} €"
43
+
44
+ .panel-footer
45
+ = link_to "Show", expense_gun.expense_path(expense), class: "btn btn-default"
46
+
47
+ - if can? :edit, expense
48
+ = link_to "Edit", expense_gun.edit_expense_path(expense), class: "btn btn-default"
49
+
50
+ - if can? :submit, expense
51
+ = link_to "Submit", expense_gun.submit_expense_path(expense), data: {method: "patch"}, class: "btn btn-primary"
52
+
53
+ - if can? :accept, expense
54
+ = link_to "Accept", expense_gun.accept_expense_path(expense), data: {method: "patch"}, class: "btn btn-success"
55
+
56
+ - if can? :refuse, expense
57
+ = link_to "Refuse", expense_gun.refuse_expense_path(expense), data: {method: "patch"}, class: "btn btn-danger"
58
+
59
+ - if can? :cancel, expense
60
+ = link_to "Cancel", expense_gun.cancel_expense_path(expense), data: {method: "patch"}, class: "btn btn-warning"
61
+
62
+
63
+ == paginate @expenses, theme: "bootstrap3"
@@ -0,0 +1,4 @@
1
+ h1 New Expense
2
+
3
+ .expenses
4
+ = render "form"
@@ -0,0 +1,84 @@
1
+ .expenses
2
+ .actions-block.hidden-print
3
+ - if can? :edit, @expense
4
+ = link_to "New expense line", expense_gun.new_expense_expense_line_path(@expense), class: "btn btn-success"
5
+ = link_to "Edit expense", expense_gun.edit_expense_path(@expense), class: "btn btn-default"
6
+ = link_to "Expenses list", expense_gun.expenses_path, class: "btn btn-default"
7
+ a.btn.btn-default href="#" onclick="print(); return false;" = "Print"
8
+
9
+ h1 = "Expense : #{@expense.name}"
10
+
11
+ p
12
+ span.date
13
+ strong = "Date : "
14
+ = @expense.date
15
+ br
16
+ span.user
17
+ strong = "Employee : "
18
+ = @expense.user.full_name if @expense.respond_to?(:user)
19
+ br
20
+ span.state
21
+ strong = "State : "
22
+ = @expense.state.capitalize
23
+
24
+ hr
25
+
26
+ - for expense_line in @expense.expense_lines
27
+ .panel.panel-default
28
+
29
+ .panel-body
30
+ .row
31
+ .col-md-6
32
+ p
33
+ strong = "Name :"
34
+ = expense_line.name
35
+ p
36
+ strong = "Date :"
37
+ = expense_line.date
38
+ p
39
+ strong = "Category :"
40
+ = expense_line.category.name
41
+ - if expense_line.category.code.present?
42
+ = " (#{expense_line.category.code})"
43
+ .col-md-6
44
+ p
45
+ strong = "Total all taxes :"
46
+ = "#{expense_line.total_all_taxes} €"
47
+ p
48
+ strong = "Tax :"
49
+ = "#{expense_line.vat} €"
50
+ p
51
+ strong = "Company part :"
52
+ = "#{expense_line.company_part} %"
53
+
54
+ .panel-footer
55
+ .row
56
+ .col-md-6.hidden-print
57
+ - if can? :edit, @expense
58
+ = link_to "Edit", expense_gun.edit_expense_expense_line_path(expense_line.expense, expense_line), class: "btn btn-default"
59
+ = link_to "Destroy", expense_gun.expense_expense_line_path(expense_line.expense, expense_line), class: "btn btn-danger", "data-method" => "delete", "data-confirm" => "Confirm ?"
60
+ .col-md-6
61
+ p
62
+ strong = "Employee payback :"
63
+ = "#{expense_line.employee_payback} €"
64
+ p
65
+ strong = "Deductible VAT :"
66
+ = "#{expense_line.total_vat_deductible} €"
67
+
68
+ hr
69
+
70
+ .panel.panel-default
71
+ .panel-body
72
+ .row
73
+ .col-md-6
74
+ strong = "Total :"
75
+ .col-md-6
76
+ p
77
+ strong = "Total all taxes :"
78
+ = "#{@expense.total_all_taxes} €"
79
+ p
80
+ strong = "Employee payback :"
81
+ = "#{@expense.total_employee_payback} €"
82
+ p
83
+ strong = "Deductible VAT :"
84
+ = "#{@expense.total_vat_deductible} €"
@@ -0,0 +1,2 @@
1
+ li.disabled
2
+ = link_to raw(t "views.pagination.truncate"), "#"
@@ -0,0 +1,6 @@
1
+ - if page.current?
2
+ li.active
3
+ = link_to page, "#", onclick: "return false;", remote: remote, rel: (page.next? ? "next" : page.prev? ? "prev" : nil)
4
+ - else
5
+ li
6
+ = link_to page, url, remote: remote, rel: (page.next? ? "next" : page.prev? ? "prev" : nil)
@@ -0,0 +1,8 @@
1
+ = paginator.render do
2
+ .pagination-container
3
+ ol.pagination
4
+ - each_page do |page|
5
+ - if page.left_outer? || page.right_outer? || page.inside_window?
6
+ == page_tag page
7
+ - elsif !page.was_truncated?
8
+ == gap_tag
@@ -0,0 +1,8 @@
1
+ <%
2
+ rerun = File.file?('rerun.txt') ? IO.read('rerun.txt') : ""
3
+ rerun_opts = rerun.to_s.strip.empty? ? "--format #{ENV['CUCUMBER_FORMAT'] || 'progress'} features" : "--format #{ENV['CUCUMBER_FORMAT'] || 'pretty'} #{rerun}"
4
+ std_opts = "--format #{ENV['CUCUMBER_FORMAT'] || 'pretty'} --strict --tags ~@wip"
5
+ %>
6
+ default: <%= std_opts %> features
7
+ wip: --tags @wip:3 --wip features
8
+ rerun: <%= rerun_opts %> --format rerun --out rerun.txt --strict --tags ~@wip