openall_time_applet 0.0.38 → 0.0.40

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