ydim-html 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +5 -0
- data/.travis.yml +29 -0
- data/Gemfile +12 -0
- data/History.txt +11 -0
- data/LICENSE.txt +339 -0
- data/Manifest.txt +47 -0
- data/Rakefile +21 -0
- data/bin/ydim-htmld +38 -0
- data/doc/favicon.ico +0 -0
- data/doc/index.rbx +16 -0
- data/doc/resources/javascript/dojo.js +5940 -0
- data/doc/resources/javascript/iframe_history.html +53 -0
- data/doc/resources/javascript/ydim.js +67 -0
- data/doc/resources/ydim/ydim.css +113 -0
- data/lib/ydim/html.rb +10 -0
- data/lib/ydim/html/config.rb +37 -0
- data/lib/ydim/html/state/ajax_values.rb +17 -0
- data/lib/ydim/html/state/autoinvoice.rb +94 -0
- data/lib/ydim/html/state/confirm.rb +16 -0
- data/lib/ydim/html/state/debitor.rb +82 -0
- data/lib/ydim/html/state/debitors.rb +24 -0
- data/lib/ydim/html/state/global.rb +100 -0
- data/lib/ydim/html/state/global_predefine.rb +14 -0
- data/lib/ydim/html/state/init.rb +21 -0
- data/lib/ydim/html/state/invoice.rb +180 -0
- data/lib/ydim/html/state/invoices.rb +70 -0
- data/lib/ydim/html/state/pdf.rb +17 -0
- data/lib/ydim/html/util/lookandfeel.rb +133 -0
- data/lib/ydim/html/util/server.rb +37 -0
- data/lib/ydim/html/util/session.rb +29 -0
- data/lib/ydim/html/util/validator.rb +63 -0
- data/lib/ydim/html/version.rb +7 -0
- data/lib/ydim/html/view/ajax_values.rb +27 -0
- data/lib/ydim/html/view/autoinvoice.rb +80 -0
- data/lib/ydim/html/view/autoinvoices.rb +42 -0
- data/lib/ydim/html/view/confirm.rb +28 -0
- data/lib/ydim/html/view/debitor.rb +118 -0
- data/lib/ydim/html/view/debitors.rb +45 -0
- data/lib/ydim/html/view/htmlgrid.rb +104 -0
- data/lib/ydim/html/view/init.rb +30 -0
- data/lib/ydim/html/view/invoice.rb +218 -0
- data/lib/ydim/html/view/invoices.rb +159 -0
- data/lib/ydim/html/view/navigation.rb +29 -0
- data/lib/ydim/html/view/pdf.rb +24 -0
- data/lib/ydim/html/view/template.rb +71 -0
- data/readme.md +28 -0
- data/spec/smoketest_spec.rb +234 -0
- data/spec/spec_helper.rb +117 -0
- data/spec/stub/http_server.rb +157 -0
- data/test/selenium.rb +1690 -0
- data/test/selenium/selenium-server.jar +0 -0
- data/test/selenium/test_autoinvoice.rb +319 -0
- data/test/selenium/test_debitor.rb +344 -0
- data/test/selenium/test_debitors.rb +47 -0
- data/test/selenium/test_init.rb +105 -0
- data/test/selenium/test_invoice.rb +296 -0
- data/test/selenium/test_invoices.rb +176 -0
- data/test/selenium/unit.rb +125 -0
- data/test/stub/http_server.rb +141 -0
- data/test/suite.rb +15 -0
- data/ydim-html.gemspec +36 -0
- metadata +302 -0
@@ -0,0 +1,24 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: utf-8
|
3
|
+
# Html::State::Debitors -- ydim -- 12.01.2006 -- hwyss@ywesee.com
|
4
|
+
|
5
|
+
require 'ydim/html/state/global_predefine'
|
6
|
+
require 'ydim/html/state/debitor'
|
7
|
+
require 'ydim/html/view/debitors'
|
8
|
+
require 'ydim/debitor'
|
9
|
+
|
10
|
+
module YDIM
|
11
|
+
module Html
|
12
|
+
module State
|
13
|
+
class Debitors < Global
|
14
|
+
VIEW = Html::View::Debitors
|
15
|
+
def init
|
16
|
+
lnf = @session.lookandfeel
|
17
|
+
@model = @session.debitors.sort_by do |deb|
|
18
|
+
[ lnf.lookup(deb.debitor_type) || '', deb.name.to_s.downcase ]
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,100 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: utf-8
|
3
|
+
# Html::State::Global -- ydim -- 12.01.2006 -- hwyss@ywesee.com
|
4
|
+
|
5
|
+
require 'sbsm/state'
|
6
|
+
require 'ydim/html/state/init'
|
7
|
+
require 'ydim/html/state/autoinvoice'
|
8
|
+
require 'ydim/html/state/debitor'
|
9
|
+
require 'ydim/html/state/debitors'
|
10
|
+
require 'ydim/html/state/invoice'
|
11
|
+
require 'ydim/html/state/invoices'
|
12
|
+
require 'ydim/html/state/pdf'
|
13
|
+
|
14
|
+
module YDIM
|
15
|
+
module Html
|
16
|
+
module State
|
17
|
+
class Global < SBSM::State
|
18
|
+
attr_accessor :sortby, :sort_reverse
|
19
|
+
class Stub
|
20
|
+
def initialize
|
21
|
+
@carry = {}
|
22
|
+
end
|
23
|
+
def carry(key, val)
|
24
|
+
@carry.store(key, val)
|
25
|
+
end
|
26
|
+
def method_missing(key, *args)
|
27
|
+
if(match = /^(.*)=$/.match(key.to_s))
|
28
|
+
@carry[match[1].to_sym] = args.first
|
29
|
+
else
|
30
|
+
@carry[key]
|
31
|
+
end
|
32
|
+
end
|
33
|
+
def respond_to?(key)
|
34
|
+
true
|
35
|
+
end
|
36
|
+
end
|
37
|
+
EVENT_MAP = {
|
38
|
+
:debitors => Debitors,
|
39
|
+
:invoices => Invoices,
|
40
|
+
}
|
41
|
+
def autoinvoice
|
42
|
+
if(id = @session.user_input(:unique_id))
|
43
|
+
AutoInvoice.new(@session, @session.autoinvoice(id))
|
44
|
+
end
|
45
|
+
end
|
46
|
+
def create_autoinvoice
|
47
|
+
_create_invoice(CreateAutoInvoice, nil)
|
48
|
+
end
|
49
|
+
def create_debitor
|
50
|
+
Debitor.new(@session, YDIM::Debitor.new(nil))
|
51
|
+
end
|
52
|
+
def create_invoice
|
53
|
+
_create_invoice(CreateInvoice)
|
54
|
+
end
|
55
|
+
def _create_invoice(nextclass, date=Date.today)
|
56
|
+
if((id = @session.user_input(:unique_id)) \
|
57
|
+
&& (debitor = @session.debitor(id.to_i)))
|
58
|
+
invoice = Stub.new
|
59
|
+
invoice.carry(:debitor, debitor)
|
60
|
+
invoice.carry(:date, date)
|
61
|
+
invoice.carry(:precision, 2)
|
62
|
+
if debitor.foreign?
|
63
|
+
invoice.carry(:suppress_vat, true)
|
64
|
+
end
|
65
|
+
nextclass.new(@session, invoice)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
def debitor
|
69
|
+
if(id = @session.user_input(:unique_id))
|
70
|
+
Debitor.new(@session, @session.debitor(id.to_i))
|
71
|
+
end
|
72
|
+
end
|
73
|
+
def logout
|
74
|
+
@session.logout
|
75
|
+
State::Init.new(@session, nil)
|
76
|
+
end
|
77
|
+
def invoice
|
78
|
+
if(id = @session.user_input(:unique_id))
|
79
|
+
Invoice.new(@session, @session.invoice(id.to_i))
|
80
|
+
end
|
81
|
+
end
|
82
|
+
def pdf
|
83
|
+
if(id = @session.user_input(:unique_id))
|
84
|
+
Pdf.new(@session, @session.invoice(id.to_i))
|
85
|
+
end
|
86
|
+
end
|
87
|
+
def send_invoice
|
88
|
+
if(id = @session.user_input(:unique_id))
|
89
|
+
sort_args = { :sortby => (@sortby || []).first,
|
90
|
+
:sort_reverse => @sort_reverse }
|
91
|
+
recipients = @session.send_invoice(id.to_i, sort_args)
|
92
|
+
message = @session.lookandfeel.lookup(:confirm_send_invoice,
|
93
|
+
recipients.join(', '))
|
94
|
+
Html::State::Confirm.new(@session, message)
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: utf-8
|
3
|
+
# Html::State::Init -- ydim -- 12.01.2006 -- hwyss@ywesee.com
|
4
|
+
|
5
|
+
require 'ydim/html/state/debitors'
|
6
|
+
require 'ydim/html/view/init'
|
7
|
+
|
8
|
+
module YDIM
|
9
|
+
module Html
|
10
|
+
module State
|
11
|
+
class Init < SBSM::State
|
12
|
+
VIEW = Html::View::Init
|
13
|
+
def login
|
14
|
+
if(res = @session.login)
|
15
|
+
Debitors.new(@session, nil)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,180 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: utf-8
|
3
|
+
# Html::State::Invoice -- ydim -- 16.01.2006 -- hwyss@ywesee.com
|
4
|
+
|
5
|
+
require 'ydim/html/state/global_predefine'
|
6
|
+
require 'ydim/html/state/ajax_values'
|
7
|
+
require 'ydim/html/state/confirm'
|
8
|
+
require 'ydim/html/view/invoice'
|
9
|
+
|
10
|
+
module YDIM
|
11
|
+
module Html
|
12
|
+
module State
|
13
|
+
class AjaxItems < SBSM::State
|
14
|
+
VOLATILE = true
|
15
|
+
VIEW = Html::View::ItemList
|
16
|
+
end
|
17
|
+
class AjaxInvoice < SBSM::State
|
18
|
+
VOLATILE = true
|
19
|
+
VIEW = Html::View::InvoiceComposite
|
20
|
+
end
|
21
|
+
module InvoiceKeys
|
22
|
+
def invoice_key
|
23
|
+
:invoice
|
24
|
+
end
|
25
|
+
def invoice_keys
|
26
|
+
invoice_mandatory + [:precision, :suppress_vat]
|
27
|
+
end
|
28
|
+
def invoice_mandatory
|
29
|
+
[:description, :date, :currency]
|
30
|
+
end
|
31
|
+
end
|
32
|
+
class CreateInvoice < Global
|
33
|
+
include InvoiceKeys
|
34
|
+
VIEW = Html::View::Invoice
|
35
|
+
attr_reader :model
|
36
|
+
def update
|
37
|
+
_update(Invoice)
|
38
|
+
end
|
39
|
+
def _update(nextclass)
|
40
|
+
input = user_input(invoice_keys, invoice_mandatory)
|
41
|
+
input[:precision] = (input[:precision] || 2).to_i
|
42
|
+
unless(error?)
|
43
|
+
@model = @session.send("create_#{invoice_key}",
|
44
|
+
@model.debitor.unique_id)
|
45
|
+
@model.payment_period = 30
|
46
|
+
input.each { |key, val|
|
47
|
+
@model.send("#{key}=", val)
|
48
|
+
}
|
49
|
+
@model.odba_store
|
50
|
+
nextclass.new(@session, @model)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
class Invoice < Global
|
55
|
+
include InvoiceKeys
|
56
|
+
class SortableInvoice
|
57
|
+
def initialize invoice
|
58
|
+
@invoice = invoice
|
59
|
+
end
|
60
|
+
def items
|
61
|
+
@items ||= @invoice.items
|
62
|
+
end
|
63
|
+
def reverse!
|
64
|
+
items.reverse!
|
65
|
+
end
|
66
|
+
def respond_to? *args
|
67
|
+
@invoice.respond_to?(*args) || super
|
68
|
+
end
|
69
|
+
def sort! &block
|
70
|
+
items.sort! &block
|
71
|
+
end
|
72
|
+
def update!
|
73
|
+
@items = nil
|
74
|
+
end
|
75
|
+
def method_missing name, *args, &block
|
76
|
+
@invoice.send name, *args, &block
|
77
|
+
end
|
78
|
+
end
|
79
|
+
VIEW = Html::View::Invoice
|
80
|
+
attr_reader :model
|
81
|
+
def init
|
82
|
+
@model = SortableInvoice.new @model
|
83
|
+
super
|
84
|
+
end
|
85
|
+
def ajax_create_item
|
86
|
+
if(id = @session.user_input(:unique_id))
|
87
|
+
begin
|
88
|
+
@session.add_items(id.to_i, [{:time => Time.now}], invoice_key)
|
89
|
+
rescue IndexError
|
90
|
+
end
|
91
|
+
@model.update! ## @model is a SortableInvoice
|
92
|
+
end
|
93
|
+
AjaxItems.new(@session, @model.items)
|
94
|
+
end
|
95
|
+
def ajax_delete_item
|
96
|
+
if((id = @session.user_input(:unique_id)) \
|
97
|
+
&& (idx = @session.user_input(:index)))
|
98
|
+
begin
|
99
|
+
@session.delete_item(id.to_i, idx.to_i, invoice_key)
|
100
|
+
rescue IndexError
|
101
|
+
end
|
102
|
+
@model.update! ## @model is a SortableInvoice
|
103
|
+
end
|
104
|
+
AjaxItems.new(@session, @model.items)
|
105
|
+
end
|
106
|
+
def ajax_item
|
107
|
+
data = {}
|
108
|
+
if((id = @session.user_input(:unique_id)) \
|
109
|
+
&& (idx = @session.user_input(:index)))
|
110
|
+
begin
|
111
|
+
keys = [:text, :quantity, :unit, :price]
|
112
|
+
input = user_input(keys).delete_if { |key, val| val.nil? }
|
113
|
+
item = @session.update_item(id.to_i, idx.to_i, input,
|
114
|
+
invoice_key)
|
115
|
+
input.each { |key, val| data.store("#{key}[#{item.index}]", val) }
|
116
|
+
data.store("total_netto#{item.index}", item.total_netto)
|
117
|
+
rescue IndexError
|
118
|
+
end
|
119
|
+
end
|
120
|
+
[:total_netto, :vat, :total_brutto].each { |key|
|
121
|
+
data.store(key, @model.send(key))
|
122
|
+
}
|
123
|
+
AjaxValues.new(@session, data)
|
124
|
+
end
|
125
|
+
def ajax_invoice
|
126
|
+
_do_update
|
127
|
+
AjaxInvoice.new(@session, @model)
|
128
|
+
end
|
129
|
+
def pdf
|
130
|
+
newstate = super
|
131
|
+
newstate.sortby, newstate.sort_reverse = @sortby, @sort_reverse
|
132
|
+
newstate
|
133
|
+
end
|
134
|
+
def send_invoice
|
135
|
+
_do_update
|
136
|
+
super
|
137
|
+
end
|
138
|
+
def update
|
139
|
+
_do_update
|
140
|
+
self
|
141
|
+
end
|
142
|
+
def _do_update
|
143
|
+
if((id = @session.user_input(:unique_id)) \
|
144
|
+
&& @model.unique_id == id.to_i)
|
145
|
+
## update items
|
146
|
+
keys = [:text, :quantity, :unit, :price]
|
147
|
+
data = {}
|
148
|
+
user_input(keys).each { |key, hash|
|
149
|
+
hash.each { |idx, value|
|
150
|
+
(data[idx] ||= {}).store(key, value)
|
151
|
+
} unless hash.nil?
|
152
|
+
}
|
153
|
+
target = origin = nil
|
154
|
+
converter = if((target = @session.user_input(:currency)) \
|
155
|
+
&& (origin = @model.currency) \
|
156
|
+
&& origin != target)
|
157
|
+
@session.currency_converter
|
158
|
+
end
|
159
|
+
data.each { |idx, item|
|
160
|
+
if(converter)
|
161
|
+
item[:price] = converter.convert(item[:price], origin, target)
|
162
|
+
end
|
163
|
+
@session.update_item(id.to_i, idx.to_i, item, invoice_key)
|
164
|
+
}
|
165
|
+
|
166
|
+
_do_update_invoice(user_input(invoice_keys, invoice_mandatory))
|
167
|
+
@model.update! ## @model is a SortableInvoice
|
168
|
+
@model.odba_store
|
169
|
+
end
|
170
|
+
end
|
171
|
+
def _do_update_invoice(input)
|
172
|
+
input[:precision] = (input[:precision] || 2).to_i
|
173
|
+
input.each { |key, val|
|
174
|
+
@model.send("#{key}=", val)
|
175
|
+
}
|
176
|
+
end
|
177
|
+
end
|
178
|
+
end
|
179
|
+
end
|
180
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: utf-8
|
3
|
+
# Html::State::Invoices -- ydim -- 13.01.2006 -- hwyss@ywesee.com
|
4
|
+
|
5
|
+
require 'ydim/html/state/global_predefine'
|
6
|
+
require 'ydim/html/view/invoices'
|
7
|
+
|
8
|
+
module YDIM
|
9
|
+
module Html
|
10
|
+
module State
|
11
|
+
class AjaxInvoices < SBSM::State
|
12
|
+
VOLATILE = true
|
13
|
+
VIEW = Html::View::InvoiceList
|
14
|
+
end
|
15
|
+
module AjaxInvoiceMethods
|
16
|
+
def ajax_invoices(model=@model)
|
17
|
+
keys = [:payment_received, :unique_id, :deleted]
|
18
|
+
input = user_input(keys, [:unique_id])
|
19
|
+
id = input.delete(:unique_id).to_i
|
20
|
+
if(!error? && !input.empty? && (invoice = @session.invoice(id)))
|
21
|
+
input.each { |key, val|
|
22
|
+
invoice.send("#{key}=", val)
|
23
|
+
}
|
24
|
+
invoice.odba_store
|
25
|
+
model.delete_if { |info| info.unique_id == id }
|
26
|
+
end
|
27
|
+
AjaxInvoices.new(@session, model)
|
28
|
+
end
|
29
|
+
def ajax_status
|
30
|
+
AjaxInvoices.new(@session, load_invoices)
|
31
|
+
end
|
32
|
+
def currency_convert(invoices)
|
33
|
+
currency = Html.config.currency
|
34
|
+
converter = @session.currency_converter
|
35
|
+
invoices.each { |inv|
|
36
|
+
if(icur = inv.currency)
|
37
|
+
inv.total_netto = converter.convert(inv.total_netto, icur, currency)
|
38
|
+
inv.total_brutto = converter.convert(inv.total_brutto, icur, currency)
|
39
|
+
end
|
40
|
+
inv.currency = currency
|
41
|
+
}
|
42
|
+
end
|
43
|
+
def sort_invoices(invoices)
|
44
|
+
null_date = Date.new(9999)
|
45
|
+
invoices.sort_by { |inv|
|
46
|
+
[null_date - (inv.date || null_date), inv.description.to_s]
|
47
|
+
}
|
48
|
+
end
|
49
|
+
end
|
50
|
+
class Invoices < Global
|
51
|
+
include AjaxInvoiceMethods
|
52
|
+
VIEW = Html::View::Invoices
|
53
|
+
def init
|
54
|
+
super
|
55
|
+
invs = @session.invoice_infos('is_open')
|
56
|
+
invs.concat @session.invoice_infos('is_due')
|
57
|
+
@model = sort_invoices(currency_convert(invs))
|
58
|
+
end
|
59
|
+
def ajax_collect_garbage
|
60
|
+
@session.collect_garbage
|
61
|
+
AjaxInvoices.new(@session, [])
|
62
|
+
end
|
63
|
+
private
|
64
|
+
def load_invoices
|
65
|
+
@model = sort_invoices(currency_convert(@session.invoices))
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: utf-8
|
3
|
+
# Html::State::Pdf -- ydim -- 17.01.2006 -- hwyss@ywesee.com
|
4
|
+
|
5
|
+
require 'ydim/html/view/pdf'
|
6
|
+
|
7
|
+
module YDIM
|
8
|
+
module Html
|
9
|
+
module State
|
10
|
+
class Pdf < SBSM::State
|
11
|
+
VOLATILE = true
|
12
|
+
VIEW = Html::View::Pdf
|
13
|
+
attr_accessor :sortby, :sort_reverse
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,133 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: utf-8
|
3
|
+
# Html::Custom::Lookandfeel -- ydim -- 12.01.2006 -- hwyss@ywesee.com
|
4
|
+
|
5
|
+
require 'sbsm/lookandfeel'
|
6
|
+
|
7
|
+
module YDIM
|
8
|
+
module Html
|
9
|
+
module Custom
|
10
|
+
class Lookandfeel < SBSM::Lookandfeel
|
11
|
+
DICTIONARIES = {
|
12
|
+
'de' => {
|
13
|
+
:address_lines => 'Strasse/Nr.',
|
14
|
+
:autoinvoices => 'Vorlagen',
|
15
|
+
:CHF => 'CHF',
|
16
|
+
:collect_garbage => 'Papierkorb Leeren',
|
17
|
+
:comma => ', ',
|
18
|
+
:confirm_send_invoice0 => 'Die Rechnung wurde an folgende Email-Adressen verschickt: ',
|
19
|
+
:confirm_send_invoice1 => '.',
|
20
|
+
:contact => 'Name',
|
21
|
+
:contact_firstname => 'Vorname',
|
22
|
+
:contact_title => 'Titel',
|
23
|
+
:country => 'Land',
|
24
|
+
:cpr_link => ' ywesee GmbH',
|
25
|
+
:create_debitor => 'Neuer Kunde',
|
26
|
+
:create_autoinvoice => 'Neue Vorlage',
|
27
|
+
:create_invoice => 'Neue Rechnung',
|
28
|
+
:create_item => 'Neue Position',
|
29
|
+
:currency => 'Währung',
|
30
|
+
:dash => ' – ',
|
31
|
+
:date => 'Rechnungsdatum',
|
32
|
+
:date_format => '%d.%m.%Y',
|
33
|
+
:debitors => 'Kunden',
|
34
|
+
:debitor_name => 'Kunde',
|
35
|
+
:debitor_type => 'Kundenart',
|
36
|
+
:delete => 'Löschen',
|
37
|
+
:description => 'Beschreibung',
|
38
|
+
:dt_consulting => 'Beratung',
|
39
|
+
:dt_doctor => 'Arzt',
|
40
|
+
:dt_health => 'Gesundheitsdienstleister',
|
41
|
+
:dt_hospital => 'Spital',
|
42
|
+
:dt_hosting => 'Hosting-Kunde',
|
43
|
+
:dt_info => 'ODDB.org-User',
|
44
|
+
:dt_insurance => 'Krankenkasse',
|
45
|
+
:dt_pharma => 'Pharma-Firma',
|
46
|
+
:dt_pharmacy => 'Apotheke',
|
47
|
+
:e_domainless_email_address => 'Wir akzeptieren keine lokalen Email-Adressen.',
|
48
|
+
:e_invalid_email_address => 'Die angegebene Email-Adresse ist ungültig.',
|
49
|
+
:e_invalid_numeric_format => 'Ungültiges Zahlenformat',
|
50
|
+
:e_invalid_phone => 'Die angegebene Telefonnummer ist ungültig.',
|
51
|
+
:e_too_many_emails => 'Es sind maximal 3 Email-Adressen erlaubt.',
|
52
|
+
:email => 'Email',
|
53
|
+
:emails => 'Email (max. 3)',
|
54
|
+
:e_bygone_date => 'Bitte geben Sie ein Datum an, welches in der Zukuft liegt.',
|
55
|
+
:e_missing0 => 'Bitte geben Sie das Feld "',
|
56
|
+
:e_missing1 => '" an.',
|
57
|
+
:EUR => 'EUR',
|
58
|
+
:Frau => 'Frau',
|
59
|
+
:generate_invoice => 'Generieren',
|
60
|
+
:Herr => 'Herr',
|
61
|
+
:html_title => 'YDIM',
|
62
|
+
:invoice_interval => 'Rechnungs-Intervall',
|
63
|
+
:inv_m => 'Nur Manuell',
|
64
|
+
:inv_3 => 'Vierteljährlich',
|
65
|
+
:inv_6 => 'Halbjährlich',
|
66
|
+
:inv_12 => 'Jährlich',
|
67
|
+
:inv_24 => 'Alle zwei Jahre',
|
68
|
+
:invoices => 'Rechnungen',
|
69
|
+
:is_due => 'Fällige Rechnungen',
|
70
|
+
:is_open => 'Offene Rechnungen',
|
71
|
+
:is_paid => 'Bezahlte Rechnungen',
|
72
|
+
:is_trash => 'Papierkorb',
|
73
|
+
:lgpl_license => 'LGPL',
|
74
|
+
:location => 'PLZ/Ort',
|
75
|
+
:login => 'Login',
|
76
|
+
:logout => 'Logout',
|
77
|
+
:name => 'Firma',
|
78
|
+
:pass => 'Passwort',
|
79
|
+
:payment_period0 => ' Zahlbar in ',
|
80
|
+
:payment_period1 => ' Tagen',
|
81
|
+
:pdf => 'PDF',
|
82
|
+
:phone => 'Telefon',
|
83
|
+
:precision => 'Kommastellen',
|
84
|
+
:reminder_body => 'Erinnerungsmail Text',
|
85
|
+
:reminder_date => 'Wird am %d.%m.%Y versendet',
|
86
|
+
:reminder_none => 'Es wird kein Erinnerungsmail versendet',
|
87
|
+
:reminder_subject => 'Erinnerungsmail Betreff',
|
88
|
+
:salutation => 'Anrede',
|
89
|
+
:send_invoice => 'Email Senden',
|
90
|
+
:suppress_vat => 'OHNE MwSt.',
|
91
|
+
:th_currency => 'Währung',
|
92
|
+
:th_debitor_email => 'Email',
|
93
|
+
:th_debitor_name => 'Name',
|
94
|
+
:th_debitor_type => 'Kundenart',
|
95
|
+
:th_description => 'Beschreibung',
|
96
|
+
:th_domain => 'Domain',
|
97
|
+
:th_email => 'Email',
|
98
|
+
:th_formatted_date => 'Datum',
|
99
|
+
:th_name => 'Name',
|
100
|
+
:th_next_invoice_date => 'Nächste Rechnung',
|
101
|
+
:th_phone => 'Telefon',
|
102
|
+
:th_price => 'Preis',
|
103
|
+
:th_quantity => 'Anzahl',
|
104
|
+
:th_text => 'Positionstext',
|
105
|
+
:th_time => 'Zeit',
|
106
|
+
:th_toggle_payment_received => 'Status',
|
107
|
+
:th_total_brutto => 'Brutto',
|
108
|
+
:th_total_netto => 'Netto',
|
109
|
+
:th_unique_id => 'ID',
|
110
|
+
:th_unit => 'Einheit',
|
111
|
+
:time_format => '%d.%m.%Y %H:%M',
|
112
|
+
:toggle_deleted => 'löschen',
|
113
|
+
:toggle_paid => 'offen',
|
114
|
+
:toggle_recovered => 'wiederherstellen',
|
115
|
+
:toggle_unpaid => 'bezahlt',
|
116
|
+
:total => 'Total',
|
117
|
+
:total_brutto => 'Total Brutto',
|
118
|
+
:total_netto => 'Total Netto',
|
119
|
+
:unique_id => 'ID',
|
120
|
+
:update => 'Speichern',
|
121
|
+
:vat => 'MwSt. (8.0%)',
|
122
|
+
:ydim => 'YDIM',
|
123
|
+
:ydim_version => 'Commit-ID',
|
124
|
+
},
|
125
|
+
}
|
126
|
+
RESOURCES = {
|
127
|
+
:css => 'ydim.css',
|
128
|
+
:javascript => 'javascript',
|
129
|
+
}
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|