openall_time_applet 0.0.38 → 0.0.40

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.
data/models/task.rb CHANGED
@@ -7,20 +7,31 @@ class Openall_time_applet::Models::Task < Knj::Datarow
7
7
  [:Timelog, :task_id, :timelogs]
8
8
  ]
9
9
 
10
+ def initialize(*args, &block)
11
+ super(*args, &block)
12
+
13
+ #Fix default values.
14
+ self[:active] = 1 if self[:active].to_s == ""
15
+ end
16
+
10
17
  def self.update_cache(d, args)
11
18
  res = nil
12
19
  args[:oata].oa_conn do |conn|
13
20
  res = conn.request(:getAllTasksForUser)
14
21
  end
15
22
 
23
+ #Update all tasks for current user.
24
+ found_ids = []
16
25
  res.each do |task_data|
17
- task = self.ob.get_by(:Task, {"openall_uid" => task_data["uid"]})
26
+ task = self.ob.get_by(:Task, "openall_uid" => task_data["uid"])
18
27
  data_hash = {
19
28
  :openall_uid => task_data["uid"],
20
- :title => task_data["title"]
29
+ :title => task_data["title"],
30
+ :status => task_data["status"],
31
+ :active => 1
21
32
  }
22
33
 
23
- org = self.ob.get_by(:Organisation, {"openall_uid" => task_data["organisation_uid"]})
34
+ org = self.ob.get_by(:Organisation, "openall_uid" => task_data["organisation_uid"])
24
35
  data_hash[:organisation_id] = org.id if org
25
36
 
26
37
  if task
@@ -28,6 +39,54 @@ class Openall_time_applet::Models::Task < Knj::Datarow
28
39
  else
29
40
  task = self.ob.add(:Task, data_hash)
30
41
  end
42
+
43
+ found_ids << task.id
44
+ end
45
+
46
+ #Mark all tasks not given as not-active.
47
+ d.ob.list(:Task, "id_not" => found_ids) do |task|
48
+ task[:active] = 0
49
+ end
50
+ end
51
+
52
+ #Returns all open tasks or tasks that are attached to timelogs.
53
+ def self.tasks_to_show(d)
54
+ tasks = {}
55
+
56
+ #Get lists of tasks that are not closed.
57
+ self.ob.list(:Task, "status_not" => "Closed", "active" => 1) do |task|
58
+ tasks[task.id] = task
59
+ end
60
+
61
+ #Get missing tasks that have attached timelogs.
62
+ self.ob.list(:Task, [:Timelog, "task_id_not"] => tasks.keys) do |task|
63
+ tasks[task.id] = task
64
+ end
65
+
66
+ #Sort the found tasks
67
+ Knj::ArrayExt.hash_sort(tasks) do |task1, task2|
68
+ task1[1][:title].to_s.downcase <=> task2[1][:title].to_s.downcase
69
+ end
70
+
71
+ #Return the found tasks.
72
+ if block_given?
73
+ tasks.each do |task_id, task|
74
+ yield(task)
75
+ end
76
+ else
77
+ return tasks.values
31
78
  end
32
79
  end
80
+
81
+ #Returns the name of the task (and the organisation).
82
+ def name
83
+ str = self[:title].to_s.strip
84
+ str = "[#{_("no name")}]" if str.empty?
85
+
86
+ if org = self.organisation
87
+ str << " (#{Knj::Strings.shorten(org.name, 15)})"
88
+ end
89
+
90
+ return str
91
+ end
33
92
  end
data/models/timelog.rb CHANGED
@@ -15,14 +15,18 @@ class Openall_time_applet::Models::Timelog < Knj::Datarow
15
15
  #Fix default time-type (SQLite3 doesnt support this).
16
16
  self[:timetype] = "normal" if self[:timetype].to_s == ""
17
17
  self[:timestamp] = Datet.new.dbstr if self[:timestamp].to_s == ""
18
+ self[:timetype] = "normal" if self[:timetype].to_s == ""
18
19
  end
19
20
 
20
21
  #Treat data before inserting into database.
21
22
  def self.add(d)
23
+ d.data[:timestamp] = Datet.new if !d.data.key?(:timestmap) or !d.data[:timestamp]
22
24
  d.data[:time] = 0 if d.data[:time].to_s.strip.length <= 0
23
25
  d.data[:time_transport] = 0 if d.data[:time_transport].to_s.strip.length <= 0
24
26
  d.data[:parent_timelog_id] = 0 if !d.data.key?(:parent_timelog_id)
25
27
  d.data[:sync_need] = 1 if !d.data.key?(:sync_need)
28
+ d.data[:task_id] = 0 if !d.data.key?(:task_id)
29
+ d.data[:timetype] = "normal" if !d.data.key?(:timetype)
26
30
  end
27
31
 
28
32
  #Pushes timelogs and time to OpenAll.
@@ -30,6 +34,10 @@ class Openall_time_applet::Models::Timelog < Knj::Datarow
30
34
  args[:oata].oa_conn do |conn|
31
35
  #Go through timelogs that needs syncing and has a task set.
32
36
  self.ob.list(:Timelog, "sync_need" => 1, "task_id_not" => ["", 0]) do |timelog|
37
+ task = timelog.task
38
+ raise sprintf(_("No task has been set on timelog: '%s'."), timelog.descr_short) if !task
39
+ raise sprintf(_("Task is closed and the timelog cannot be synced: '%s'."), timelog.descr_short) if task[:status] == "Closed"
40
+
33
41
  secs_sum = timelog[:time_sync].to_i + timelog[:time_transport].to_i
34
42
  next if secs_sum <= 0 or !timelog.task
35
43
 
@@ -74,6 +82,19 @@ class Openall_time_applet::Models::Timelog < Knj::Datarow
74
82
  end
75
83
  end
76
84
 
85
+ def update(data)
86
+ data.each do |key, val|
87
+ case key.to_sym
88
+ when :timetype
89
+ if !self.class.time_types.key?(val.to_s)
90
+ raise sprintf(_("No such time-type: '%s'."), val)
91
+ end
92
+ end
93
+ end
94
+
95
+ super(data)
96
+ end
97
+
77
98
  #Returns a short one-line short description.
78
99
  def descr_short
79
100
  descr = self[:descr].to_s.gsub("\n", " ").gsub(/\s{2,}/, " ")
@@ -121,4 +142,13 @@ class Openall_time_applet::Models::Timelog < Knj::Datarow
121
142
  end
122
143
  end
123
144
  end
145
+
146
+ #The possible options for time-types that should be shown in various combo-boxes and such.
147
+ def self.time_types
148
+ return {
149
+ "normal" => _("Normal"),
150
+ "overtime150" => sprintf(_("Overtime %s"), 150),
151
+ "overtime200" => sprintf(_("Overtime %s"), 200)
152
+ }
153
+ end
124
154
  end
@@ -4,14 +4,14 @@
4
4
  # -*- encoding: utf-8 -*-
5
5
 
6
6
  Gem::Specification.new do |s|
7
- s.name = %q{openall_time_applet}
8
- s.version = "0.0.38"
7
+ s.name = "openall_time_applet"
8
+ s.version = "0.0.40"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Kasper Johansen"]
12
- s.date = %q{2012-08-23}
13
- s.description = %q{Off-line time-tracking for OpenAll with syncing when online.}
14
- s.email = %q{k@spernj.org}
12
+ s.date = "2012-09-08"
13
+ s.description = "Off-line time-tracking for OpenAll with syncing when online."
14
+ s.email = "k@spernj.org"
15
15
  s.executables = ["OpenAll Timelogging", "openall_time_applet.rb"]
16
16
  s.extra_rdoc_files = [
17
17
  "LICENSE.txt",
@@ -58,11 +58,11 @@ Gem::Specification.new do |s|
58
58
  "spec/sync_spec.rb",
59
59
  "spec/tray_timelogs_spec.rb"
60
60
  ]
61
- s.homepage = %q{http://github.com/kaspernj/openall_time_applet}
61
+ s.homepage = "http://github.com/kaspernj/openall_time_applet"
62
62
  s.licenses = ["MIT"]
63
63
  s.require_paths = ["lib"]
64
- s.rubygems_version = %q{1.6.2}
65
- s.summary = %q{Time-tracking for OpenAll.}
64
+ s.rubygems_version = "1.8.24"
65
+ s.summary = "Time-tracking for OpenAll."
66
66
 
67
67
  if s.respond_to? :specification_version then
68
68
  s.specification_version = 3
@@ -76,7 +76,9 @@ Gem::Specification.new do |s|
76
76
  s.add_runtime_dependency(%q<rmagick>, [">= 0"])
77
77
  s.add_runtime_dependency(%q<datet>, [">= 0"])
78
78
  s.add_runtime_dependency(%q<http2>, [">= 0"])
79
+ s.add_runtime_dependency(%q<gtk2_expander_settings>, [">= 0"])
79
80
  s.add_runtime_dependency(%q<gtk2_treeview_settings>, [">= 0"])
81
+ s.add_runtime_dependency(%q<gtk2_window_settings>, [">= 0"])
80
82
  s.add_development_dependency(%q<rspec>, ["~> 2.8.0"])
81
83
  s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
82
84
  s.add_development_dependency(%q<bundler>, [">= 1.0.0"])
@@ -90,7 +92,9 @@ Gem::Specification.new do |s|
90
92
  s.add_dependency(%q<rmagick>, [">= 0"])
91
93
  s.add_dependency(%q<datet>, [">= 0"])
92
94
  s.add_dependency(%q<http2>, [">= 0"])
95
+ s.add_dependency(%q<gtk2_expander_settings>, [">= 0"])
93
96
  s.add_dependency(%q<gtk2_treeview_settings>, [">= 0"])
97
+ s.add_dependency(%q<gtk2_window_settings>, [">= 0"])
94
98
  s.add_dependency(%q<rspec>, ["~> 2.8.0"])
95
99
  s.add_dependency(%q<rdoc>, ["~> 3.12"])
96
100
  s.add_dependency(%q<bundler>, [">= 1.0.0"])
@@ -105,7 +109,9 @@ Gem::Specification.new do |s|
105
109
  s.add_dependency(%q<rmagick>, [">= 0"])
106
110
  s.add_dependency(%q<datet>, [">= 0"])
107
111
  s.add_dependency(%q<http2>, [">= 0"])
112
+ s.add_dependency(%q<gtk2_expander_settings>, [">= 0"])
108
113
  s.add_dependency(%q<gtk2_treeview_settings>, [">= 0"])
114
+ s.add_dependency(%q<gtk2_window_settings>, [">= 0"])
109
115
  s.add_dependency(%q<rspec>, ["~> 2.8.0"])
110
116
  s.add_dependency(%q<rdoc>, ["~> 3.12"])
111
117
  s.add_dependency(%q<bundler>, [">= 1.0.0"])
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: openall_time_applet
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.38
5
+ version: 0.0.40
6
6
  platform: ruby
7
7
  authors:
8
8
  - Kasper Johansen
@@ -10,8 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2012-08-23 00:00:00 +02:00
14
- default_executable:
13
+ date: 2012-09-08 00:00:00 Z
15
14
  dependencies:
16
15
  - !ruby/object:Gem::Dependency
17
16
  name: knjrbfw
@@ -102,7 +101,7 @@ dependencies:
102
101
  prerelease: false
103
102
  version_requirements: *id008
104
103
  - !ruby/object:Gem::Dependency
105
- name: gtk2_treeview_settings
104
+ name: gtk2_expander_settings
106
105
  requirement: &id009 !ruby/object:Gem::Requirement
107
106
  none: false
108
107
  requirements:
@@ -113,8 +112,30 @@ dependencies:
113
112
  prerelease: false
114
113
  version_requirements: *id009
115
114
  - !ruby/object:Gem::Dependency
116
- name: rspec
115
+ name: gtk2_treeview_settings
117
116
  requirement: &id010 !ruby/object:Gem::Requirement
117
+ none: false
118
+ requirements:
119
+ - - ">="
120
+ - !ruby/object:Gem::Version
121
+ version: "0"
122
+ type: :runtime
123
+ prerelease: false
124
+ version_requirements: *id010
125
+ - !ruby/object:Gem::Dependency
126
+ name: gtk2_window_settings
127
+ requirement: &id011 !ruby/object:Gem::Requirement
128
+ none: false
129
+ requirements:
130
+ - - ">="
131
+ - !ruby/object:Gem::Version
132
+ version: "0"
133
+ type: :runtime
134
+ prerelease: false
135
+ version_requirements: *id011
136
+ - !ruby/object:Gem::Dependency
137
+ name: rspec
138
+ requirement: &id012 !ruby/object:Gem::Requirement
118
139
  none: false
119
140
  requirements:
120
141
  - - ~>
@@ -122,10 +143,10 @@ dependencies:
122
143
  version: 2.8.0
123
144
  type: :development
124
145
  prerelease: false
125
- version_requirements: *id010
146
+ version_requirements: *id012
126
147
  - !ruby/object:Gem::Dependency
127
148
  name: rdoc
128
- requirement: &id011 !ruby/object:Gem::Requirement
149
+ requirement: &id013 !ruby/object:Gem::Requirement
129
150
  none: false
130
151
  requirements:
131
152
  - - ~>
@@ -133,10 +154,10 @@ dependencies:
133
154
  version: "3.12"
134
155
  type: :development
135
156
  prerelease: false
136
- version_requirements: *id011
157
+ version_requirements: *id013
137
158
  - !ruby/object:Gem::Dependency
138
159
  name: bundler
139
- requirement: &id012 !ruby/object:Gem::Requirement
160
+ requirement: &id014 !ruby/object:Gem::Requirement
140
161
  none: false
141
162
  requirements:
142
163
  - - ">="
@@ -144,10 +165,10 @@ dependencies:
144
165
  version: 1.0.0
145
166
  type: :development
146
167
  prerelease: false
147
- version_requirements: *id012
168
+ version_requirements: *id014
148
169
  - !ruby/object:Gem::Dependency
149
170
  name: jeweler
150
- requirement: &id013 !ruby/object:Gem::Requirement
171
+ requirement: &id015 !ruby/object:Gem::Requirement
151
172
  none: false
152
173
  requirements:
153
174
  - - ~>
@@ -155,7 +176,7 @@ dependencies:
155
176
  version: 1.8.3
156
177
  type: :development
157
178
  prerelease: false
158
- version_requirements: *id013
179
+ version_requirements: *id015
159
180
  description: Off-line time-tracking for OpenAll with syncing when online.
160
181
  email: k@spernj.org
161
182
  executables:
@@ -206,7 +227,6 @@ files:
206
227
  - spec/spec_helper.rb
207
228
  - spec/sync_spec.rb
208
229
  - spec/tray_timelogs_spec.rb
209
- has_rdoc: true
210
230
  homepage: http://github.com/kaspernj/openall_time_applet
211
231
  licenses:
212
232
  - MIT
@@ -220,7 +240,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
220
240
  requirements:
221
241
  - - ">="
222
242
  - !ruby/object:Gem::Version
223
- hash: 1563791381235763168
243
+ hash: -2908154702793645026
224
244
  segments:
225
245
  - 0
226
246
  version: "0"
@@ -233,7 +253,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
233
253
  requirements: []
234
254
 
235
255
  rubyforge_project:
236
- rubygems_version: 1.6.2
256
+ rubygems_version: 1.8.24
237
257
  signing_key:
238
258
  specification_version: 3
239
259
  summary: Time-tracking for OpenAll.