ydim-html 1.0.1
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.
- 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
|