dorsale 2.3.5 → 2.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (28) hide show
  1. checksums.yaml +4 -4
  2. data/app/models/dorsale/billing_machine/small_data/filter_for_invoices.rb +3 -24
  3. data/app/models/dorsale/billing_machine/small_data/filter_for_quotations.rb +3 -24
  4. data/app/models/dorsale/billing_machine/small_data/filter_strategy_by_customer.rb +2 -2
  5. data/app/models/dorsale/billing_machine/small_data/filter_strategy_by_payment_status.rb +5 -5
  6. data/app/models/dorsale/billing_machine/small_data/filter_strategy_by_state.rb +3 -3
  7. data/app/models/dorsale/billing_machine/small_data/filter_strategy_by_time_period.rb +6 -12
  8. data/app/models/dorsale/customer_vault/small_data/filter_for_people.rb +1 -9
  9. data/app/models/dorsale/customer_vault/small_data/filter_strategy_by_tags.rb +4 -5
  10. data/app/models/dorsale/expense_gun/expense.rb +5 -0
  11. data/app/models/dorsale/flyboy/small_data/filter_for_folders.rb +1 -9
  12. data/app/models/dorsale/flyboy/small_data/filter_for_tasks.rb +2 -10
  13. data/app/models/dorsale/flyboy/small_data/filter_strategy_by_done.rb +2 -2
  14. data/app/models/dorsale/flyboy/small_data/filter_strategy_by_status.rb +2 -2
  15. data/app/models/dorsale/small_data/filter.rb +25 -20
  16. data/app/models/dorsale/small_data/filter_strategy.rb +5 -23
  17. data/app/models/dorsale/small_data/filter_strategy_by_date.rb +10 -0
  18. data/app/models/dorsale/small_data/filter_strategy_by_key_value.rb +15 -0
  19. data/app/views/dorsale/expense_gun/expenses/show.html.slim +6 -1
  20. data/lib/dorsale/version.rb +1 -1
  21. data/spec/controllers/dorsale/flyboy/tasks_controller_spec.rb +3 -2
  22. data/spec/dummy/db/test.sqlite3 +0 -0
  23. data/spec/dummy/log/test.log +83367 -0
  24. data/spec/models/dorsale/expense_gun/expense_spec.rb +16 -16
  25. data/spec/models/dorsale/small_data/filter_spec.rb +3 -1
  26. metadata +4 -4
  27. data/app/models/dorsale/flyboy/small_data/filter_strategy_by_nothing.rb +0 -11
  28. data/app/models/dorsale/flyboy/small_data/filter_strategy_by_owner.rb +0 -11
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 27af876d5c2fd0ae2a77cb69da09b5e32ef28912
4
- data.tar.gz: 124ce3d1ce7902a38a2a4c78bc98f48373909eb5
3
+ metadata.gz: 784128baeb6b43ea6d548bc00b3ff135aeef90b4
4
+ data.tar.gz: a3a2a40bfd491bd1c09bd06572a42f5a9ddd0987
5
5
  SHA512:
6
- metadata.gz: 8218233e60c22df65a8fb0d049e94113208ad6a927405fa6788692433df98a4f1a56304ddd19e46f33c82b64931d42720d4bb6fcdf442bfc4a2c2b43c1da45f9
7
- data.tar.gz: 2cfe5b4f37dec228c8b74efeac92d8c07963ef53f1575caa14df5d5f0ab9be61d64ed4cb74b7d7d06bff42d46bbe95d5b719f8ffa9930a88e1cf513ac56b5f71
6
+ metadata.gz: 65600444caedc4c3bdbcfa9822dfd92abd022b32554659c2d2b7c375e89555d1888ef733ad29ec5d19dbd177e6887bc4324225321ded604a27dd7500ab187ad1
7
+ data.tar.gz: 4da36e1234e2760ed1e7e1d75b0d6a7eef37e74e7e3f6acdefb627ae99866e29a3e53651601564fd9e0d7eb3c76da86ceafe3256d820e093f427e0050a49dd94
@@ -3,31 +3,10 @@ module Dorsale
3
3
  module SmallData
4
4
  class FilterForInvoices < ::Dorsale::SmallData::Filter
5
5
  STRATEGIES = {
6
- "customer_guid" => FilterStrategyByCustomer.new("invoices"),
7
- "bm_time_period" => FilterStrategyByTimePeriod.new("invoices"),
8
- "bm_payment_status" => FilterStrategyByPaymentStatus.new("invoices"),
6
+ "customer_guid" => FilterStrategyByCustomer.new,
7
+ "bm_time_period" => FilterStrategyByTimePeriod.new(:date),
8
+ "bm_payment_status" => FilterStrategyByPaymentStatus.new,
9
9
  }
10
-
11
- def strategy key
12
- STRATEGIES[key]
13
- end
14
-
15
- def target
16
- "invoices"
17
- end
18
-
19
- def customer_guid
20
- get(__method__)
21
- end
22
-
23
- def bm_time_period
24
- get(__method__)
25
- end
26
-
27
- def bm_payment_status
28
- get(__method__)
29
- end
30
-
31
10
  end
32
11
  end
33
12
  end
@@ -3,31 +3,10 @@ module Dorsale
3
3
  module SmallData
4
4
  class FilterForQuotations < ::Dorsale::SmallData::Filter
5
5
  STRATEGIES = {
6
- "customer_guid" => FilterStrategyByCustomer.new("quotations"),
7
- "bm_time_period" => FilterStrategyByTimePeriod.new("quotations"),
8
- "bm_quotation_state" => FilterStrategyByState.new("quotations"),
6
+ "customer_guid" => FilterStrategyByCustomer.new,
7
+ "bm_time_period" => FilterStrategyByTimePeriod.new(:date),
8
+ "bm_quotation_state" => FilterStrategyByState.new,
9
9
  }
10
-
11
- def strategy key
12
- STRATEGIES[key]
13
- end
14
-
15
- def target
16
- "quotations"
17
- end
18
-
19
- def customer_guid
20
- get(__method__)
21
- end
22
-
23
- def bm_time_period
24
- get(__method__)
25
- end
26
-
27
- def bm_quotation_state
28
- get(__method__)
29
- end
30
-
31
10
  end
32
11
  end
33
12
  end
@@ -2,8 +2,8 @@ module Dorsale
2
2
  module BillingMachine
3
3
  module SmallData
4
4
  class FilterStrategyByCustomer < ::Dorsale::SmallData::FilterStrategy
5
- def do_apply query
6
- type, id = @value.split("-")
5
+ def apply(query, value)
6
+ type, id = value.split("-")
7
7
  query.where(customer_type: type, customer_id: id)
8
8
  end
9
9
  end
@@ -2,16 +2,16 @@ module Dorsale
2
2
  module BillingMachine
3
3
  module SmallData
4
4
  class FilterStrategyByPaymentStatus < ::Dorsale::SmallData::FilterStrategy
5
- def do_apply query
5
+ def apply(query, value)
6
6
  table_name = query.model.table_name
7
7
 
8
- if @value == "paid"
8
+ if value == "paid"
9
9
  return query.where("#{table_name}.paid = ?", true)
10
- elsif @value == "unpaid"
10
+ elsif value == "unpaid"
11
11
  return query.where("#{table_name}.paid = ?", false)
12
- elsif @value == "pending"
12
+ elsif value == "pending"
13
13
  return query.where("#{table_name}.paid = ? and #{table_name}.due_date >= ?", false, Date.today)
14
- elsif @value == "late"
14
+ elsif value == "late"
15
15
  return query.where("#{table_name}.paid = ? and (#{table_name}.due_date < ? or #{table_name}.due_date is null)", false, Date.today)
16
16
  else
17
17
  return query
@@ -2,11 +2,11 @@ module Dorsale
2
2
  module BillingMachine
3
3
  module SmallData
4
4
  class FilterStrategyByState < ::Dorsale::SmallData::FilterStrategy
5
- def do_apply(query)
6
- if @value.to_s.match(/not_(.+)/)
5
+ def apply(query, value)
6
+ if value.to_s.match(/not_(.+)/)
7
7
  query.where("state != ?", $~[1])
8
8
  else
9
- query.where(state: @value)
9
+ query.where(state: value)
10
10
  end
11
11
  end
12
12
  end
@@ -1,21 +1,15 @@
1
1
  module Dorsale
2
2
  module BillingMachine
3
3
  module SmallData
4
- class FilterStrategyByTimePeriod < ::Dorsale::SmallData::FilterStrategy
5
- def do_apply query
6
- if query.model.attribute_names.include?("day")
7
- field = :day
8
- else
9
- field = :date
10
- end
11
-
12
- criteria = "#{query.model.table_name}.#{field}"
4
+ class FilterStrategyByTimePeriod < ::Dorsale::SmallData::FilterStrategyByKeyValue
5
+ def apply(query, value)
6
+ criteria = "#{query.model.table_name}.#{key}"
13
7
 
14
- if @value == "today"
8
+ if value == "today"
15
9
  return query.where("#{criteria} >= ?", Date.today)
16
- elsif @value == "week"
10
+ elsif value == "week"
17
11
  return query.where("#{criteria} >= ?", Date.today.at_beginning_of_week)
18
- elsif @value == "month"
12
+ elsif value == "month"
19
13
  return query.where("#{criteria} >= ?", Date.today.at_beginning_of_month)
20
14
  else
21
15
  return query
@@ -3,16 +3,8 @@ module Dorsale
3
3
  module SmallData
4
4
  class FilterForPeople < ::Dorsale::SmallData::Filter
5
5
  STRATEGIES = {
6
- "tags" => ::Dorsale::CustomerVault::SmallData::FilterStrategyByTags.new("people")
6
+ "tags" => ::Dorsale::CustomerVault::SmallData::FilterStrategyByTags.new
7
7
  }
8
-
9
- def strategy key
10
- STRATEGIES[key]
11
- end
12
-
13
- def target
14
- "people"
15
- end
16
8
  end
17
9
  end
18
10
  end
@@ -2,15 +2,14 @@ module Dorsale
2
2
  module CustomerVault
3
3
  module SmallData
4
4
  class FilterStrategyByTags < ::Dorsale::SmallData::FilterStrategy
5
- def do_apply(query)
6
- @value = [*@value].flatten.select{ |v| v.present? }
5
+ def apply(query, value)
6
+ value = [*value].flatten.select{ |v| v.present? }
7
7
 
8
- if @value.any?
9
- query.tagged_with(@value)
8
+ if value.any?
9
+ query.tagged_with(value)
10
10
  else
11
11
  query
12
12
  end
13
-
14
13
  end
15
14
  end
16
15
  end
@@ -6,6 +6,11 @@ module Dorsale
6
6
 
7
7
  has_many :expense_lines, inverse_of: :expense, dependent: :destroy, class_name: ::Dorsale::ExpenseGun::ExpenseLine
8
8
 
9
+ has_many :attachments,
10
+ :as => :attachable,
11
+ :dependent => :destroy,
12
+ :class_name => ::Dorsale::Alexandrie::Attachment
13
+
9
14
  validates :name, presence: true
10
15
  validates :date, presence: true
11
16
 
@@ -3,16 +3,8 @@ module Dorsale
3
3
  module SmallData
4
4
  class FilterForFolders < ::Dorsale::SmallData::Filter
5
5
  STRATEGIES = {
6
- "fb_status" => FilterStrategyByStatus.new("folders")
6
+ "fb_status" => FilterStrategyByStatus.new,
7
7
  }
8
-
9
- def strategy key
10
- STRATEGIES[key]
11
- end
12
-
13
- def target
14
- "folders"
15
- end
16
8
  end
17
9
  end
18
10
  end
@@ -3,17 +3,9 @@ module Dorsale
3
3
  module SmallData
4
4
  class FilterForTasks < ::Dorsale::SmallData::Filter
5
5
  STRATEGIES = {
6
- "fb_status" => FilterStrategyByDone.new("tasks"),
7
- "owner" => FilterStrategyByOwner.new("tasks")
6
+ "fb_status" => FilterStrategyByDone.new,
7
+ "owner" => ::Dorsale::SmallData::FilterStrategyByKeyValue.new("owner_id")
8
8
  }
9
-
10
- def strategy key
11
- STRATEGIES[key]
12
- end
13
-
14
- def target
15
- "tasks"
16
- end
17
9
  end
18
10
  end
19
11
  end
@@ -2,8 +2,8 @@ module Dorsale
2
2
  module Flyboy
3
3
  module SmallData
4
4
  class FilterStrategyByDone < ::Dorsale::SmallData::FilterStrategy
5
- def do_apply query
6
- value = (@value == 'closed')
5
+ def apply(query, value)
6
+ value = (value == "closed")
7
7
  query.where(done: value)
8
8
  end
9
9
  end
@@ -2,8 +2,8 @@ module Dorsale
2
2
  module Flyboy
3
3
  module SmallData
4
4
  class FilterStrategyByStatus < ::Dorsale::SmallData::FilterStrategy
5
- def do_apply query
6
- if @value == "closed"
5
+ def apply(query, value)
6
+ if value == "closed"
7
7
  query.where(status: "closed")
8
8
  else
9
9
  query.where.not(status: "closed")
@@ -1,25 +1,18 @@
1
1
  module Dorsale
2
2
  module SmallData
3
3
  class Filter
4
-
5
4
  def initialize(jar)
6
5
  @jar = jar
7
6
  end
8
7
 
9
8
  def store(filters)
10
- @jar['filters'] = filters.to_json
9
+ @jar["filters"] = filters.to_json
11
10
  end
12
11
 
13
12
  def read
14
- if @jar['filters']
15
- begin
16
- JSON.parse @jar['filters']
17
- rescue JSON::ParserError
18
- {}
19
- end
20
- else
21
- {}
22
- end
13
+ JSON.parse @jar["filters"].to_s
14
+ rescue JSON::ParserError
15
+ {}
23
16
  end
24
17
 
25
18
  def get(key)
@@ -32,19 +25,31 @@ module Dorsale
32
25
  store(array)
33
26
  end
34
27
 
28
+ def strategies
29
+ self.class::STRATEGIES
30
+ end
31
+
35
32
  def apply(query)
36
- read.each do |key, value|
37
- filter = strategy(key)
33
+ strategies.each do |key, strategy|
34
+ value = get(key)
38
35
 
39
- if filter && filter.applies?(self.target)
40
- filter.set(key, value)
41
- query = filter.apply(query)
42
- end
36
+ next if value.blank?
37
+
38
+ query = strategy.apply(query, value)
43
39
  end
44
40
 
45
41
  return query
46
42
  end
47
43
 
48
- end
49
- end
50
- end
44
+ def method_missing(method, *args)
45
+ key = method.to_s
46
+
47
+ if strategies.key?(key)
48
+ get(key)
49
+ else
50
+ super
51
+ end
52
+ end
53
+ end # Filter
54
+ end # SmallData
55
+ end # Dorsale
@@ -1,27 +1,9 @@
1
1
  module Dorsale
2
2
  module SmallData
3
3
  class FilterStrategy
4
- def initialize(target)
5
- @target = target
4
+ def apply(query, value)
5
+ raise NotImplementedError
6
6
  end
7
-
8
- def set(key, value)
9
- @key = key
10
- @value = value
11
- return self
12
- end
13
-
14
- def apply(query)
15
- if @value and @value != ''
16
- do_apply(query)
17
- else
18
- query
19
- end
20
- end
21
-
22
- def applies?(target)
23
- @target == target
24
- end
25
- end
26
- end
27
- end
7
+ end # FilterStrategy
8
+ end # SmallData
9
+ end # Dorsale
@@ -0,0 +1,10 @@
1
+ module Dorsale
2
+ module SmallData
3
+ class FilterStrategyByDate < ::Dorsale::SmallData::FilterStrategyByKeyValue
4
+ def apply(query, value)
5
+ value = Date.parse(value)
6
+ super(query, value)
7
+ end
8
+ end # FilterStrategy
9
+ end # SmallData
10
+ end # Dorsale
@@ -0,0 +1,15 @@
1
+ module Dorsale
2
+ module SmallData
3
+ class FilterStrategyByKeyValue < ::Dorsale::SmallData::FilterStrategy
4
+ attr_reader :key
5
+
6
+ def initialize(key = nil)
7
+ @key = key
8
+ end
9
+
10
+ def apply(query, value)
11
+ query.where("#{key} = ?", value)
12
+ end
13
+ end # FilterStrategy
14
+ end # SmallData
15
+ end # Dorsale
@@ -20,7 +20,7 @@
20
20
  br
21
21
  span.user
22
22
  strong = t("labels.employee") + " : "
23
- = @expense.user.full_name if @expense.respond_to?(:user)
23
+ = @expense.user.to_s if @expense.respond_to?(:user)
24
24
  br
25
25
  span.state class="#{@expense.state}"
26
26
  strong = t("labels.state") + " : "
@@ -87,3 +87,8 @@
87
87
  p
88
88
  strong = t("labels.deductible_vat") + " : "
89
89
  = euros @expense.total_vat_deductible
90
+
91
+ .attachments-panel
92
+ = panel title: @expense.t(:documents)
93
+ .panel-body
94
+ = attachments_for @expense
@@ -1,3 +1,3 @@
1
1
  module Dorsale
2
- VERSION = "2.3.5"
2
+ VERSION = "2.4.0"
3
3
  end
@@ -288,8 +288,6 @@ describe Dorsale::Flyboy::TasksController, type: :controller do
288
288
  @next_week_task = create(:flyboy_task, term: Date.parse("2016-03-14")) # monday next week
289
289
  @next_next_week_task = create(:flyboy_task, term: Date.parse("2016-03-22")) # tuesday next next week
290
290
  end
291
-
292
- controller.setup_tasks_summary
293
291
  end
294
292
 
295
293
  it "should not assign tasks when owner is an other person" do
@@ -297,6 +295,7 @@ describe Dorsale::Flyboy::TasksController, type: :controller do
297
295
  Dorsale::Flyboy::Task.update_all(owner_id: other_user.id, owner_type: other_user.class)
298
296
 
299
297
  Timecop.travel "2016-03-09 15:00:00" do
298
+ controller.setup_tasks_summary
300
299
  expect(assigns(:delayed_tasks)).to eq []
301
300
  expect(assigns(:today_tasks)).to eq []
302
301
  expect(assigns(:tomorrow_tasks)).to eq []
@@ -310,6 +309,7 @@ describe Dorsale::Flyboy::TasksController, type: :controller do
310
309
  Dorsale::Flyboy::Task.update_all(owner_id: nil, owner_type: nil)
311
310
 
312
311
  Timecop.travel "2016-03-09 15:00:00" do
312
+ controller.setup_tasks_summary
313
313
  expect(assigns(:delayed_tasks)).to eq [@delayed_task]
314
314
  expect(assigns(:today_tasks)).to eq [@today_task]
315
315
  expect(assigns(:tomorrow_tasks)).to eq [@tomorrow_task]
@@ -323,6 +323,7 @@ describe Dorsale::Flyboy::TasksController, type: :controller do
323
323
  Dorsale::Flyboy::Task.update_all(owner_id: summary_user.id, owner_type: summary_user.class)
324
324
 
325
325
  Timecop.travel "2016-03-09 15:00:00" do
326
+ controller.setup_tasks_summary
326
327
  expect(assigns(:delayed_tasks)).to eq [@delayed_task]
327
328
  expect(assigns(:today_tasks)).to eq [@today_task]
328
329
  expect(assigns(:tomorrow_tasks)).to eq [@tomorrow_task]