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.
- checksums.yaml +4 -4
- data/app/models/dorsale/billing_machine/small_data/filter_for_invoices.rb +3 -24
- data/app/models/dorsale/billing_machine/small_data/filter_for_quotations.rb +3 -24
- data/app/models/dorsale/billing_machine/small_data/filter_strategy_by_customer.rb +2 -2
- data/app/models/dorsale/billing_machine/small_data/filter_strategy_by_payment_status.rb +5 -5
- data/app/models/dorsale/billing_machine/small_data/filter_strategy_by_state.rb +3 -3
- data/app/models/dorsale/billing_machine/small_data/filter_strategy_by_time_period.rb +6 -12
- data/app/models/dorsale/customer_vault/small_data/filter_for_people.rb +1 -9
- data/app/models/dorsale/customer_vault/small_data/filter_strategy_by_tags.rb +4 -5
- data/app/models/dorsale/expense_gun/expense.rb +5 -0
- data/app/models/dorsale/flyboy/small_data/filter_for_folders.rb +1 -9
- data/app/models/dorsale/flyboy/small_data/filter_for_tasks.rb +2 -10
- data/app/models/dorsale/flyboy/small_data/filter_strategy_by_done.rb +2 -2
- data/app/models/dorsale/flyboy/small_data/filter_strategy_by_status.rb +2 -2
- data/app/models/dorsale/small_data/filter.rb +25 -20
- data/app/models/dorsale/small_data/filter_strategy.rb +5 -23
- data/app/models/dorsale/small_data/filter_strategy_by_date.rb +10 -0
- data/app/models/dorsale/small_data/filter_strategy_by_key_value.rb +15 -0
- data/app/views/dorsale/expense_gun/expenses/show.html.slim +6 -1
- data/lib/dorsale/version.rb +1 -1
- data/spec/controllers/dorsale/flyboy/tasks_controller_spec.rb +3 -2
- data/spec/dummy/db/test.sqlite3 +0 -0
- data/spec/dummy/log/test.log +83367 -0
- data/spec/models/dorsale/expense_gun/expense_spec.rb +16 -16
- data/spec/models/dorsale/small_data/filter_spec.rb +3 -1
- metadata +4 -4
- data/app/models/dorsale/flyboy/small_data/filter_strategy_by_nothing.rb +0 -11
- 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:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 784128baeb6b43ea6d548bc00b3ff135aeef90b4
|
4
|
+
data.tar.gz: a3a2a40bfd491bd1c09bd06572a42f5a9ddd0987
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
7
|
-
"bm_time_period" => FilterStrategyByTimePeriod.new(
|
8
|
-
"bm_payment_status" => FilterStrategyByPaymentStatus.new
|
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
|
7
|
-
"bm_time_period" => FilterStrategyByTimePeriod.new(
|
8
|
-
"bm_quotation_state" => FilterStrategyByState.new
|
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
|
6
|
-
type, id =
|
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
|
5
|
+
def apply(query, value)
|
6
6
|
table_name = query.model.table_name
|
7
7
|
|
8
|
-
if
|
8
|
+
if value == "paid"
|
9
9
|
return query.where("#{table_name}.paid = ?", true)
|
10
|
-
elsif
|
10
|
+
elsif value == "unpaid"
|
11
11
|
return query.where("#{table_name}.paid = ?", false)
|
12
|
-
elsif
|
12
|
+
elsif value == "pending"
|
13
13
|
return query.where("#{table_name}.paid = ? and #{table_name}.due_date >= ?", false, Date.today)
|
14
|
-
elsif
|
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
|
6
|
-
if
|
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:
|
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::
|
5
|
-
def
|
6
|
-
|
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
|
8
|
+
if value == "today"
|
15
9
|
return query.where("#{criteria} >= ?", Date.today)
|
16
|
-
elsif
|
10
|
+
elsif value == "week"
|
17
11
|
return query.where("#{criteria} >= ?", Date.today.at_beginning_of_week)
|
18
|
-
elsif
|
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
|
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
|
6
|
-
|
5
|
+
def apply(query, value)
|
6
|
+
value = [*value].flatten.select{ |v| v.present? }
|
7
7
|
|
8
|
-
if
|
9
|
-
query.tagged_with(
|
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
|
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
|
7
|
-
"owner" =>
|
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
|
6
|
-
value = (
|
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
|
6
|
-
if
|
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[
|
9
|
+
@jar["filters"] = filters.to_json
|
11
10
|
end
|
12
11
|
|
13
12
|
def read
|
14
|
-
|
15
|
-
|
16
|
-
|
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
|
-
|
37
|
-
|
33
|
+
strategies.each do |key, strategy|
|
34
|
+
value = get(key)
|
38
35
|
|
39
|
-
if
|
40
|
-
|
41
|
-
|
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
|
-
|
49
|
-
|
50
|
-
|
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
|
5
|
-
|
4
|
+
def apply(query, value)
|
5
|
+
raise NotImplementedError
|
6
6
|
end
|
7
|
-
|
8
|
-
|
9
|
-
|
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,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.
|
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
|
data/lib/dorsale/version.rb
CHANGED
@@ -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]
|