Compare commits
No commits in common. "development" and "v1.16.1" have entirely different histories.
developmen
...
v1.16.1
10 changed files with 23 additions and 199 deletions
21
.gitignore
vendored
21
.gitignore
vendored
|
@ -1,32 +1,11 @@
|
|||
# Ignore bundler config
|
||||
/.bundle
|
||||
|
||||
# Ignore bundler installation
|
||||
/vendor/bundle
|
||||
|
||||
# Ignore SASS and YARD cache
|
||||
.sass-cache
|
||||
.yardoc
|
||||
|
||||
# Ignore the local configuration
|
||||
config.yaml
|
||||
htpasswd
|
||||
|
||||
# Ignore the SQLite databases
|
||||
db/*
|
||||
|
||||
# Ignore generated documentation
|
||||
doc/*
|
||||
|
||||
# Ignore generated invoice assets
|
||||
public/invoices/*
|
||||
|
||||
# Ignore compiled asssets
|
||||
public/stylesheets/style.css
|
||||
public/stylesheets/style.css.map
|
||||
|
||||
# Ignore custom invoice templates
|
||||
templates/*_invoice.tex.erb
|
||||
|
||||
# Ignore temporary files
|
||||
tmp/*
|
||||
|
|
|
@ -1 +0,0 @@
|
|||
2.5.1
|
|
@ -1,24 +1,5 @@
|
|||
= Stop… Camping Time! release news
|
||||
|
||||
== 1.17.1
|
||||
|
||||
Bugfixes:
|
||||
|
||||
* Fix the number/currency input to allow for all values ≥ 0.00
|
||||
|
||||
== 1.17.0
|
||||
|
||||
Features:
|
||||
|
||||
* Add support for choosing what date/time is used for new entries
|
||||
* Some textual and style tweaks
|
||||
|
||||
Bugfixes:
|
||||
* Fix crash when showing all entries in the timeline [#89c2a1]
|
||||
|
||||
Other bugfixes:
|
||||
* Fix check that determines if last company info is used
|
||||
|
||||
== 1.16.1
|
||||
|
||||
Features:
|
||||
|
|
18
Gemfile
18
Gemfile
|
@ -1,18 +0,0 @@
|
|||
source "http://rubygems.org"
|
||||
git_source(:github) { |repo| "https://github.com/#{repo}.git" }
|
||||
|
||||
|
||||
# This application is build on Camping, use it from our own Git master
|
||||
gem "camping", github: "paulvt/camping", branch: "master"
|
||||
|
||||
# Use ActionView for the templates.
|
||||
gem "actionview", "~> 4.2.10"
|
||||
|
||||
# Use ActiveRecord as the ORM.
|
||||
gem "activerecord", "~> 4.2.10"
|
||||
|
||||
# Use SASS for handling CSS assets/Bootstrap.
|
||||
gem "sass", "~> 3.4.6"
|
||||
|
||||
# Use SQLite as the database.
|
||||
gem "sqlite3", "~> 1.3.9"
|
74
Gemfile.lock
74
Gemfile.lock
|
@ -1,74 +0,0 @@
|
|||
GIT
|
||||
remote: https://github.com/paulvt/camping.git
|
||||
revision: e6834563b244e0f24af2034d679cd6e8e9d932c0
|
||||
branch: master
|
||||
specs:
|
||||
camping (2.1.602)
|
||||
mab (>= 0.0.3)
|
||||
rack (>= 1.0)
|
||||
|
||||
GEM
|
||||
remote: http://rubygems.org/
|
||||
specs:
|
||||
actionview (4.2.11.3)
|
||||
activesupport (= 4.2.11.3)
|
||||
builder (~> 3.1)
|
||||
erubis (~> 2.7.0)
|
||||
rails-dom-testing (~> 1.0, >= 1.0.5)
|
||||
rails-html-sanitizer (~> 1.0, >= 1.0.3)
|
||||
activemodel (4.2.11.3)
|
||||
activesupport (= 4.2.11.3)
|
||||
builder (~> 3.1)
|
||||
activerecord (4.2.11.3)
|
||||
activemodel (= 4.2.11.3)
|
||||
activesupport (= 4.2.11.3)
|
||||
arel (~> 6.0)
|
||||
activesupport (4.2.11.3)
|
||||
i18n (~> 0.7)
|
||||
minitest (~> 5.1)
|
||||
thread_safe (~> 0.3, >= 0.3.4)
|
||||
tzinfo (~> 1.1)
|
||||
arel (6.0.4)
|
||||
builder (3.2.4)
|
||||
concurrent-ruby (1.1.9)
|
||||
crass (1.0.6)
|
||||
erubis (2.7.0)
|
||||
i18n (0.9.5)
|
||||
concurrent-ruby (~> 1.0)
|
||||
loofah (2.12.0)
|
||||
crass (~> 1.0.2)
|
||||
nokogiri (>= 1.5.9)
|
||||
mab (0.0.3)
|
||||
mini_portile2 (2.6.1)
|
||||
minitest (5.14.4)
|
||||
nokogiri (1.12.5)
|
||||
mini_portile2 (~> 2.6.1)
|
||||
racc (~> 1.4)
|
||||
racc (1.5.2)
|
||||
rack (2.2.3)
|
||||
rails-deprecated_sanitizer (1.0.4)
|
||||
activesupport (>= 4.2.0.alpha)
|
||||
rails-dom-testing (1.0.9)
|
||||
activesupport (>= 4.2.0, < 5.0)
|
||||
nokogiri (~> 1.6)
|
||||
rails-deprecated_sanitizer (>= 1.0.1)
|
||||
rails-html-sanitizer (1.4.2)
|
||||
loofah (~> 2.3)
|
||||
sass (3.4.25)
|
||||
sqlite3 (1.3.13)
|
||||
thread_safe (0.3.6)
|
||||
tzinfo (1.2.9)
|
||||
thread_safe (~> 0.1)
|
||||
|
||||
PLATFORMS
|
||||
ruby
|
||||
|
||||
DEPENDENCIES
|
||||
actionview (~> 4.2.10)
|
||||
activerecord (~> 4.2.10)
|
||||
camping!
|
||||
sass (~> 3.4.6)
|
||||
sqlite3 (~> 1.3.9)
|
||||
|
||||
BUNDLED WITH
|
||||
1.17.3
|
|
@ -39,9 +39,6 @@ and the following LaTeX programs:
|
|||
* isodoc package (>= 1.00)
|
||||
* rubber
|
||||
|
||||
It is also possible to use Bundler (which is the default when using
|
||||
@config.ru@), in this you only need Ruby and Bundler installed.
|
||||
|
||||
== Installation
|
||||
|
||||
For now, Stop… Camping Time! is in a developing state and not ready for
|
||||
|
|
|
@ -1,10 +1,9 @@
|
|||
#!/usr/bin/env rackup
|
||||
|
||||
require "bundler/setup"
|
||||
require "./stoptime"
|
||||
|
||||
StopTime::Models::Base.establish_connection(adapter: "sqlite3",
|
||||
database: "db/stoptime.db",
|
||||
timeout: 10000)
|
||||
StopTime::Models::Base.establish_connection( :adapter => 'sqlite3',
|
||||
:database => 'db/stoptime.db',
|
||||
:timeout => 10000 )
|
||||
StopTime.create
|
||||
run StopTime
|
||||
|
|
|
@ -3,10 +3,6 @@
|
|||
# Time resolution in minutes
|
||||
#time_resolution: 1
|
||||
|
||||
# Which date to use for new entries
|
||||
# Supported values are: previous, today, none
|
||||
#date_new_entry: today
|
||||
|
||||
# The default hourly rate
|
||||
#hourly_rate: 20.0
|
||||
|
||||
|
|
73
stoptime.rb
73
stoptime.rb
|
@ -55,7 +55,7 @@ end
|
|||
module StopTime
|
||||
|
||||
# The version of the application
|
||||
VERSION = '1.17.1'
|
||||
VERSION = '1.16.1'
|
||||
puts "Starting Stop… Camping Time! version #{VERSION}"
|
||||
|
||||
# @return [Hash{String=>Object}] The parsed configuration.
|
||||
|
@ -166,7 +166,6 @@ module StopTime::Models
|
|||
"invoice_template" => "invoice",
|
||||
"hourly_rate" => 20.0,
|
||||
"time_resolution" => 1,
|
||||
"date_new_entry" => "today",
|
||||
"vat_rate" => 21.0 }
|
||||
|
||||
# Creates a new configuration object and loads the configuation.
|
||||
|
@ -889,30 +888,6 @@ module StopTime::Models
|
|||
|
||||
end # StopTime::Models
|
||||
|
||||
# = The Stop… Camping Time! helpers
|
||||
module StopTime::Helpers
|
||||
|
||||
# Returns the date/time to use for new time entry defaults, or +nil+ if
|
||||
# none is to be used. This method can use the last time entry (if any
|
||||
# and if so configured). The result is based on the +date_new_entry+
|
||||
# configuration option.
|
||||
#
|
||||
# @param last_entry [DateTime] the last time entry to use if configured
|
||||
# for "previous"
|
||||
# @return [DateTime, nil] the date/time to be used for new entry defaults
|
||||
def date_time_new_entry(last_entry = nil)
|
||||
case @config["date_new_entry"]
|
||||
when "previous"
|
||||
TimeEntry.last.end
|
||||
when "today"
|
||||
DateTime.now
|
||||
when "none"
|
||||
nil
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
# = The Stop… Camping Time! controllers
|
||||
module StopTime::Controllers
|
||||
|
||||
|
@ -1097,7 +1072,7 @@ module StopTime::Controllers
|
|||
return render :customer_form
|
||||
end
|
||||
end
|
||||
redirect R(CustomersN, customer_id)
|
||||
redirect R(Customers)
|
||||
end
|
||||
end # class StopTime::Controllers::CustomersN
|
||||
|
||||
|
@ -1306,7 +1281,7 @@ module StopTime::Controllers
|
|||
tasks.each_key do |task|
|
||||
# Create a new (billed) task clone that contains the selected time
|
||||
# entries, leave the rest unbilled and associated with their task.
|
||||
bill_task = task.dup
|
||||
bill_task = task.dup # FIXME: depends on rails version!
|
||||
task.time_entries = task.time_entries - tasks[task]
|
||||
task.save
|
||||
bill_task.time_entries = tasks[task]
|
||||
|
@ -1520,7 +1495,6 @@ module StopTime::Controllers
|
|||
.where("stoptime_tasks.invoice_id" => nil)\
|
||||
.order("start DESC")
|
||||
end
|
||||
@time_entries = @time_entries.where.not(task_id: nil)
|
||||
@time_entries.each do |te|
|
||||
@input["bill_#{te.id}"] = true if te.bill?
|
||||
end
|
||||
|
@ -1576,11 +1550,9 @@ module StopTime::Controllers
|
|||
@task_list[t.customer.shortest_name] << [t.id, t.name]
|
||||
end
|
||||
@input["bill"] = true
|
||||
date_time_new = date_time_new_entry(TimeEntry.last)
|
||||
if date_time_new
|
||||
@input["date"] = date_time_new.to_date.to_formatted_s
|
||||
@input["start"] = date_time_new.to_formatted_s(:time_only)
|
||||
end
|
||||
@input["date"] = DateTime.now.to_date
|
||||
@input["start"] = Time.now.to_formatted_s(:time_only)
|
||||
|
||||
@target = [Timeline]
|
||||
@button = "enter"
|
||||
render :time_entry_form
|
||||
|
@ -1728,9 +1700,9 @@ module StopTime::Controllers
|
|||
# If we are editing the current info and it is already associated
|
||||
# with some invoices, create a new revision.
|
||||
@history_warn = true if @company != CompanyInfo.last
|
||||
if @company.id == CompanyInfo.last.id and @company.invoices.length > 0
|
||||
if @company == CompanyInfo.last and @company.invoices.length > 0
|
||||
old_company = @company
|
||||
@company = old_company.dup
|
||||
@company = old_company.clone # FIXME: depends on rails version!
|
||||
@company.original = old_company
|
||||
end
|
||||
|
||||
|
@ -1862,7 +1834,7 @@ module StopTime::Views
|
|||
elsif @active_tasks[customer].empty?
|
||||
p do
|
||||
em "No active projects/tasks found! " +
|
||||
"Register time on one of these projects/tasks: "
|
||||
"Register time on one of these tasks: "
|
||||
br
|
||||
@tasks[customer].each do |task|
|
||||
a task.name, href: R(CustomersNTasksN, customer.id, task.id)
|
||||
|
@ -2161,11 +2133,9 @@ module StopTime::Views
|
|||
control_class: "col-sm-3 col-xs-4")
|
||||
_form_input_with_label("Financial contact", "financial_contact", :text,
|
||||
control_class: "col-sm-6 col-xs-8")
|
||||
_form_input_with_label("Default hourly rate", "hourly_rate", :number,
|
||||
_form_input_with_label("Default hourly rate", "hourly_rate", :text,
|
||||
control_class: "col-sm-4 col-xs-5",
|
||||
input_addon: "€ / h",
|
||||
min: "0.00",
|
||||
step: "0.01")
|
||||
input_addon: "€ / h")
|
||||
div.form_group do
|
||||
label.control_label.col_sm_3.col_xs_4 "Time specifications?"
|
||||
div.col_sm_6.col_xs_8 do
|
||||
|
@ -2319,16 +2289,14 @@ module StopTime::Views
|
|||
end if @task.billed?
|
||||
div.row do
|
||||
div.col_md_6.col_xs_12 do
|
||||
form.form_horizontal.form_condensed action: R(*@target),
|
||||
method: :post do
|
||||
form.form_horizontal.form_condensed action: R(*@target), method: :post do
|
||||
div.form_group do
|
||||
label.control_label.col_sm_3.col_xs_4 "Customer", for: "customer"
|
||||
div.col_sm_4.col_xs_8 do
|
||||
_form_select("customer", @customer_list)
|
||||
end
|
||||
div.col_sm_offset_2.col_sm_3.hidden_xs do
|
||||
a.btn.btn_default role: "button",
|
||||
href: R(CustomersN, @customer.id) do
|
||||
a.btn.btn_default role: "button", href: R(CustomersN, @customer.id) do
|
||||
_icon("user")
|
||||
span "Show customer"
|
||||
end
|
||||
|
@ -2343,8 +2311,7 @@ module StopTime::Views
|
|||
_form_input_radio("type", "hourly_rate", true)
|
||||
text!("Hourly rate: ")
|
||||
div.input_group do
|
||||
_form_input("hourly_rate", :number, "Hourly rate",
|
||||
min: "0.00", step: "0.01")
|
||||
_form_input("hourly_rate", :number, "Hourly rate")
|
||||
span.input_group_addon "€ / h"
|
||||
end
|
||||
end
|
||||
|
@ -2354,8 +2321,7 @@ module StopTime::Views
|
|||
_form_input_radio("type", "fixed_cost")
|
||||
text!("Fixed cost: ")
|
||||
div.input_group do
|
||||
_form_input("fixed_cost", :number, "Fixed cost",
|
||||
min: "0.00", step: "0.01")
|
||||
_form_input("fixed_cost", :number, "Fixed cost")
|
||||
span.input_group_addon "€"
|
||||
end
|
||||
end
|
||||
|
@ -2759,7 +2725,7 @@ module StopTime::Views
|
|||
button.btn.btn_primary "Create invoice", type: :submit,
|
||||
name: "create", value: "Create invoice",
|
||||
disabled: @none_found
|
||||
button.btn.btn_default "Cancel", type: :submit, name: "cancel",
|
||||
button.btn.btn_default "Cancel", type: :submit, name: "cancel",
|
||||
value: "Cancel"
|
||||
end
|
||||
end
|
||||
|
@ -2953,7 +2919,7 @@ module StopTime::Views
|
|||
tbody do
|
||||
invoices.each do |invoice|
|
||||
due_class = invoice.past_due? ? "warning" : ""
|
||||
due_class = "danger" if invoice.way_past_due?
|
||||
due_class = "error" if invoice.way_past_due?
|
||||
tr(class: due_class) do
|
||||
td do
|
||||
a invoice.number,
|
||||
|
@ -3157,7 +3123,6 @@ module StopTime::Views
|
|||
# @param [Customer, nil] task a task to show time entries for
|
||||
# @return [Mab::Mixin::Tag] the main menu
|
||||
def _time_entries(customer=nil, task=nil)
|
||||
date_time_new = date_time_new_entry(@time_entries.first)
|
||||
form.form_inline action: R(Timeline), method: :post do
|
||||
table.table.table_condensed.table_striped.table_hover do
|
||||
thead do
|
||||
|
@ -3191,11 +3156,11 @@ module StopTime::Views
|
|||
end
|
||||
td.col_md_1 do
|
||||
input.form_control type: :text, name: "date",
|
||||
value: date_time_new && date_time_new.to_date.to_formatted_s
|
||||
value: DateTime.now.to_date.to_formatted_s
|
||||
end
|
||||
td.col_md_1 do
|
||||
input.form_control type: :text, name: "start",
|
||||
value: date_time_new && date_time_new.to_formatted_s(:time_only)
|
||||
value: DateTime.now.to_time.to_formatted_s(:time_only)
|
||||
end
|
||||
td.col_md_1 do
|
||||
input.form_control type: :text, name: "end"
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* CSS file for Stop... Camping Time! */
|
||||
/* CSS file for Stop… Camping Time! */
|
||||
|
||||
/* Main elements */
|
||||
html
|
||||
|
|
Loading…
Reference in a new issue