dorsale 2.3.5 → 2.4.0
Sign up to get free protection for your applications and to get access to all the features.
- 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]
|