@user_data{qw(id login)} = @{$ref}{qw(id login)};
}
- # The XUL/XML backed menu has been removed.
- $user_data{menustyle} = 'v3' if lc($user_data{menustyle} || '') eq 'xml';
+ # The XUL/XML & 'CSS new' backed menus have been removed.
+ my %menustyle_map = ( xml => 'new', v4 => 'v3' );
+ $user_data{menustyle} = $menustyle_map{lc($user_data{menustyle} || '')} || $user_data{menustyle};
# Set default language if selected language does not exist (anymore).
$user_data{countrycode} = $::lx_office_conf{system}->{language} unless $user_data{countrycode} && -d "locale/$user_data{countrycode}";
use constant PRIV => '__paginatedhelper_priv';
+use List::Util qw(min);
+
my %controller_paginate_spec;
sub make_paginated {
: ();
my $calculated_params = "SL::DB::Manager::$spec->{MODEL}"->paginate(%paginate_params, args => \%paginate_args);
%paginate_params = (
- %paginate_params,
+ page => min($paginate_params{page}, $calculated_params->{max}),
+ per_page => $paginate_params{per_page},
num_pages => $calculated_params->{max},
common_pages => $calculated_params->{common},
);
my ($id) = selectrow_query($form, $dbh, qq|SELECT id FROM employee WHERE login = ?|, $form->{login});
+ do_query($form, $dbh, qq|DELETE FROM follow_up_access WHERE what = ?|, $id);
+
my $query = qq|INSERT INTO follow_up_access (who, what) VALUES (?, ?)|;
my $sth = prepare_query($form, $dbh, $query);
- do_query($form, $dbh, qq|DELETE FROM follow_up_access WHERE what = ?|, $id);
-
while (my ($who, $access_allowed) = each %{ $params{access} }) {
next unless ($access_allowed);
my %style_to_script_map = (
v3 => 'v3',
neu => 'new',
- v4 => 'v4',
);
my $menu_script = $style_to_script_map{$::myconfig{menustyle}} || '';
$pkr->{selected} = ' selected'; # unless $form->{selected};
# no customer pricesgroup set
- if ($pkr->{price_unfmt} == $pkr->{default_sellprice} || $form->{'sellprice_'.$i} * 1 > 1) {
+ if ($pkr->{price_ufmt} == $pkr->{default_sellprice}) {
$pkr->{price} = $form->{"sellprice_$i"};
} else {
+# this sub should not set anything and only return. --sschoeling, 20090506
+# is this correct? put in again... -- grichardson 20110119
$form->{"sellprice_$i"} = $pkr->{price};
}
- } elsif ($pkr->{price_unfmt} == $pkr->{default_sellprice} and $pkr->{default_sellprice} != 0) {
+ } elsif ($pkr->{price_ufmt} == $pkr->{default_sellprice} and $pkr->{default_sellprice} != 0) {
$pkr->{price} = $form->{"sellprice_$i"};
$pkr->{selected} = ' selected';
}
{ name => "IO::Socket::SSL", url => "http://search.cpan.org/~sullr/", debian => 'libio-socket-ssl-perl' },
{ name => "Net::LDAP", url => "http://search.cpan.org/~gbarr/", debian => 'libnet-ldap-perl' },
# Net::SMTP is core since 5.7.3
- { name => "Net::SMTP::SSL", version => '1.01', url => "http://search.cpan.org/~cwest/", debian => 'libnet-smtp-ssl-perl' },
- { name => "Net::SSLGlue", version => '1.01', url => "http://search.cpan.org/~sullr/", debian => 'libnet-sslglue-perl' },
+ { name => "Net::SMTP::SSL", url => "http://search.cpan.org/~cwest/", debian => 'libnet-smtp-ssl-perl' },
+ { name => "Net::SSLGlue", url => "http://search.cpan.org/~sullr/", debian => 'libnet-sslglue-perl' },
);
@developer_modules = (
-f "$css_path/$user_style/main.css") {
$css_path = "$css_path/$user_style";
} else {
- $css_path = "$css_path/lx-office-erp";
+ $css_path = "$css_path/kivitendo";
}
} else {
- $css_path = "$css_path/lx-office-erp";
+ $css_path = "$css_path/kivitendo";
}
$::myconfig{css_path} = $css_path; # needed for menunew, FIXME: don't do this here
my $menu_title = $::locale->text($item);
my $menu_text = $menu_title;
- if ($menu_item->{"submenu"} || !defined($menu_item->{"module"})) {
+ if ($menu_item->{"submenu"} || !defined($menu_item->{"module"}) && !defined($menu_item->{href})) {
my $h = $self->print_menu("${parent}${item}", $depth * 1 + 1)."\n";
if (!$parent) {
my @vars = qw(module action target href);
if ($menuitem->{href}) {
- $str = qq|<a href=$menuitem->{href}|;
+ $str = qq|<a href="$menuitem->{href}|;
@vars = qw(module target href);
}
use SL::Layout::Login;
use SL::Layout::Classic;
use SL::Layout::V3;
-use SL::Layout::V4;
use SL::Layout::Javascript;
sub new {
return SL::Layout::Classic->new if $params{style} eq 'old';
return SL::Layout::V3->new if $params{style} eq 'v3';
- return SL::Layout::V4->new if $params{style} eq 'v4';
return SL::Layout::Javascript->new if $params{style} eq 'neu';
return SL::Layout::Admin->new if $params{style} eq 'admin';
return SL::Layout::Login->new if $params{style} eq 'login';
=head1 NAME
-SL::Layout::Top - Top line in classic and v4 menu.
+SL::Layout::Top - Top line in classic and v3 menu.
=head1 DOM MODEL
+++ /dev/null
-package SL::Layout::V4;
-
-use strict;
-use parent qw(SL::Layout::Base);
-use SL::Layout::Css;
-use SL::Layout::Top;
-
-use URI;
-
-sub init_sub_layouts {
- [
- SL::Layout::Top->new,
- SL::Layout::None->new,
- ]
-}
-
-sub start_content {
- "<div id='content'>\n";
-}
-
-sub end_content {
- "</div>\n";
-}
-
-sub pre_content {
- my ($self) = @_;
-
- $self->{sub_class} = 1;
-
- my $callback = $::form->unescape($::form->{callback});
- $callback = URI->new($callback)->rel($callback) if $callback;
- $callback = "login.pl?action=company_logo" if $callback =~ /^(\.\/)?$/;
-
- $self->SUPER::pre_content .
-
- $self->SUPER::render('menu/menuv4', { no_menu => 1, no_output => 1 },
- force_ul_width => 1,
- date => $self->clock_line,
- menu => $self->print_menu,
- callback => $callback,
- );
-}
-
-1;
my $title_sub = delete($attributes{title_sub});
my $default_sub = delete($attributes{default_sub});
+ my $with_empty = delete($attributes{with_empty});
+ my $empty_title = delete($attributes{empty_title});
my %selected;
my @options;
- if ( delete($attributes{with_empty}) ) {
- push(@options, [undef, $attributes{empty_title} || '']);
+ if ( $with_empty ) {
+ push(@options, [undef, $empty_title || '']);
}
my $normalize_entry = sub {
my $title;
if ( $value_title_sub ) {
- ($value, $title) = $value_title_sub->($entry);
+ ($value, $title) = @{ $value_title_sub->($entry) };
} else {
$value = $normalize_entry->('value', $entry, $value_sub, $value_key);
my @all_menustyles = (
{ id => 'old', title => $::locale->text('Old (on the side)') },
{ id => 'v3', title => $::locale->text('Top (CSS)') },
- { id => 'v4', title => $::locale->text('Top (CSS) new') },
{ id => 'neu', title => $::locale->text('Top (Javascript)') },
);
sub add_user {
$::form->{title} = "kivitendo " . $::locale->text('Administration') . " / " . $::locale->text('Add User');
-# Note: Menu Style 'v3' is not compatible to all browsers!
-# "menustyle" => "old" sets the HTML Menu to default.
-# User does not have a well behaved new constructor, so we#Ll just have to build one ourself
+ # User does not have a well behaved new constructor, so we'll just have to build one ourself
my $user = bless {
"vclimit" => 200,
"countrycode" => "de",
"numberformat" => "1.000,00",
"dateformat" => "dd.mm.yy",
"stylesheet" => "kivitendo.css",
- "menustyle" => "old",
+ "menustyle" => "neu",
dbport => $::auth->{DB_config}->{port} || 5432,
dbuser => $::auth->{DB_config}->{user} || 'lxoffice',
dbhost => $::auth->{DB_config}->{host} || 'localhost',
addr_city business_id
), "$form->{db}number",
map({ "cvar_$_->{name}" } @searchable_custom_variables),
+ map({'cvar_'. $_->{name} .'_qtyop'} grep({$_->{type} eq 'number'} @searchable_custom_variables)),
map({ "l_$_" } @columns),
);
map { $column_defs{$_}->{visible} ||= $form->{"l_$_"} ? 1 : 0 } @columns;
map { $column_defs{$_}->{align} = 'right' } qw(onhand sellprice listprice lastcost linetotalsellprice linetotallastcost linetotallistprice rop weight soldtotal), @pricegroup_columns;
- my @hidden_variables = (qw(l_subtotal l_linetotal searchitems itemstatus bom l_pricegroups), @itemstatus_keys, @callback_keys,
- map({ "cvar_$_->{name}" } @searchable_custom_variables), map { "l_$_" } @columns);
+ my @hidden_variables = (
+ qw(l_subtotal l_linetotal searchitems itemstatus bom l_pricegroups),
+ @itemstatus_keys,
+ @callback_keys,
+ map({ "cvar_$_->{name}" } @searchable_custom_variables),
+ map({'cvar_'. $_->{name} .'_qtyop'} grep({$_->{type} eq 'number'} @searchable_custom_variables)),
+ map({ "l_$_" } @columns),
+ );
my $callback = build_std_url('action=generate_report', grep { $form->{$_} } @hidden_variables);
my @columns = qw(projectnumber description active);
my @includeable_custom_variables = grep { $_->{includeable} } @{ $cvar_configs };
+ my @searchable_custom_variables = grep { $_->{searchable} } @{ $cvar_configs };
my %column_defs_cvars = ();
foreach (@includeable_custom_variables) {
$column_defs_cvars{"cvar_$_->{name}"} = {
push @columns, map { "cvar_$_->{name}" } @includeable_custom_variables;
- my @hidden_vars = ('filter', map { ('cvar_'. $_->{name} , 'l_cvar_'. $_->{name}) } @includeable_custom_variables);
+ my @hidden_vars = (
+ 'filter',
+ map({ ('cvar_'. $_->{name} , 'l_cvar_'. $_->{name}) } @includeable_custom_variables),
+ map({'cvar_'. $_->{name} .'_qtyop'} grep({$_->{type} eq 'number'} @searchable_custom_variables)),
+ );
my $href = build_std_url('action=project_report', @hidden_vars);
+++ /dev/null
-../lx-office-erp/menuv4.css
\ No newline at end of file
background-color: #FFFFE0;
color: #000000;
}
-h1.login {
+.login h1 {
+ text-align: center;
+ font-size: 20px;
}
table.login {
background-color: #FFFFE0;
th.login {
text-align: right;
}
-div.admin {
- background-color: #FFFFE0;
- padding: 8px;
- color: #000000;
+.admin h1 {
+ background-color: #fe5f14;
+ text-color: #ffffff;
}
body.menu {
color: #000000;
whiteMenu Hover background color #FFFFE0
DarkGreensubenu pointer
*/
-body.menuv4 {
- behavior: url("css/csshover.htc");
- /*font-size: 14pt;*/
- line-height: 20pt;
- font-family: Verdana, Geneva, Tahoma, sans-serif;
- background-color: #FFFFFF;
- color: #000000;
-}
-#menuv4 {
- /*font-size: 85%;*/
- width: 99.8%;
- float: left;
- /*border: 3px solid;*/
- background-color: #FFFFFF;
- color: #000000;
-}
-#menuv4 a, #menuv4 h2, #menuv4 div.x {
- font-size: 80%;
- line-height: 120%;
- display: block;
- border: 0;
- white-space: nowrap;
- margin: 0;
- padding: 0.3em 1em;
-}
-#menuv4 h2 {
- background-color: #ffffff;
- color: #000000;
- /*padding: 2px 15px;*/
-/* Firefox */
- -moz-border-radius: 0.4em 0.4em 0;
-/* Safari, Chrome */
- -webkit-border-radius: 0.4em 0.4em 0;
-/* Konqueror */
- -khtml-border-radius: 0.4em 0.4em 0;
-/* CSS3 */
- border-radius: 0.4em 0.4em 0 0;
-/* behavior: url(border-radius.htc); */
-}
-#menuv4 ul:hover h2 {
- background-color:#DCDCDC;
-}
-#menuv4 a, #menuv4 a:visited, #menuv4 div.x, #menuv4 div.x:visited {
- color: #000000;
- text-decoration: none;
- padding-right: 10px;
-}
-#menuv4 a {
- background: #EBEBEB;
-}
-#menuv4 div.x, #menuv4 div.x:visited {
- background-color: #EBEBEB;
- border-right: 1em solid #FE5F14;
-}
-#menuv4 div.x:hover {
- border-right: none;
-}
-#menuv4 a:hover, #menuv4 div.x:hover {
- color: #FE5F14;
- background-color: #EBEBEB;
-}
-#menuv4 a:active, #menuv4 div.x:active {
- color: #FE5F14;
- background-color: #EBEBEB;
-}
-#menuv4 ul {
- list-style: none;
- margin: 0;
- padding: 0;
- float: left;
-}
-
-#menuv4 li {
- position: relative;
- float: none;
- border: 0;
-}
-li.sub {
- position: relativ;
- left: 0.2em;
- top: 0px;
- background-color: #FFFFFF;
-}
-/* IE6 spacing bug fix, <li>s without a bottom border get spaced to far * correction:the bug will change the height of the parent element! this will also cause the whole menu to grow * so the only method to get this pile of crap going is to add a bottom border to the <li>s, where the enclosing <ul> already has * a bottom border, which just looks ugly * the trick:color the bottom border with the same color as the bottom pixel of the background image - noone notices */
-#menuv4 ul li {
- /* border: solid;
- border-color: #991900;
- border-width: 0 0 1px 0;
-*/
-}
-#menuv4 ul ul {
- padding: 0 2em 2em 2em;
- margin: 0 -2em -2em -2em;
-}
-#menuv4 ul ul li {
- /*padding-top: 0.01em;*/
- background-color: #FFFFFF;
-}
-/* IE6 event bug fix, without a background there hovers will be occassionally lost between the li's to the layer below * causing the menu to close. Opera 9 has the same bug btw. */
-#menuv4 ul ul {
- position: absolute;
- z-index: 500;
- top: auto;
- display: none;
-}
-#menuv4 ul ul ul {
- top: 0;
- left: 99%;
- padding: 2em;
- margin: -2em;
-}
-#menuv4 ul ul ul li {
- border-left: 0.2em solid #EBEBEB;
-}
-/* Begin non-anchor hover selectors */
-/* Enter the more specific element (div) selectoron non-anchor hovers for IE5.x to comply with theolder version of csshover.htc - V1.21.041022. Itimproves IE's performance speed to use the olderfile and this method */
-div#menuv4 h2:hover {
- background: #EBEBEB;
- color: #FE5F14;
-}
-div#menuv4 li:hover {
- cursor: pointer;
- z-index: 100;
-}
-div#menuv4 li:hover ul ul, div#menuv4 li li:hover ul ul, div#menuv4 li li li:hover ul ul, div#menuv4 li li li li:hover ul ul {
- display: none;
-}
-div#menuv4 li:hover ul, div#menuv4 li li:hover ul, div#menuv4 li li li:hover ul, div#menuv4 li li li li:hover ul {
- display: block;
- position: relativ: left: 10px;
-}
-/* End of non-anchor hover selectors */
-
body.menuv3 {
behavior: url("css/csshover.htc");
/*font-size: 14pt;*/
/*border: 3px solid;*/
background-color: #FFFFFF;
color: #000000;
- margin-top: 0.2em;
}
#menuv3 a, #menuv3 h2, #menuv3 div.x {
font-size: 80%;
margin: 0;
padding: 0.3em 1em;
}
-#menuv3 h2:before {
- content: " ";
-}
-#menuv3 h2:after {
- content: " ";
-}
#menuv3 h2 {
background-color: #ffffff;
color: #000000;
}
/* End of non-anchor hover selectors */
+li.sub {
+ position: relativ;
+ left: 0.2em;
+ top: 0px;
+ background-color: #FFFFFF;
+}
+
/* html menu */
/* types of lines: m sm i (menu submenu item)
each line is a mi (menuitem) and has one mii (menu-item-icon) whcih is ms (menu-spacer)
body { margin: 0 }
@media print {
- #menuv3, #menuv4, #html-menu, #frame-header, #js-menu { /* items with this class won't print */
+ #menuv3, #html-menu, #frame-header, #main_menu_div, #js-header { /* items with this class won't print */
display: none;
}
#content.html-menu { margin-left: 0; }
#menuv3 h2 {
color:#fff;
-padding:0 5px;
+padding:2px 10px;
}
#menuv3 a, #menuv3 a:visited, #menuv3 div.x, #menuv3 div.x:visited {
#menuv3 a {
background:#eee;
}
-
#menuv3 div.x, #menuv3 div.x:visited {
background:#eee url(../../image/right.gif) no-repeat right;
}
margin:0;
padding:0;
float:left;
-min-width:7em;
}
#menuv3 li {
#menuv3 ul ul ul {
top:0;
-left:100%;
+left:90%;
}
/* Begin non-anchor hover selectors */
/* End of non-anchor hover selectors */
-#menuv4 {
-width:99.8%;
-float:left;
-background:url(../../image/bg_css_menu.png) repeat bottom;
-border:1px solid;
-border-color:#ccc #888 #555 #bbb;
-}
-
-#menuv4 a, #menuv4 h2, #menuv4 div.x {
-font:11px/16px arial,helvetica,sans-serif;
-display:block;
-border:0;
-border-right:1px;
-border-style:solid;
-border-color:#ccc #888 #555 #bbb;
-white-space:nowrap;
-margin:0;
-padding:1px 0 1px 3px;
-}
-
-#menuv4 h2 {
-color:#fff;
-padding:2px 10px;
-}
-
-#menuv4 a, #menuv4 a:visited, #menuv4 div.x, #menuv4 div.x:visited {
-color:#000;
-text-decoration:none;
-padding-right:10px;
-}
-
-#menuv4 a {
-background:#eee;
-}
-#menuv4 div.x, #menuv4 div.x:visited {
-background:#eee url(../../image/right.gif) no-repeat right;
-}
-
-#menuv4 a:hover, #menuv4 div.x:hover {
-color:#a00;
-background-color:#ddd;
-}
-
-#menuv4 a:active, #menuv4 div.x:active {
-color:#060;
-background-color:#ccc;
-}
-
-#menuv4 ul {
-list-style:none;
-margin:0;
-padding:0;
-float:left;
-}
-
-#menuv4 li {
-position:relative;
-float:none;
-border:0;
-}
-
-/* IE6 spacing bug fix, <li>s without a bottom border get spaced to far
- * correction: the bug will change the height of the parent element! this will also cause the whole menu to grow
- * so the only method to get this pile of crap going is to add a bottom border to the <li>s, where the enclosing <ul> already has
- * a bottom border, which just looks ugly
- * the trick: color the bottom border with the same color as the bottom pixel of the background image - noone notices */
-#menuv4 ul li {
-border:solid;
-border-color:#ccd5e5;
-border-width:0 0 1px 0;
-}
-
-#menuv4 ul ul li {
-border:solid;
-border-width:0 0 1px 0;
-}
-
-/* IE6 event bug fix, without a background there hovers will be occassionally lost between the li's to the layer below
- * causing the menu to close. Opera 9 has the same bug btw. */
-#menuv4 ul ul {
-position:absolute;
-z-index:500;
-top:auto;
-display:none;
-}
-
-#menuv4 ul ul ul {
-top:0;
-left:90%;
-}
-
-/* Begin non-anchor hover selectors */
-
-/* Enter the more specific element (div) selector
-on non-anchor hovers for IE5.x to comply with the
-older version of csshover.htc - V1.21.041022. It
-improves IE's performance speed to use the older
-file and this method */
-
-div#menuv4 h2:hover {
-background:#A3C5FF;
-color:#a00;
-}
-
-div#menuv4 li:hover {
-cursor:pointer;
-z-index:100;
-}
-
-div#menuv4 li:hover ul ul,
-div#menuv4 li li:hover ul ul,
-div#menuv4 li li li:hover ul ul,
-div#menuv4 li li li li:hover ul ul
-{display:none;}
-
-div#menuv4 li:hover ul,
-div#menuv4 li li:hover ul,
-div#menuv4 li li li:hover ul,
-div#menuv4 li li li li:hover ul
-{display:block;}
-
-/* End of non-anchor hover selectors */
-
/* html menu */
/* types of lines: m sm i (menu submenu item)
each line is a mi (menuitem) and has one mii (menu-item-icon) whcih is ms (menu-spacer)
@media print {
- #menuv3, #menuv4, #html-menu, #frame-header, #js-menu { /* items with this class won't print */
+ #menuv3, #html-menu, #frame-header, #main_menu_div, #js-header { /* items with this class won't print */
display: none;
}
#content.html-menu { margin-left: 0; }
** BITTE FERTIGEN SIE VOR DEM UPGRADE EIN BACKUP IHRER DATENBANK(EN) AN! **
-Upgrade auf v2.7.1
+Upgrade auf v3.0.0
==================
* Neue Abhängigkeiten
- Bugfix #1829: Lieferanten zu Dienstleistungen werden nicht gespeichert
- Bugfix #1834: Buchungsliste - Bilanzspalte
- Bugfix #1837: Lieferant auf ungültig setzen, verfälscht Kreditorenbuchungsmaske (mulitbox <-> obsolete?)
+ - Bugfix #1840: Für Auswahl "Drucker" bzw. "Warteschlange" müssen Latex-Vorlagen zwingend aktiviert sein
- Bugfix #1841: falsche Finanzamtnummern
- Bugfix #1842: Offene Posten Alterstrukturliste prüft nur auf tagesaktuellem Datum
- Bugfix #1849: Buttons "Loeschen" und "Buchen" bei frischen Rechnungen verschwindet nach "Erneuern"
- Bugfix #1869: Artikel: Inkonsistente Zustände bzgl. eindeutige Artikelnummern (war: Dienstleistung: neuer Preis lässt sich nicht speichern)
- Bugfix #1871: Datumsformat dd-mm-yy verursacht Fehler in Rose::DB::Object
- Bugfix #1872: CSVImport verliert die erste Spalte, wenn die Importdatei UTF8 mit BOM ist
+ - Bugfix #1873: Preise zu Preisgruppen werden nicht mehr korrekt gespeichert
- Bugfix #1877: Installations Check preuft nicht gegen Net::LDAP
- Bugfix #1878: Programm Icon kivitendo
+ - Bugfix #1886: doppelte Leerzeichen im Lieferantenname werden in Auswahlliste für Kreditorenbuchung nicht richtig geparst
- Bugfix #1889: Fälligkeitsdatum aus Rechnungsdatum
- Bugfix #1890: Kontenabgleich: Spaltenüberschrift vertauscht
- Bugfix #1892: Nach Update Can't use string ("Form") as a HASH....
+ - Bugfix #1893: Falscher Bezug bei Kontoliste
- Bugfix #1894: Stammdaten - Berichte - Kunden: Auswahl Rechnungen, Aufträge, Angebote wirkt als Filter
- Bugfix #1895: Negative Beträge bei Zahlungseingang für Gutschriften
- Bugfix #1900: Warenbericht: Projekt in Bericht aufnhemen ergibt SQL-Fehler
- Bugfix #1936: Autom. Update des Faelligkeitsdatums bei Kreditorenbuchungen funktioniert nicht zuverlaessig
- Bugfix #1939: Kreditorenbuchungen: Projektnummer wird nicht autom. in Zeilen uebernommen
- Bugfix #1940: Sprung von Wiedervorlage zu Kreditorenbuchung in Kreditorenbuchung funktioniert nicht
+ - Bugfix #1942: Dialogbuchen: Datumsaenderung innerhalb des Erstellungstages nicht moeglich
- Bugfix #1949: Falsche Zuordnung Verkäufer/-in bei Kunden-Stammdaten
+ - Bugfix #1945: Aufbereitung USTVA falsch in 2.7.0
- Bugfix #1950: Abteilung wird aus ausgelagerten Lieferscheinen nicht in Rechnung übernommen.
- Bugfix #1952: Lieferscheine werden nicht nach Abteilung gefiltert
- Bugfix #1954: CSV-Import benutzerdef. Variablen mit Großbuchstaben geht nicht
- Bugfix #2041: 'Konto schon vorhanden' beim Speichern eines bestehenden Kontos nach Änderung
- Bugfix #2044: fehlender Benutzername bei Menue CSS (v4)
- Bugfix #2048: Menu verschwindet
+ - Bugfix #2049: Vorlagen-Templates aufraeumen
+ - Bugfix #2053: Link zur Dokumentation ins Menü einbauen
+ - Bugfix #2054: oberster Auftrag wird ignoriert bei Mehrfachauswahl zum Zusammenfassen von Aufträgen
+ - Bugfix #2055: Zusammenfassen von Aufträgen wirft Fehlermeldung
+ - Bugfix #2056: Stark abweichende Optik des Verkaufsberichtes
+ - Bugfix #2059: Falsches Icon im Programm-Menü
+ - Bugfix #2060: Sprache hinzufügen schlägt fehl
+ - Bugfix #2061: Fehler im Menü Programm bei Menü-Varianten "oben mit css" und "oben mit css neu"
2012-03-01 - Release 2.7.0
Das gleiche für trac:
o Individuelle Abfrage
- + geändert zwischen <letztes Releasedatum> und <heute>
+ + geändert zwischen <letztes Releasedatum> und <heute+1>
+ Status closed
+ Lösung behobena
+ Komponente ist Lx-Office ERP
o sortieren nach Ticketnummer
o rest weiter ab copy&paste
+ Achtung: trac hat im Moment noch Probleme, so dass Bugs zum teil mit nicht
+ existenten Lösungen geschlossen werden. Besser ist es, sich die Lösung als
+ eigene Spalte anzeigen zu lassen, die Lösungen zu filtern, die nicht
+ erwünscht sind, und den Rest zu formatieren (TODO: Script erweitern)
+
+ Achtung: trac benutzt Datum 00:00:00 als obere Grenze, dass heisst, immer
+ einen Tag mehr angeben.
+
- Ausserdem einmal durch das git scrollen und sinnvolle grössere Änderungen
ins changelog übertragen. Muss nur einmal gemacht werden, möglichst danach
nur noch inkrementell.
'BWA' => 'BWA',
'Back' => 'Zurück',
'Back to login' => 'Zurück zur Anmeldung',
- 'Back to the login page' => 'Zurück zur Loginseite',
'Background job history' => 'Verlauf der Hintergrund-Jobs',
'Background jobs' => 'Hintergrund-Jobs',
'Background jobs and task server' => 'Hintergrund-Jobs und Task-Server',
'Do you want to store the existing onhand values into a new warehouse?' => 'Möchten Sie die vorhandenen Mengendaten in ein Lager übertragen?',
'Document' => 'Dokument',
'Document Project Number' => 'Projektnummer des Belegs',
+ 'Documentation' => 'Dokumentation',
'Documentation (in German)' => 'Dokumentation',
'Documents in the WebDAV repository' => 'Dokumente im WebDAV-Repository',
'Done' => 'Fertig',
'Language missing!' => 'Sprache fehlt!',
'Language saved!' => 'Sprache gespeichert!',
'Languages' => 'Sprachen',
+ 'Languages and translations' => 'Sprachen und Ãœbersetzungen',
'Last Action' => 'Letzte Aktivität',
'Last Article Number' => 'Letzte Artikelnummer',
'Last Cost' => 'Einkaufspreis',
'To add a user to a group edit a name, change the login name and save. A new user with the same variables will then be saved under the new login name.' => 'Um einer Gruppe einen neuen Benutzer hinzuzufügen, ändern und speichern Sie am einfachsten einen bestehenden Benutzernamen. Unter dem neuen Namen wird dann ein Benutzer mit denselben Einstellungen angelegt.',
'Top' => 'Oben',
'Top (CSS)' => 'Oben (mit CSS)',
- 'Top (CSS) new' => 'Oben (mit CSS, neu)',
'Top (Javascript)' => 'Oben (mit Javascript)',
'Top 100' => 'Top 100',
'Top 100 hinzufuegen' => 'Top 100 hinzufügen',
'User Login' => 'Als Benutzer anmelden',
'User data migration' => 'Benutzerdatenmigration',
'User deleted!' => 'Benutzer gelöscht!',
+ 'User login' => 'Benutzeranmeldung',
'User migration complete' => 'Benutzermigration abgeschlossen',
'User name' => 'Benutzername',
'User saved!' => 'Benutzer gespeichert!',
'invoice_list' => 'debitorenbuchungsliste',
'kivitendo' => 'kivitendo',
'kivitendo Homepage' => 'Infos zu kivitendo',
+ 'kivitendo administration' => 'kivitendo Administration',
'kivitendo can fix these problems automatically.' => 'kivitendo kann solche Probleme automatisch beheben.',
'kivitendo has been switched to group-based access restrictions.' => 'kivitendo wurde auf eine gruppenbasierte Benutzerzugriffsverwaltung umgestellt.',
'kivitendo has found one or more problems in the general ledger.' => 'kivitendo hat ein oder mehrere Probleme im Hauptbuch gefunden.',
module=am.pl
action=list_lead
-[System--Languages]
+[System--Languages and translations]
module=menu.pl
action=acc_menu
target=acc_menu
submenu=1
-[System--Languages--Add Language]
+[System--Languages and translations--Add Language]
module=am.pl
action=add_language
-[System--Languages--List Languages]
+[System--Languages and translations--List Languages]
module=am.pl
action=list_language
-[System--Languages--Greetings]
+[System--Languages and translations--Greetings]
module=generictranslations.pl
action=edit_greetings
-[System--Languages--SEPA strings]
+[System--Languages and translations--SEPA strings]
module=generictranslations.pl
action=edit_sepa_strings
--- /dev/null
+-- @tag: remove_menustyle_v4
+-- @description: Menütyp "CSS (oben, neu)" wurde entfernt; also durch v3 ersetzen
+-- @depends:
+-- @charset: utf-8
+UPDATE auth.user_config
+SET cfg_value = 'v3'
+WHERE ((cfg_key = 'menustyle')
+ AND (cfg_value = 'v4'));
--- /dev/null
+-- @tag: rename_buchungsgruppe_16_19_to_19
+-- @description: Buchungsgruppe '16%/19%' in '19%' umbenennen
+-- @depends: release_2_7_0
+
+UPDATE buchungsgruppen SET description = 'Standard 19%' WHERE description = 'Standard 16%/19%';
--- /dev/null
+-- @tag: ustva_setup_2007_update_chart_taxkeys_tax_skr04
+-- @description: Anpassung der UStVA-Schlüssel für Konten 3801, 3806, 3804 und 4400
+-- @depends: release_2_7_0
+
+-- 3806 - neuer Eintrag pos_ustva 811 ab 2007 (falls noch nicht existiert)
+-- 3801 - neuer Eintrag pos_ustva 861 ab 2007 (falls noch nicht existiert)
+-- 4400 - pos_ustva von 51 auf 81 für Eintrag 2007
+-- 3804 - pos_ustva Eintrag 891 ab 2007
+
+INSERT INTO taxkeys (
+ chart_id, pos_ustva, startdate)
+ SELECT chart.id, '811', '2007-01-01'
+ FROM chart LEFT JOIN tax ON (chart.id = tax.chart_id)
+ WHERE chart.accno = '3806'
+ AND
+ EXISTS ( -- update only for SKR04
+ SELECT coa FROM defaults
+ WHERE defaults.coa='Germany-DATEV-SKR04EU'
+ AND NOT EXISTS (
+ select * from taxkeys where chart_id = (select id from chart where accno = '3806') and pos_ustva = '811' and startdate = '2007-01-01' )
+ )
+;
+
+INSERT INTO taxkeys (
+ chart_id, pos_ustva, startdate)
+ SELECT chart.id, '861', '2007-01-01'
+ FROM chart LEFT JOIN tax ON (chart.id = tax.chart_id)
+ WHERE chart.accno = '3801'
+ AND
+ EXISTS ( -- update only for SKR04
+ SELECT coa FROM defaults
+ WHERE defaults.coa='Germany-DATEV-SKR04EU'
+ AND NOT EXISTS (
+ select * from taxkeys where chart_id = (select id from chart where accno = '3801') and pos_ustva = '861' and startdate = '2007-01-01' )
+ )
+;
+
+UPDATE taxkeys SET pos_ustva = '81'
+WHERE chart_id = (SELECT id FROM chart WHERE accno = '4400')
+AND startdate = '2007-01-01'
+AND pos_ustva = '51'
+AND EXISTS (
+ SELECT coa FROM defaults
+ WHERE defaults.coa='Germany-DATEV-SKR04EU'
+);
+
+-- insert taxkey for 3804, but leave taxkey_id empty, because Kivitendo can't
+-- handle this automatic booking and tax has to be booked manually
+-- don't insert this key with this startdate if it already exists (was already added manually)
+INSERT INTO taxkeys (
+ chart_id, pos_ustva, startdate)
+ SELECT chart.id, '891', '2007-01-01'
+ FROM chart LEFT JOIN tax ON (chart.id = tax.chart_id)
+ WHERE chart.accno = '3804'
+ AND
+ EXISTS ( -- update only for SKR04
+ SELECT coa FROM defaults
+ WHERE defaults.coa='Germany-DATEV-SKR04EU'
+ AND NOT EXISTS (
+ select * from taxkeys where chart_id = (select id from chart where accno = '3804') and pos_ustva = '891' and startdate = '2007-01-01' )
+ );
[%- USE T8 %]
[% USE HTML %]
[% USE LxERP%]
- <script type='text/javascript'>
- $(function(){ document.getElementsById('rpw').focus();});
- </script>
- <div align="center">
-
- <a href="http://www.kivitendo.org"><img src="image/kivitendo.png" border="0"></a>
-
- <h3 class="login">[% 'kivitendo' | $T8 %] [% HTML.escape(version) %]</h3>
-
- <h2>[% 'Administration' | $T8 %]</h2>
-
- [% IF error %]
- <p><span class="message_error_login">[% error %]</span></p>
- [% END %]
-
- <form method="post" action="admin.pl">
-
- <table>
- <tr>
- <th>[% 'Password' | $T8 %]</th>
- <td><input type="password" name="{AUTH}admin_password" id="rpw"></td>
- <td><input type="submit" class="submit" name="action" value="[% 'Login' | $T8 %]"></td>
- </tr>
- <input type="hidden" name="action" value="login">
- </table>
-
- </form>
-
- <p>[% 'kivitendo Homepage' | $T8 %]: <a href="http://kivitendo.de" target="_blank" title="[% 'kivitendo Homepage' | $T8 %]">http://kivitendo.de</a></p>
-
- <p><a href="controller.pl?action=LoginScreen/user_login" target="_top">[%- LxERP.t8('Back to the login page') %]</a></p>
-
- </div>
-
+ <center>
+ <table class="login" border="3" cellpadding="20">
+ <tr>
+ <td class="login" align="center">
+ <a href="http://www.kivitendo.de" target="_top"><img src="image/kivitendo.png" border="0"></a>
+ <h1>[% 'kivitendo administration' | $T8 %] [% version %]</h1>
+
+ [% IF error %]
+ <p><span class="message_error_login">[% error %]</span></p>
+ [% END %]
+
+ <p>
+
+ <form method="post" action="admin.pl">
+
+ <table width="100%">
+ <tr>
+ <td align="center">
+ <table>
+ <tr>
+ <th align="right">[% 'Password' | $T8 %]</th>
+ <td><input class="login" type="password" name="{AUTH}admin_password" id="admin_password" size="30" tabindex="1"></td>
+ </tr>
+ </table>
+
+ <br>
+ <input type="submit" value="[% 'Login' | $T8 %]" tabindex="2">
+
+ </td>
+ </tr>
+ </table>
+
+ <input type="hidden" name="action" value="login">
+ </form>
+
+ </td>
+ </tr>
+ </table>
+
+ <p>
+ <a href="controller.pl?action=LoginScreen/user_login" target="_top">[%- LxERP.t8('User login') %]</a>
+ |
+ <a href="doc/kivitendo-Dokumentation.pdf" target="_top">[%- LxERP.t8('Documentation') %]</a>
+ </p>
+
+ <script type='text/javascript'>
+ $('#admin_password').focus();
+ </script>
-->
</script>
- <h2>[% title %]</h2>
+ <h1>[% title %]</h1>
[% IF NO_DATABSES %]
[% 'No databases have been found on this server.' | $T8 %]
</form>
[% END %]
-
[%- USE T8 %]
[%- USE LxERP %]
[%- USE HTML %]
- <h2>[% title %]</h2>
+ <h1>[% title %]</h1>
<p>[% LxERP.t8('The dataset backup has been sent via email to #1.', to) | html %]</p>
[%- USE T8 %]
[%- USE HTML %]
- <div class="listtop">[% title %]</div>
+ <h1>[% title %]</h1>
<form method="post" action="admin.pl">
<input type="button" class="submit" onclick="history.back()" value="[% 'Back' | $T8 %]">
</form>
-
[%- USE T8 %]
[%- USE HTML %]
- <div class="listtop">[% title %]</div>
+ <h1>[% title %]</h1>
<p>
[% 'The tables for user management and authentication do not exist. They will be created in the next step in the following database:' | $T8 %]
<input type="button" class="submit" onclick="history.back()" value="[% 'Back' | $T8 %]">
</form>
-
[%- USE T8 %]
[%- USE HTML %]
- <h2>[% title %]</h2>
+ <h1>[% title %]</h1>
<form method="post" action="admin.pl">
<p><a href="admin.pl?action=pg_database_administration">[% 'Back' | $T8 %]</a></p>
[%- USE T8 %]
[%- USE HTML %]
- <div class="listtop">[% title %]</div>
+ <h1>[% title %]</h1>
<form method="post" action="admin.pl">
</p>
</form>
-
[%- USE T8 %]
[%- USE HTML %]
- <h2>[% title %]</h2>
+ <h1>[% title %]</h1>
<form method="post" action="admin.pl">
<a href="admin.pl?action=list_users">[% 'Back' | $T8 %]</a>
<p>[% 'This is a preliminary check for existing sources. Nothing will be created or deleted at this stage!' | $T8 %]</p>
<p>[% 'Leave host and port field empty unless you want to make a remote connection.' | $T8 %]</p>
-
[%- USE T8 %]
[%- USE HTML %]
[%- USE LxERP %]
- <h2>[% title %]</h2>
+ <h1>[% title %]</h1>
<form method="post" action="admin.pl">
<p><input type="submit" class="submit" name="action" value="[% 'Continue' | $T8 %]"></p>
</form>
-
[%- USE T8 %]
[%- USE LxERP %]
[%- USE HTML %]
- <h2>[% title %]</h2>
+ <h1>[% title %]</h1>
<form method="post" action="admin.pl">
<p><input type="submit" class="submit" name="action" value="[% 'Continue' | $T8 %]"></p>
</form>
-
[%- USE T8 %]
-[% USE HTML %]<div class="listtop" width="100%">[% 'Dataset upgrade' | $T8 %] ([% HTML.escape(dbname) %])</div>
+[% USE HTML %]<h1>[% 'Dataset upgrade' | $T8 %] ([% HTML.escape(dbname) %])</h1>
[%- USE T8 %]
[%- USE HTML %]
- <h2>[% title %]</h2>
+ <h1>[% title %]</h1>
<p><a href="admin.pl?action=pg_database_administration">[% 'Back' | $T8 %]</a></p>
<form method="post" action="admin.pl">
<p><input type="submit" class="submit" name="action" value="[% 'Continue' | $T8 %]"></p>
</form>
-
[%- USE T8 %]
[%- USE HTML %]
- <div class="listtop">[% 'Delete group' | $T8 %]: [% name %]</div>
+ <h1>[% 'Delete group' | $T8 %]: [% name %]</h1>
<p class="message_hint">[ [% name %] ] - [% 'Do you really want to delete this group?' | $T8 %]</p>
<form name="Form" method="post" action="admin.pl">
<input type="hidden" name="delete_nextsub" value="delete_group">
<input type="submit" class="submit" name="action" value="[% 'Delete' | $T8 %]">
</form>
-
[% L.stylesheet_tag('jquery.multiselect2side') %]
[% L.javascript_tag('jquery.selectboxes', 'jquery.multiselect2side') %]
+<h1>[% 'Edit group ' | $T8 %]: [% HTML.escape(name) %]</h1>
+
<form name="Form" method="post" action="admin.pl">
[% IF message %]
<p class="message_ok">[% message %]</p>
[% END %]
- <div class="listtop">[% 'Edit group ' | $T8 %]: [% HTML.escape(name) %]</div>
-
<p><a href="admin.pl?action=edit_groups">[% 'Back' | $T8 %]</a></p>
<hr>
[%- USE T8 %]
[%- USE HTML %][%- USE LxERP %]
- <div class="listtop">[% 'Edit group membership' | $T8 %]</div>
+ <h1>[% 'Edit group membership' | $T8 %]</h1>
<p><a href="admin.pl?action=edit_groups">[% 'Back' | $T8 %]</a></p>
<p>[% 'Select the checkboxes that match users to the groups they should belong to.' | $T8 %]</p>
</p>
</form>
-
[%- USE T8 %]
[%- USE HTML %]
- <div class="listtop">[% 'Edit groups' | $T8 %]</div>
+ <h1>[% 'Edit groups' | $T8 %]</h1>
[% IF message %]
<p class="message_ok">[% message %]</p>
[% END %]
<p><a href="admin.pl?action=login">[% 'Back' | $T8 %]</a></p>
- <h1>[% 'Add a new group' | $T8 %]</h1>
+ <h2>[% 'Add a new group' | $T8 %]</h2>
<form method="post" action="admin.pl">
<br>
<p><input type="submit" class="submit" name="action" value="[% 'Add' | $T8 %]"></p>
</form>
- <h1>[% 'Edit and delete a group' | $T8 %]</h1>
+ <h2>[% 'Edit and delete a group' | $T8 %]</h2>
<form name="Form" method="post" action="admin.pl">
[% IF num_groups %]
</p>
</form>
- <h1>[% 'Group membership' | $T8 %]</h1>
+ <h2>[% 'Group membership' | $T8 %]</h2>
<p>[% 'Edit the membership of all users in all groups:' | $T8 %]</p>
-->
</script>
- <form name="Form" id="Form" method="post" action="admin.pl">
+ <h1>[% title %]</h1>
- <div class="listtop" width="100%">[% title %]</div>
+ <form name="Form" id="Form" method="post" action="admin.pl">
<p><a href="admin.pl?action=list_users">[% 'Back' | $T8 %]</a></p>
<table width="100%">
</div>
</form>
- <h1>[% 'User Login' | $T8 %]</h1>
+ <hr>
+
+ <h2>[% 'User Login' | $T8 %]</h2>
<form method="post" action="controller.pl">
<input type="hidden" name="action" value="LoginScreen/login">
</table>
</form>
-
- <hr size="3" noshade>
-
$(function(){ document.getElementsByName('dbname')[0].focus();});
</script>
- <h2>[% title %]</h2>
+ <h1>[% title %]</h1>
<form name="Form" method="post" action="admin.pl" enctype="multipart/form-data">
<input type="submit" class="submit" name="action" value="[% 'Continue' | $T8 %]">
</form>
-
[%- USE T8 %]
- <h2>[% title %]</h2>
+ <h1>[% title %]</h1>
<p>[%- 'The restoration process has started. Here\'s the output of the "pg_restore" command:' | $T8 %]</p>
[%- USE T8 %]
[%- USE HTML %]
- <div class="listtop">[% title %]</div>
+ <h1>[% title %]</h1>
[%- IF connection_ok %]
<input type="button" class="submit" onclick="window.close()" value="[% 'Close Window' | $T8 %]">
</form>
</p>
-
[%- USE T8 %]
[%- USE HTML %]
- <h2>[% title %]</h2>
+ <h1>[% title %]</h1>
<p><a href="admin.pl?action=pg_database_administration">[% 'Back' | $T8 %]</a></p>
[% IF ALL_UPDATED %]
[% 'All Datasets up to date!' | $T8 %]
</form>
[% END %]
-
[%- USE LxERP %]
[%- USE HTML %]
- <div class="listtop">[% title %]</div>
+ <h1>[% title %]</h1>
<form method="post" action="admin.pl">
<input type="submit" class="submit" name="action" value="[% 'No' | $T8 %]">
</form>
-
[%- USE T8 %]
[%- USE HTML %]
- <div class="listtop">[% title %]</div>
+ <h1>[% title %]</h1>
<form method="post" action="admin.pl">
</p>
</form>
-
[%- USE T8 %]
[%- USE HTML %]
- <div class="listtop">[% title %]</div>
+ <h1>[% title %]</h1>
<form method="post" action="admin.pl">
<input type="submit" class="submit" name="action" value="[% 'Continue' | $T8 %]">
</form>
-
<select name="menustyle">
<option value="old"[% IF myconfig_menustyle == 'old' %] selected[% END %]>[% 'Old (on the side)' | $T8 %]</option>
<option value="v3"[% IF myconfig_menustyle == 'v3' %] selected[% END %]>[% 'Top (CSS)' | $T8 %]</option>
- <option value="v4"[% IF myconfig_menustyle == 'v4' %] selected[% END %]>[% 'Top (CSS) new' | $T8 %]</option>
<option value="neu"[% IF myconfig_menustyle == 'neu' %] selected[% END %]>[% 'Top (Javascript)' | $T8 %]</option>
</select>
</td>
maintab.init();
-->
</script>
-
</tr>
<tr>
<th align=right>[% 'Number Format' | $T8 %]</th>
- <td><select name="output_numberformat">[% numberformats, default = output_numberformat, with_empty = 1, empty_title = LxERP.t8('use program settings') %]</select></td>
+ <td>[% L.select_tag('output_numberformat', numberformats, default = output_numberformat, with_empty = 1, empty_title = LxERP.t8('use program settings')) %]</td>
</tr>
<tr>
<th align=right>[% 'Date Format' | $T8 %]</th>
- <td><select name="output_dateformat">[% dateformats, default = output_dateformat, with_empty = 1, empty_title=LxERP.t8('use program settings') %]</select></td>
+ <td>[% L.select_tag('output_dateformat', dateformats, default = output_dateformat, with_empty = 1, empty_title=LxERP.t8('use program settings')) %]</td>
</tr>
<tr>
<th align=right>[% 'Long Dates' | $T8 %]</th>
<option><</option>
<option><=</option>
</select>
- <input name="cvar_[% HTML.escape(var.name) %]"[% IF var.maxlength %]maxlength="[% HTML.escape(var.maxlength) %]"[% END %]>
+ <input name="[% filter_prefix %]cvar_[% HTML.escape(var.name) %]"[% IF var.maxlength %]maxlength="[% HTML.escape(var.maxlength) %]"[% END %]>
[%- ELSIF var.type == 'customer' %]
<input name="[% filter_prefix %]cvar_[% var.name | html %]">
<tr>
<th align="right">[% 'Shipping Address' | $T8 %]</th>
<td colspan="3">
- [% L.select_tag('delivery_id', SHIPTO_ALL, title_sub = \shipto_label, with_empty = 1,
+ [% L.select_tag('delivery_id', SHIPTO_ALL, value_key = 'shipto_id', title_sub = \shipto_label, with_empty = 1,
onchange = "\$('#delivery').load('ct.pl?action=get_delivery&id=' + \$('#cvid').attr('value') + '&db=' + \$('#db').attr('value') + '&shipto_id=' + this.value)") %]
</td>
</tr>
<tr>
<th align="right" nowrap>[% 'Reqdate' | $T8 %]</th>
<td nowrap>
- <input name="reqdate" id="reqdate" size="11" title="[% HTML.escape(myconfig_dateformat) %]" value="[% HTML.escape(reqdate) %]"
- onBlur="check_right_date_format(this)"[% RO %]>
- <input type="button" name="b_reqdate" id="reqdate_trigger" value="?">
+ [% L.date_tag('reqdate', reqdate, readonly => delivered) %]
</td>
</tr>
<tr>
<td class="login" align="center">
<a href="http://www.kivitendo.de" target="_top"><img src="image/kivitendo.png" border="0"></a>
- <h3 class="login" align="center">[% 'kivitendo' | $T8 %] [% version %]</h3>
+ <h1>[% 'kivitendo' | $T8 %] [% version %]</h1>
[% IF error %]
<p><span class="message_error_login">[% error %]</span></p>
<script type="text/javascript" src="js/dhtmlsuite/menu-for-applications.js"></script>
- <table class="menunew">
+ <table id='js-header' class="menunew">
<tr>
<td>
+++ /dev/null
-[%- USE T8 %]
-[%- USE HTML %]
- <div id="menuv4">
- [% menu %]
- </div>
- <div style="clear: both;"></div>
-
- <script type="text/javascript">
-<!--
-function clockon() {
- var now = new Date();
- var h = now.getHours();
- var m = now.getMinutes();
- document.getElementById('clock_id').innerHTML = (h<10?'0'+h:h)+":"+(m<10?'0'+m:m);
- var timer=setTimeout("clockon()", 10000);
-}
-$(clockon);
-//-->
- </script>