dorsale 2.3.5 → 2.4.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 (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]