X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=bin%2Fmozilla%2Fam.pl;h=c23e9d2416404c6774401affa319a06cd1aa65a0;hb=338ffe02d70c3e9897f114998f534d4fc0bb2b65;hp=b41b0ec9927034a13f40834c928a2aa1bbf8b69b;hpb=4dbb09950c9f5596646537c12d991c99086fe7c1;p=kivitendo-erp.git diff --git a/bin/mozilla/am.pl b/bin/mozilla/am.pl index b41b0ec99..c23e9d241 100644 --- a/bin/mozilla/am.pl +++ b/bin/mozilla/am.pl @@ -24,2071 +24,1571 @@ # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +# MA 02110-1335, USA. #====================================================================== # # administration # #====================================================================== +use utf8; +use List::MoreUtils qw(any); + +use SL::Auth; +use SL::Auth::PasswordPolicy; use SL::AM; use SL::CA; use SL::Form; +use SL::Helper::Flash; use SL::User; +use SL::USTVA; +use SL::Iconv; +use SL::Locale::String qw(t8); +use SL::TODO; +use SL::DB::Printer; +use SL::DB::Tax; +use SL::DB::Language; +use SL::DB::Default; +use SL::DBUtils qw(selectall_array_query conv_dateq); +use CGI; +require "bin/mozilla/common.pl"; -1; -# end of main - +use strict; +1; -sub add { &{ "add_$form->{type}" } }; -sub edit { &{ "edit_$form->{type}" } }; -sub save { &{ "save_$form->{type}" } }; -sub delete { &{ "delete_$form->{type}" } }; +# end of main +sub add { call_sub("add_$main::form->{type}"); } +sub delete { call_sub("delete_$main::form->{type}"); } +sub save { call_sub("save_$main::form->{type}"); } +sub edit { call_sub("edit_$main::form->{type}"); } +sub continue { call_sub($main::form->{"nextsub"}); } +sub save_as_new { call_sub("save_as_new_$main::form->{type}"); } +sub add_account { + $main::lxdebug->enter_sub(); + my $form = $main::form; + my %myconfig = %main::myconfig; -sub add_account { - $lxdebug->enter_sub(); + $main::auth->assert('config'); - - $form->{title} = "Add"; + $form->{title} = "Add"; $form->{charttype} = "A"; AM->get_account(\%myconfig, \%$form); - - $form->{callback} = "$form->{script}?action=list_account&path=$form->{path}&login=$form->{login}&password=$form->{password}" unless $form->{callback}; + + $form->{callback} = "am.pl?action=list_account" unless $form->{callback}; &account_header; - &form_footer; - - $lxdebug->leave_sub(); -} + $main::lxdebug->leave_sub(); +} sub edit_account { - $lxdebug->enter_sub(); + $main::lxdebug->enter_sub(); + + my $form = $main::form; + my %myconfig = %main::myconfig; + my $defaults = SL::DB::Default->get; + + $main::auth->assert('config'); - $form->{title} = "Edit"; + $form->{feature_balance} = $defaults->feature_balance; + $form->{feature_datev} = $defaults->feature_datev; + $form->{feature_erfolgsrechnung} = $defaults->feature_erfolgsrechnung; + $form->{feature_eurechnung} = $defaults->feature_eurechnung; + $form->{feature_ustva} = $defaults->feature_ustva; + AM->get_account(\%myconfig, \%$form); - + foreach my $item (split(/:/, $form->{link})) { $form->{$item} = "checked"; } &account_header; - &form_footer; - $lxdebug->leave_sub(); + $main::lxdebug->leave_sub(); } - sub account_header { - $lxdebug->enter_sub(); + $main::lxdebug->enter_sub(); + my $form = $main::form; + my %myconfig = %main::myconfig; + my $locale = $main::locale; + + $main::auth->assert('config'); + + if ( $form->{action} eq 'edit_account') { + $form->{account_exists} = '1'; + } $form->{title} = $locale->text("$form->{title} Account"); - - $checked{$form->{charttype}} = "checked"; - $checked{"$form->{category}_"} = "checked"; - $checked{CT_tax} = ($form->{CT_tax}) ? "" : "checked"; - - $form->{description} =~ s/\"/"/g; - + + $form->{"$form->{charttype}_checked"} = "checked"; + $form->{"$form->{category}_checked"} = "checked"; + + $form->{select_tax} = ""; + + my @tax_report_pos = USTVA->report_variables({ + myconfig => \%myconfig, + form => $form, + type => '', + attribute => 'position', + calc => '', + }); + if (@{ $form->{TAXKEY} }) { - $form->{selecttaxkey} = "|; + } + foreach my $item (@{ $form->{NEWACCOUNT} }) { + if ($item->{id} == $form->{new_chart_id}) { + $form->{selectnewaccount} .= + qq||; + } elsif (!$form->{new_chart_valid}) { + $form->{selectnewaccount} .= + qq||; + } + } } - - - $eur = qq| - - |.$locale->text('EÜR').qq| - - - |; - - $form->{selectbwa} = "\n|; + my %eur = %{ AM->get_eur_categories(\%myconfig, $form) }; + foreach my $item (sort({ $a <=> $b } keys(%eur))) { + my $text = H($::locale->{iconv_utf8}->convert($eur{$item})); + if ($item == $form->{pos_eur}) { + $select_eur .= qq|\n|; } else { - $form->{selectbwa} .= "\n|; } - } - - - $bwa = qq| - - |.$locale->text('BWA').qq| - - - |; - - $form->{selectbilanz} = "\n|; + my %er = ( + 1 => "Ertrag", + 6 => "Aufwand"); + foreach my $item (sort({ $a <=> $b } keys(%er))) { + my $text = H($::locale->{iconv_utf8}->convert($er{$item})); + if ($item == $form->{pos_er}) { + $select_er .= qq|\n|; } else { - $form->{selectbilanz} .= "\n|; } - } - - - $bilanz = qq| - - |.$locale->text('Bilanz').qq| - - - |; -# this is for our parser only! -# type=submit $locale->text('Add Account') -# type=submit $locale->text('Edit Account') - - $form->header; - print qq| - - -
{script}> - -{id}> - - -{inventory_accno_id}> -{income_accno_id}> -{expense_accno_id}> -{fxgain_accno_id}> -{fxloss_accno_id}> - - - - - - - - - - - - -
$form->{title}
- - - - - - - - - - - - - -|; - - -if ($form->{charttype} eq "A") { - print qq| - - - - - - - - - -|; -} + my $select_bwa = q|\n|; -print qq| - $taxkey - $ustva - $eur - $bwa - $bilanz -
|.$locale->text('Account Number').qq|{accno}>
|.$locale->text('Description').qq|
|.$locale->text('Account Type').qq| - - - - - - -
 |.$locale->text('Asset').qq|\n
-  |.$locale->text('Liability').qq|\n
-  |.$locale->text('Equity').qq|\n
-  |.$locale->text('Revenue').qq|\n
-  |.$locale->text('Expense') - .qq|
  -  |.$locale->text('Heading').qq|
-  |.$locale->text('Account') - .qq|
-
- - - - - -
|.$locale->text('Is this a summary account to record').qq| - {AR}> |.$locale->text('AR') - .qq| {AP}> |.$locale->text('AP') - .qq| {IC}> |.$locale->text('Inventory') - .qq|
-
|.$locale->text('Include in drop-down menus').qq|
- - - - - - - - - - - - - -
|.$locale->text('Receivables').qq||.$locale->text('Payables').qq||.$locale->text('Parts Inventory').qq||.$locale->text('Service Items').qq|
- {AR_amount}> |.$locale->text('Revenue').qq|\n
- {AR_paid}> |.$locale->text('Receipt').qq|\n
- {AR_tax}> |.$locale->text('Tax') - .qq| -
- {AP_amount}> |.$locale->text('Expense/Asset').qq|\n
- {AP_paid}> |.$locale->text('Payment').qq|\n
- {AP_tax}> |.$locale->text('Tax') - .qq| -
- {IC_sale}> |.$locale->text('Revenue').qq|\n
- {IC_cogs}> |.$locale->text('COGS').qq|\n
- {IC_taxpart}> |.$locale->text('Tax') - .qq| -
- {IC_income}> |.$locale->text('Revenue').qq|\n
- {IC_expense}> |.$locale->text('Expense').qq|\n
- {IC_taxservice}> |.$locale->text('Tax') - .qq| -
-
-

-|; - - $lxdebug->leave_sub(); -} + my %bwapos = %{ AM->get_bwa_categories(\%myconfig, $form) }; + foreach my $item (sort({ $a <=> $b } keys %bwapos)) { + my $text = H($::locale->{iconv_utf8}->convert($bwapos{$item})); + if ($item == $form->{pos_bwa}) { + $select_bwa .= qq|\n|; + foreach my $item ((1, 2, 3, 4)) { + if ($item == $form->{pos_bilanz}) { + $select_bilanz .= qq|\n|; - if ($form->{id} && $form->{orphaned}) { - print qq||; - } + my %category = ( + 'A' => $locale->text('Asset'), + 'L' => $locale->text('Liability'), + 'Q' => $locale->text('Equity'), + 'I' => $locale->text('Revenue'), + 'E' => $locale->text('Expense'), + 'C' => $locale->text('Costs'), + ); + foreach my $item ( sort({ $a <=> $b } keys %category) ) { + if ($item eq $form->{category}) { + $select_category .= qq|
- - -|; + # preselection chart type + my @all_charttypes = ({'name' => $locale->text('Account'), 'value' => 'A'}, + {'name' => $locale->text('Heading'), 'value' => 'H'}, + ); + my $selected_charttype = $form->{charttype}; - $lxdebug->leave_sub(); -} - -sub save_account { - $lxdebug->enter_sub(); + # account where AR_tax or AP_tax is set are not orphaned if they are used as + # tax-o-matic account + if ( $form->{id} && $form->{orphaned} && ($form->{link} =~ m/(AP_tax|AR_tax)/) ) { + if (SL::DB::Manager::Tax->find_by(chart_id => $form->{id})) { + $form->{orphaned} = 0; + } + } + my $ChartTypeIsAccount = ($form->{charttype} eq "A") ? "1":""; + my $AccountIsPosted = ($form->{orphaned} ) ? "":"1"; - $form->isblank("accno", $locale->text('Account Number missing!')); - $form->isblank("category", $locale->text('Account Type missing!')); - - $form->redirect($locale->text('Account saved!')) if (AM->save_account(\%myconfig, \%$form)); - $form->error($locale->text('Cannot save account!')); + setup_am_edit_account_action_bar(); - $lxdebug->leave_sub(); -} + $form->header(); + my $parameters_ref = { + ChartTypeIsAccount => $ChartTypeIsAccount, + AccountIsPosted => $AccountIsPosted, + select_category => $select_category, + all_charttypes => \@all_charttypes, + selected_charttype => $selected_charttype, + select_bwa => $select_bwa, + select_bilanz => $select_bilanz, + select_eur => $select_eur, + select_er => $select_er, + }; -sub list_account { - $lxdebug->enter_sub(); + # Ausgabe des Templates + print($form->parse_html_template('am/edit_accounts', $parameters_ref)); - CA->all_accounts(\%myconfig, \%$form); + $main::lxdebug->leave_sub(); +} - $form->{title} = $locale->text('Chart of Accounts'); - - # construct callback - $callback = "$form->{script}?action=list_account&path=$form->{path}&login=$form->{login}&password=$form->{password}"; +sub save_account { + $main::lxdebug->enter_sub(); - @column_index = qw(accno gifi_accno description debit credit link); + my $form = $main::form; + my %myconfig = %main::myconfig; + my $locale = $main::locale; - $column_header{accno} = qq||.$locale->text('Account').qq||; - $column_header{gifi_accno} = qq||.$locale->text('GIFI').qq||; - $column_header{description} = qq||.$locale->text('Description').qq||; - $column_header{debit} = qq||.$locale->text('Debit').qq||; - $column_header{credit} = qq||.$locale->text('Credit').qq||; - $column_header{link} = qq||.$locale->text('Link').qq||; + $main::auth->assert('config'); + $form->isblank("accno", $locale->text('Account Number missing!')); + $form->isblank("description", $locale->text('Account Description missing!')); - $form->header; - $colspan = $#column_index + 1; - - print qq| - - - - - - - - -|; - - map { print "$column_header{$_}\n" } @column_index; - - print qq| - -|; - - # escape callback - $callback = $form->escape($callback); - - foreach $ca (@{ $form->{CA} }) { - - $ca->{debit} = " "; - $ca->{credit} = " "; + if ($form->{charttype} eq 'A'){ + $form->isblank("category", $locale->text('Account Type missing!')); - if ($ca->{amount} > 0) { - $ca->{credit} = $form->format_amount(\%myconfig, $ca->{amount}, 2, " "); + my $found_valid_taxkey = 0; + foreach my $i (0 .. 10) { # 10 is maximum count of taxkeys in form + if ($form->{"taxkey_startdate_$i"} and !$form->{"taxkey_del_$i"}) { + $found_valid_taxkey = 1; + last; + } } - if ($ca->{amount} < 0) { - $ca->{debit} = $form->format_amount(\%myconfig, -$ca->{amount}, 2, " "); - } - - $ca->{link} =~ s/:/
/og; - - if ($ca->{charttype} eq "H") { - print qq||; - - $column_data{accno} = qq||; - $column_data{gifi_accno} = qq||; - $column_data{description} = qq||; - $column_data{debit} = qq||; - $column_data{credit} = qq| |; - $column_data{link} = qq||; - - } else { - $i++; $i %= 2; - print qq| -|; - $column_data{accno} = qq||; - $column_data{gifi_accno} = qq||; - $column_data{description} = qq||; - $column_data{debit} = qq||; - $column_data{credit} = qq||; - $column_data{link} = qq||; - + if ($found_valid_taxkey == 0) { + $form->error($locale->text('A valid taxkey is missing!')); } - - map { print "$column_data{$_}\n" } @column_index; - - print "\n"; } - - print qq| - -
$form->{title}
{script}?action=edit_account&id=$ca->{id}&path=$form->{path}&login=$form->{login}&password=$form->{password}&callback=$callback>$ca->{accno}{script}?action=edit_gifi&accno=$ca->{gifi_accno}&path=$form->{path}&login=$form->{login}&password=$form->{password}&callback=$callback>$ca->{gifi_accno} $ca->{description}    
{script}?action=edit_account&id=$ca->{id}&path=$form->{path}&login=$form->{login}&password=$form->{password}&callback=$callback>$ca->{accno}{script}?action=edit_gifi&accno=$ca->{gifi_accno}&path=$form->{path}&login=$form->{login}&password=$form->{password}&callback=$callback>$ca->{gifi_accno} $ca->{description} $ca->{debit}$ca->{credit}$ca->{link} 

- - -|; + $form->redirect($locale->text('Account saved!')) + if (AM->save_account(\%myconfig, \%$form)); + $form->error($locale->text('Cannot save account!')); - $lxdebug->leave_sub(); + $main::lxdebug->leave_sub(); } +sub save_as_new_account { + $main::lxdebug->enter_sub(); -sub delete_account { - $lxdebug->enter_sub(); + my $form = $main::form; + my %myconfig = %main::myconfig; + my $locale = $main::locale; + $main::auth->assert('config'); - $form->{title} = $locale->text('Delete Account'); + $form->isblank("accno", $locale->text('Account Number missing!')); + $form->isblank("description", $locale->text('Account Description missing!')); - foreach $id (qw(inventory_accno_id income_accno_id expense_accno_id fxgain_accno_id fxloss_accno_id)) { - if ($form->{id} == $form->{$id}) { - $form->error($locale->text('Cannot delete default account!')); + if ($form->{charttype} eq 'A'){ + $form->isblank("category", $locale->text('Account Type missing!')); + } + + for my $taxkey (0 .. 9) { + if ($form->{"taxkey_id_$taxkey"}) { + $form->{"taxkey_id_$taxkey"} = "NEW"; } } - $form->redirect($locale->text('Account deleted!')) if (AM->delete_account(\%myconfig, \%$form)); - $form->error($locale->text('Cannot delete account!')); + $form->{id} = 0; + $form->redirect($locale->text('Account saved!')) + if (AM->save_account(\%myconfig, \%$form)); + $form->error($locale->text('Cannot save account!')); - $lxdebug->leave_sub(); + $main::lxdebug->leave_sub(); } +sub list_account { + $main::lxdebug->enter_sub(); -sub list_gifi { - $lxdebug->enter_sub(); - + my $form = $main::form; + my %myconfig = %main::myconfig; + my $locale = $main::locale; - @{ $form->{fields} } = (accno, description); - $form->{table} = "gifi"; - $form->{sortorder} = "accno"; - - AM->gifi_accounts(\%myconfig, \%$form); + $main::auth->assert('config'); - $form->{title} = $locale->text('GIFI'); - - # construct callback - $callback = "$form->{script}?action=list_gifi&path=$form->{path}&login=$form->{login}&password=$form->{password}"; + $form->{callback} = build_std_url('action=list_account'); + my $link_edit_account = build_std_url('action=edit_account', 'callback'); - @column_index = qw(accno description); + CA->all_accounts(\%myconfig, \%$form); - $column_header{accno} = qq||.$locale->text('GIFI').qq||; - $column_header{description} = qq||.$locale->text('Description').qq||; + foreach my $ca (@{ $form->{CA} }) { + $ca->{debit} = ""; + $ca->{credit} = ""; - $form->header; - $colspan = $#column_index + 1; - - print qq| - - - - - - - - -|; - - map { print "$column_header{$_}\n" } @column_index; - - print qq| - -|; - - # escape callback - $callback = $form->escape($callback); - - foreach $ca (@{ $form->{ALL} }) { - - $i++; $i %= 2; - - print qq| -|; - - $column_data{accno} = qq||; - $column_data{description} = qq||; - - map { print "$column_data{$_}\n" } @column_index; - - print "\n"; + if ($ca->{amount} > 0) { + $ca->{credit} = $form->format_amount(\%myconfig, $ca->{amount}, 2); + } + if ($ca->{amount} < 0) { + $ca->{debit} = $form->format_amount(\%myconfig, -1 * $ca->{amount}, 2); + } + $ca->{heading} = ( $ca->{charttype} eq 'H' ) ? 1:''; + $ca->{link_edit_account} = $link_edit_account . '&id=' . E($ca->{id}); } - - print qq| - - - -
$form->{title}
{script}?action=edit_gifi&coa=1&accno=$ca->{accno}&path=$form->{path}&login=$form->{login}&password=$form->{password}&callback=$callback>$ca->{accno}$ca->{description} 

- - - -|; - - $lxdebug->leave_sub(); -} + $::request->{layout}->use_stylesheet("list_accounts.css"); + $form->{title} = $locale->text('Chart of Accounts'); -sub add_gifi { - $lxdebug->enter_sub(); + $form->header; - $form->{title} = "Add"; - - # construct callback - $form->{callback} = "$form->{script}?action=list_gifi&path=$form->{path}&login=$form->{login}&password=$form->{password}"; - $form->{coa} = 1; - - &gifi_header; - &gifi_footer; - - $lxdebug->leave_sub(); -} + my $parameters_ref = { + # hidden_variables => $_hidden_variables_ref, + }; + # Ausgabe des Templates + print($form->parse_html_template('am/list_accounts', $parameters_ref)); -sub edit_gifi { - $lxdebug->enter_sub(); + $main::lxdebug->leave_sub(); - - $form->{title} = "Edit"; - - AM->get_gifi(\%myconfig, \%$form); - - &gifi_header; - &gifi_footer; - - $lxdebug->leave_sub(); } -sub gifi_header { - $lxdebug->enter_sub(); - +sub list_account_details { +# Ajax Funktion aus list_account_details + $main::lxdebug->enter_sub(); - $form->{title} = $locale->text("$form->{title} GIFI"); - -# $locale->text('Add GIFI') -# $locale->text('Edit GIFI') - - $form->{description} =~ s/\"/"/g; - - $form->header; - - print qq| - - -
{script}> - -{accno}> - - - - - - - - - - - - - -
$form->{title}
- - - - - - - - - -
|.$locale->text('GIFI').qq|{accno}>
|.$locale->text('Description').qq|
-

-|; - - $lxdebug->leave_sub(); -} + my $form = $main::form; + my %myconfig = %main::myconfig; + my $locale = $main::locale; + $main::auth->assert('config'); -sub gifi_footer { - $lxdebug->enter_sub(); + my $chart_id = $form->{args}; + CA->all_accounts(\%myconfig, \%$form, $chart_id); - print qq| + foreach my $ca (@{ $form->{CA} }) { - - -{path}> -{login}> -{password}> - -
|; + $ca->{debit} = " "; + $ca->{credit} = " "; - if ($form->{coa}) { - print qq| - -|; + if ($ca->{amount} > 0) { + $ca->{credit} = + $form->format_amount(\%myconfig, $ca->{amount}, 2, " "); + } + if ($ca->{amount} < 0) { + $ca->{debit} = + $form->format_amount(\%myconfig, -1 * $ca->{amount}, 2, " "); + } - if ($form->{accno} && $form->{orphaned}) { - print qq||; + my @links = split( q{:}, $ca->{link}); + + $ca->{link} = q{}; + + foreach my $link (@links){ + $link = ( $link eq 'AR') ? $locale->text('Account Link AR') + : ( $link eq 'AP') ? $locale->text('Account Link AP') + : ( $link eq 'IC') ? $locale->text('Account Link IC') + : ( $link eq 'AR_amount' ) ? $locale->text('Account Link AR_amount') + : ( $link eq 'AR_paid' ) ? $locale->text('Account Link AR_paid') + : ( $link eq 'AR_tax' ) ? $locale->text('Account Link AR_tax') + : ( $link eq 'AP_amount' ) ? $locale->text('Account Link AP_amount') + : ( $link eq 'AP_paid' ) ? $locale->text('Account Link AP_paid') + : ( $link eq 'AP_tax' ) ? $locale->text('Account Link AP_tax') + : ( $link eq 'IC_sale' ) ? $locale->text('Account Link IC_sale') + : ( $link eq 'IC_cogs' ) ? $locale->text('Account Link IC_cogs') + : ( $link eq 'IC_taxpart' ) ? $locale->text('Account Link IC_taxpart') + : ( $link eq 'IC_income' ) ? $locale->text('Account Link IC_income') + : ( $link eq 'IC_expense' ) ? $locale->text('Account Link IC_expense') + : ( $link eq 'IC_taxservice' ) ? $locale->text('Account Link IC_taxservice') + : $locale->text('Unknown Link') . ': ' . $link; + $ca->{link} .= ($link ne '') ? "[$link] ":''; } - } - if ($form->{menubar}) { - require "$form->{path}/menu.pl"; - &menubar; + $ca->{category} = ($ca->{category} eq 'A') ? $locale->text('Account Category A') + : ($ca->{category} eq 'E') ? $locale->text('Account Category E') + : ($ca->{category} eq 'L') ? $locale->text('Account Category L') + : ($ca->{category} eq 'I') ? $locale->text('Account Category I') + : ($ca->{category} eq 'Q') ? $locale->text('Account Category Q') + : ($ca->{category} eq 'C') ? $locale->text('Account Category C') + : ($ca->{category} eq 'G') ? $locale->text('Account Category G') + : $locale->text('Unknown Category') . ': ' . $ca->{category}; } - print qq| -
- - - -|; - - $lxdebug->leave_sub(); -} - - -sub save_gifi { - $lxdebug->enter_sub(); + $form->{title} = $locale->text('Chart of Accounts'); + print $form->ajax_response_header, $form->parse_html_template('am/list_account_details'); - $form->isblank("accno", $locale->text('GIFI missing!')); - AM->save_gifi(\%myconfig, \%$form); - $form->redirect($locale->text('GIFI saved!')); + $main::lxdebug->leave_sub(); - $lxdebug->leave_sub(); } +sub delete_account { + $main::lxdebug->enter_sub(); -sub copy_to_coa { - $lxdebug->enter_sub(); - + my $form = $main::form; + my %myconfig = %main::myconfig; + my $locale = $main::locale; - $form->isblank("accno", $locale->text('GIFI missing!')); + $main::auth->assert('config'); - AM->save_gifi(\%myconfig, \%$form); + $form->{title} = $locale->text('Delete Account'); - delete $form->{id}; - $form->{gifi_accno} = $form->{accno}; - $form->{title} = "Add"; - $form->{charttype} = "A"; - - &account_header; - &form_footer; - - $lxdebug->leave_sub(); -} + foreach my $id ( + qw(inventory_accno_id income_accno_id expense_accno_id fxgain_accno_id fxloss_accno_id rndgain_accno_id rndloss_accno_id) + ) { + if ($form->{id} == $form->{$id}) { + $form->error($locale->text('Cannot delete default account!')); + } + } + $form->redirect($locale->text('Account deleted!')) + if (AM->delete_account(\%myconfig, \%$form)); + $form->error($locale->text('Cannot delete account!')); -sub delete_gifi { - $lxdebug->enter_sub(); + $main::lxdebug->leave_sub(); +} +sub _build_cfg_options { + my $form = $main::form; + my %myconfig = %main::myconfig; - AM->delete_gifi(\%myconfig, \%$form); - $form->redirect($locale->text('GIFI deleted!')); + my $idx = shift; + my $array = uc($idx) . 'S'; - $lxdebug->leave_sub(); + $form->{$array} = []; + foreach my $item (@_) { + push @{ $form->{$array} }, { + 'name' => $item, + 'value' => $item, + 'selected' => $item eq $myconfig{$idx}, + }; + } } +sub config { + $main::lxdebug->enter_sub(); + + my $form = $main::form; + my %myconfig = %main::myconfig; + my $locale = $main::locale; + + _build_cfg_options('dateformat', qw(mm/dd/yy dd/mm/yy dd.mm.yy yyyy-mm-dd)); + _build_cfg_options('timeformat', qw(hh:mm hh:mm:ss)); + _build_cfg_options('numberformat', ('1,000.00', '1000.00', '1.000,00', '1000,00', "1'000.00")); + + my @formats = (); + if ($::lx_office_conf{print_templates}->{opendocument} + && $::lx_office_conf{applications}->{openofficeorg_writer} && (-x $::lx_office_conf{applications}->{openofficeorg_writer}) + && $::lx_office_conf{applications}->{xvfb} && (-x $::lx_office_conf{applications}->{xvfb})) { + push(@formats, { "name" => $locale->text("PDF (OpenDocument/OASIS)"), + "value" => "opendocument_pdf" }); + } + if ($::lx_office_conf{print_templates}->{latex}) { + push(@formats, { "name" => $locale->text("PDF"), "value" => "pdf" }); + } + push(@formats, { "name" => "HTML", "value" => "html" }); + if ($::lx_office_conf{print_templates}->{latex}) { + push(@formats, { "name" => $locale->text("Postscript"), + "value" => "postscript" }); + } + if ($::lx_office_conf{print_templates}->{opendocument}) { + push(@formats, { "name" => $locale->text("OpenDocument/OASIS"), + "value" => "opendocument" }); + } -sub add_department { - $lxdebug->enter_sub(); + if (!$myconfig{"template_format"}) { + $myconfig{"template_format"} = "pdf"; + } + $form->{TEMPLATE_FORMATS} = []; + foreach my $item (@formats) { + push @{ $form->{TEMPLATE_FORMATS} }, { + 'name' => $item->{name}, + 'value' => $item->{value}, + 'selected' => $item->{value} eq $myconfig{template_format}, + }; + } + if (!$myconfig{"default_media"}) { + $myconfig{"default_media"} = "screen"; + } - $form->{title} = "Add"; - $form->{role} = "P"; - - $form->{callback} = "$form->{script}?action=add_department&path=$form->{path}&login=$form->{login}&password=$form->{password}" unless $form->{callback}; + my %selected = ($myconfig{"default_media"} => "selected"); + $form->{MEDIA} = [ + { 'name' => $locale->text('Screen'), 'value' => 'screen', 'selected' => $selected{screen}, }, + { 'name' => $locale->text('Printer'), 'value' => 'printer', 'selected' => $selected{printer}, }, + { 'name' => $locale->text('Queue'), 'value' => 'queue', 'selected' => $selected{queue}, }, + ]; - &department_header; - &form_footer; + $form->{PRINTERS} = SL::DB::Manager::Printer->get_all_sorted; - $lxdebug->leave_sub(); -} + my %countrycodes = User->country_codes; + $form->{COUNTRYCODES} = []; + foreach my $countrycode (sort { $countrycodes{$a} cmp $countrycodes{$b} } keys %countrycodes) { + push @{ $form->{COUNTRYCODES} }, { + 'name' => $countrycodes{$countrycode}, + 'value' => $countrycode, + 'selected' => $countrycode eq $myconfig{countrycode}, + }; + } -sub edit_department { - $lxdebug->enter_sub(); + $form->{STYLESHEETS} = []; + foreach my $item (qw(lx-office-erp.css kivitendo.css)) { + push @{ $form->{STYLESHEETS} }, { + 'name' => $item, + 'value' => $item, + 'selected' => $item eq $myconfig{stylesheet}, + }; + } + $myconfig{show_form_details} = 1 unless (defined($myconfig{show_form_details})); + $form->{CAN_CHANGE_PASSWORD} = $main::auth->can_change_password(); + $form->{todo_cfg} = { TODO->get_user_config('login' => $::myconfig{login}) }; - $form->{title} = "Edit"; + $form->{title} = $locale->text('Edit Preferences for #1', $::myconfig{login}); - AM->get_department(\%myconfig, \%$form); + setup_am_config_action_bar(); - &department_header; - &form_footer; + $form->header(); - $lxdebug->leave_sub(); -} + $form->{full_signature} = $form->create_email_signature(); + print $form->parse_html_template('am/config'); -sub list_department { - $lxdebug->enter_sub(); + $main::lxdebug->leave_sub(); +} +sub save_preferences { + $main::lxdebug->enter_sub(); - AM->departments(\%myconfig, \%$form); + my $form = $main::form; + my %myconfig = %main::myconfig; + my $locale = $main::locale; - $form->{callback} = "$form->{script}?action=list_department&path=$form->{path}&login=$form->{login}&password=$form->{password}"; + $form->{stylesheet} = $form->{usestylesheet}; - $callback = $form->escape($form->{callback}); - - $form->{title} = $locale->text('Departments'); + TODO->save_user_config('login' => $::myconfig{login}, %{ $form->{todo_cfg} || { } }); - @column_index = qw(description cost profit); + if (AM->save_preferences($form)) { + if ($::auth->can_change_password() + && defined $form->{new_password} + && ($form->{new_password} ne '********')) { + my $verifier = SL::Auth::PasswordPolicy->new; + my $result = $verifier->verify($form->{new_password}); - $column_header{description} = qq||.$locale->text('Description').qq||; - $column_header{cost} = qq||.$locale->text('Cost Center').qq||; - $column_header{profit} = qq||.$locale->text('Profit Center').qq||; + if ($result != SL::Auth::PasswordPolicy->OK()) { + $form->error($::locale->text('The settings were saved, but the password was not changed.') . ' ' . join(' ', $verifier->errors($result))); + } - $form->header; + $::auth->change_password($::myconfig{login}, $form->{new_password}); + } - print qq| - - - - - - - - - - - - - -
$form->{title}
- - -|; - - map { print "$column_header{$_}\n" } @column_index; - - print qq| - -|; - - foreach $ref (@{ $form->{ALL} }) { - - $i++; $i %= 2; - - print qq| - -|; - - $costcenter = ($ref->{role} eq "C") ? "X" : ""; - $profitcenter = ($ref->{role} eq "P") ? "X" : ""; - - $column_data{description} = qq||; - $column_data{cost} = qq||; - $column_data{profit} = qq||; - - map { print "$column_data{$_}\n" } @column_index; - - print qq| - -|; + $form->redirect($locale->text('Preferences saved!')); } - print qq| -
{script}?action=edit_department&id=$ref->{id}&path=$form->{path}&login=$form->{login}&password=$form->{password}&callback=$callback>$ref->{description}$costcenter$profitcenter
-

+ $form->error($locale->text('Cannot save preferences!')); -
-
{script}> + $main::lxdebug->leave_sub(); +} - +sub audit_control { + $::lxdebug->enter_sub; + $::auth->assert('config'); - + $::form->{title} = $::locale->text('Audit Control'); -{path}> -{login}> -{password}> + AM->closedto(\%::myconfig, $::form); -|; + setup_am_audit_control_action_bar(); - if ($form->{menubar}) { - require "$form->{path}/menu.pl"; - &menubar; - } + $::form->header; + print $::form->parse_html_template('am/audit_control'); - print qq| -
- - - -|; - - $lxdebug->leave_sub(); + $::lxdebug->leave_sub; } +sub doclose { + $main::lxdebug->enter_sub(); -sub department_header { - $lxdebug->enter_sub(); - - - $form->{title} = $locale->text("$form->{title} Department"); + my $form = $main::form; + my %myconfig = %main::myconfig; + my $locale = $main::locale; -# $locale->text('Add Department') -# $locale->text('Edit Department') + $main::auth->assert('config'); - $form->{description} =~ s/\"/"/g; + AM->closebooks(\%myconfig, \%$form); - if (($rows = $form->numtextrows($form->{description}, 60)) > 1) { - $description = qq||; + if ($form->{closedto}) { + $form->redirect( + $locale->text('Books closed up to') . " " + . $locale->date(\%myconfig, $form->{closedto}, 1)); } else { - $description = qq||; + $form->redirect($locale->text('Books are open')); } - $costcenter = "checked" if $form->{role} eq "C"; - $profitcenter = "checked" if $form->{role} eq "P"; - - $form->header; - - print qq| - - -
{script}> - -{id}> - - - - - - - - - - - - - - - - - -
$form->{title}
|.$locale->text('Description').qq|$description
|.$locale->text('Cost Center').qq| - |.$locale->text('Profit Center').qq| -

-|; - - $lxdebug->leave_sub(); + $main::lxdebug->leave_sub(); } +sub add_unit { + $::auth->assert('config'); -sub save_department { - $lxdebug->enter_sub(); - - - $form->isblank("description", $locale->text('Description missing!')); - AM->save_department(\%myconfig, \%$form); - $form->redirect($locale->text('Department saved!')); - - $lxdebug->leave_sub(); -} + # my $units = AM->retrieve_units(\%::myconfig, $::form, "resolved_"); + # # AM->units_in_use(\%::myconfig, $::form, $units); + # $units->{$_}->{BASE_UNIT_DDBOX} = AM->unit_select_data($units, $units->{$_}->{base_unit}, 1) for keys %{$units}; -sub delete_department { - $lxdebug->enter_sub(); + my @languages = @{ SL::DB::Manager::Language->get_all_sorted }; + my $units = AM->retrieve_units(\%::myconfig, $::form); + my $ddbox = AM->unit_select_data($units, undef, 1); - AM->delete_department(\%myconfig, \%$form); - $form->redirect($locale->text('Department deleted!')); + setup_am_add_unit_action_bar(); - $lxdebug->leave_sub(); + $::form->{title} = $::locale->text("Add unit"); + $::form->header(); + print($::form->parse_html_template("am/add_unit", { + NEW_BASE_UNIT_DDBOX => $ddbox, + LANGUAGES => \@languages, + })); } +sub edit_units { + $main::lxdebug->enter_sub(); -sub add_business { - $lxdebug->enter_sub(); + my $form = $main::form; + my %myconfig = %main::myconfig; + my $locale = $main::locale; + $main::auth->assert('config'); - $form->{title} = "Add"; - - $form->{callback} = "$form->{script}?action=add_business&path=$form->{path}&login=$form->{login}&password=$form->{password}" unless $form->{callback}; + my $units = AM->retrieve_units(\%myconfig, $form, "resolved_"); + AM->units_in_use(\%myconfig, $form, $units); + map({ $units->{$_}->{"BASE_UNIT_DDBOX"} = AM->unit_select_data($units, $units->{$_}->{"base_unit"}, 1); } keys(%{$units})); - &business_header; - &form_footer; + my @languages = @{ SL::DB::Manager::Language->get_all_sorted }; - $lxdebug->leave_sub(); -} - - -sub edit_business { - $lxdebug->enter_sub(); + my @unit_list = sort({ $a->{"sortkey"} <=> $b->{"sortkey"} } values(%{$units})); + my $i = 1; + foreach (@unit_list) { + $_->{"factor"} = $form->format_amount(\%myconfig, $_->{"factor"} * 1) if ($_->{"factor"}); + $_->{"UNITLANGUAGES"} = []; + foreach my $lang (@languages) { + push(@{ $_->{"UNITLANGUAGES"} }, + { "idx" => $i, + "unit" => $_->{"name"}, + "language_id" => $lang->id, + "localized" => $_->{"LANGUAGES"}->{$lang->template_code}->{"localized"}, + "localized_plural" => $_->{"LANGUAGES"}->{$lang->template_code}->{"localized_plural"}, + }); + } + $i++; + } - $form->{title} = "Edit"; - - AM->get_business(\%myconfig, \%$form); + $units = AM->retrieve_units(\%myconfig, $form); + my $ddbox = AM->unit_select_data($units, undef, 1); - &business_header; + setup_am_edit_units_action_bar(); - $form->{orphaned} = 1; - &form_footer; + $form->{"title"} = $locale->text("Edit units"); + $form->header(); + print($form->parse_html_template("am/edit_units", + { "UNITS" => \@unit_list, + "NEW_BASE_UNIT_DDBOX" => $ddbox, + "LANGUAGES" => \@languages, + })); - $lxdebug->leave_sub(); + $main::lxdebug->leave_sub(); } +sub create_unit { + $main::lxdebug->enter_sub(); -sub list_business { - $lxdebug->enter_sub(); + my $form = $main::form; + my %myconfig = %main::myconfig; + my $locale = $main::locale; + $main::auth->assert('config'); - AM->business(\%myconfig, \%$form); + $form->isblank("new_name", $locale->text("The name is missing.")); + my $units = AM->retrieve_units(\%myconfig, $form); + my $all_units = AM->retrieve_units(\%myconfig, $form); + $form->show_generic_error($locale->text("A unit with this name does already exist.")) if ($all_units->{$form->{"new_name"}}); - $form->{callback} = "$form->{script}?action=list_business&path=$form->{path}&login=$form->{login}&password=$form->{password}"; + my ($base_unit, $factor); + if ($form->{"new_base_unit"}) { + $form->show_generic_error($locale->text("The base unit does not exist.")) unless (defined($units->{$form->{"new_base_unit"}})); - $callback = $form->escape($form->{callback}); - - $form->{title} = $locale->text('Type of Business'); + $form->isblank("new_factor", $locale->text("The factor is missing.")); + $factor = $form->parse_amount(\%myconfig, $form->{"new_factor"}); + $form->show_generic_error($locale->text("The factor is missing.")) unless ($factor); + $base_unit = $form->{"new_base_unit"}; + } - @column_index = qw(description discount customernumberinit); + my @languages; + foreach my $lang (@{ SL::DB::Manager::Language->get_all_sorted }) { + next unless ($form->{"new_localized_$lang->{id}"} || $form->{"new_localized_plural_$lang->{id}"}); + push(@languages, { "id" => $lang->id, + "localized" => $form->{"new_localized_" . $lang->id}, + "localized_plural" => $form->{"new_localized_plural_" . $lang->id}, + }); + } - $column_header{description} = qq||.$locale->text('Description').qq||; - $column_header{discount} = qq||.$locale->text('Discount').qq| %|; - $column_header{customernumberinit} = qq||.$locale->text('Customernumberinit').qq||; + AM->add_unit(\%myconfig, $form, $form->{"new_name"}, $base_unit, $factor, \@languages); - $form->header; + flash_later('info', $locale->text("The unit has been added.")); - print qq| - - - - - - - - - - - - - -
$form->{title}
- - -|; - - map { print "$column_header{$_}\n" } @column_index; - - print qq| - -|; - - foreach $ref (@{ $form->{ALL} }) { - - $i++; $i %= 2; - - print qq| - -|; - - $discount = $form->format_amount(\%myconfig, $ref->{discount} * 100, 1, " "); - $description = ($ref->{salesman}) ? "$ref->{description}" : "$ref->{description}"; - $column_data{description} = qq||; - $column_data{discount} = qq||; - $column_data{customernumberinit} = qq||; - - map { print "$column_data{$_}\n" } @column_index; - - print qq| - -|; - } + print $form->redirect_header('am.pl?action=edit_units'); - print qq| -
{script}?action=edit_business&id=$ref->{id}&path=$form->{path}&login=$form->{login}&password=$form->{password}&callback=$callback>$description$discount$ref->{customernumberinit}
-

+ $main::lxdebug->leave_sub(); +} -
-{script}> +sub set_unit_languages { + $main::lxdebug->enter_sub(); - + my $form = $main::form; - + $main::auth->assert('config'); -{path}> -{login}> -{password}> + my ($unit, $languages, $idx) = @_; -|; + $unit->{"LANGUAGES"} = []; - if ($form->{menubar}) { - require "$form->{path}/menu.pl"; - &menubar; + foreach my $lang (@{$languages}) { + push(@{ $unit->{"LANGUAGES"} }, + { "id" => $lang->id, + "localized" => $form->{"localized_${idx}_" . $lang->id}, + "localized_plural" => $form->{"localized_plural_${idx}_" . $lang->id}, + }); } - print qq| - -
- - - -|; - - $lxdebug->leave_sub(); + $main::lxdebug->leave_sub(); } +sub save_unit { + $main::lxdebug->enter_sub(); -sub business_header { - $lxdebug->enter_sub(); + my $form = $main::form; + my %myconfig = %main::myconfig; + my $locale = $main::locale; + $main::auth->assert('config'); - $form->{title} = $locale->text("$form->{title} Business"); - $form->{salesman} = "checked" if $form->{salesman}; -# $locale->text('Add Business') -# $locale->text('Edit Business') + my $old_units = AM->retrieve_units(\%myconfig, $form, "resolved_"); + AM->units_in_use(\%myconfig, $form, $old_units); - $form->{description} =~ s/\"/"/g; - $form->{discount} = $form->format_amount(\%myconfig, $form->{discount} * 100); + my @languages = @{ SL::DB::Manager::Language->get_all_sorted }; - $form->header; + my $new_units = {}; + my @delete_units = (); + foreach my $i (1..($form->{"rowcount"} * 1)) { + my $old_unit = $old_units->{$form->{"old_name_$i"}}; + if (!$old_unit) { + $form->show_generic_error(sprintf($locale->text("The unit in row %d has been deleted in the meantime."), $i)); + } - print qq| - - -
{script}> - -{id}> - - - - - - - - - - - - - - - - - - - - - - - - - -
$form->{title}
|.$locale->text('Type of Business').qq|
|.$locale->text('Discount').qq| %{discount}>
|.$locale->text('Customernumberinit').qq|{customernumberinit}>
|.$locale->text('Salesman').qq|{salesman}>

-|; - - $lxdebug->leave_sub(); -} + if ($form->{"unchangeable_$i"}) { + $new_units->{$form->{"old_name_$i"}} = $old_units->{$form->{"old_name_$i"}}; + $new_units->{$form->{"old_name_$i"}}->{"unchanged_unit"} = 1; + set_unit_languages($new_units->{$form->{"old_name_$i"}}, \@languages, $i); + next; + } + if ($old_unit->{"in_use"}) { + $form->show_generic_error(sprintf($locale->text("The unit in row %d has been used in the meantime and cannot be changed anymore."), $i)); + } -sub save_business { - $lxdebug->enter_sub(); + if ($form->{"delete_$i"}) { + push(@delete_units, $old_unit->{"name"}); + next; + } + $form->isblank("name_$i", sprintf($locale->text("The name is missing in row %d."), $i)); - $form->isblank("description", $locale->text('Description missing!')); - AM->save_business(\%myconfig, \%$form); - $form->redirect($locale->text('Business saved!')); + $form->show_generic_error(sprintf($locale->text("The name in row %d has already been used before."), $i)) if ($new_units->{$form->{"name_$i"}}); + my %h = map({ $_ => $form->{"${_}_$i"} } qw(name base_unit factor old_name)); + $new_units->{$form->{"name_$i"}} = \%h; + $new_units->{$form->{"name_$i"}}->{"row"} = $i; + set_unit_languages($new_units->{$form->{"old_name_$i"}}, \@languages, $i); + } - $lxdebug->leave_sub(); -} + foreach my $unit (values(%{$new_units})) { + next unless ($unit->{"old_name"}); + if ($unit->{"base_unit"}) { + $form->show_generic_error(sprintf($locale->text("The base unit does not exist or it is about to be deleted in row %d."), $unit->{"row"})) + unless (defined($new_units->{$unit->{"base_unit"}})); + $unit->{"factor"} = $form->parse_amount(\%myconfig, $unit->{"factor"}); + $form->show_generic_error(sprintf($locale->text("The factor is missing in row %d."), $unit->{"row"})) unless ($unit->{"factor"} >= 1.0); + } else { + $unit->{"base_unit"} = undef; + $unit->{"factor"} = undef; + } + } + foreach my $unit (values(%{$new_units})) { + next if ($unit->{"unchanged_unit"}); + + map({ $_->{"seen"} = 0; } values(%{$new_units})); + my $new_unit = $unit; + while ($new_unit->{"base_unit"}) { + $new_unit->{"seen"} = 1; + $new_unit = $new_units->{$new_unit->{"base_unit"}}; + if ($new_unit->{"seen"}) { + $form->show_generic_error(sprintf($locale->text("The base unit relations must not contain loops (e.g. by saying that unit A's base unit is B, " . + "B's base unit is C and C's base unit is A) in row %d."), $unit->{"row"})); + } + } + } -sub delete_business { - $lxdebug->enter_sub(); + AM->save_units(\%myconfig, $form, $new_units, \@delete_units); + flash_later('info', $locale->text("The units have been saved.")); - AM->delete_business(\%myconfig, \%$form); - $form->redirect($locale->text('Business deleted!')); + print $form->redirect_header('am.pl?action=edit_units'); - $lxdebug->leave_sub(); + $main::lxdebug->leave_sub(); } +sub show_history_search { + $main::lxdebug->enter_sub(); + my $form = $main::form; + my $locale = $main::locale; -sub add_sic { - $lxdebug->enter_sub(); + $main::auth->assert('config'); + setup_am_show_history_search_action_bar(); - $form->{title} = "Add"; - - $form->{callback} = "$form->{script}?action=add_sic&path=$form->{path}&login=$form->{login}&password=$form->{password}" unless $form->{callback}; + $form->{title} = $locale->text("History Search"); + $form->header(); - &sic_header; - &form_footer; + print $form->parse_html_template("common/search_history"); - $lxdebug->leave_sub(); + $main::lxdebug->leave_sub(); } +sub show_am_history { + $main::lxdebug->enter_sub(); + + my $form = $main::form; + my %myconfig = %main::myconfig; + my $locale = $main::locale; + + $main::auth->assert('config'); + + my $callback = build_std_url(qw(action einschraenkungen fromdate todate mitarbeiter searchid what2search)); + $form->{order} ||= 'h.itime--1'; + + # my %search = ( "Artikelnummer" => "parts", + # "Kundennummer" => "customer", + # "Lieferantennummer" => "vendor", + # "Projektnummer" => "project", + # "Auftragsnummer" => "oe", + # "Angebotsnummer" => "oe", + # "Eingangsrechnungnummer" => "ap", + # "Ausgangsrechnungnummer" => "ar", + # "Mahnungsnummer" => "dunning", + # "Buchungsnummer" => "gl", + # ); + + my %searchNo = ( "Artikelnummer" => "partnumber", + "Kundennummer" => "customernumber", + "Lieferantennummer" => "vendornumber", + "Projektnummer" => "projectnumber", + "Auftragsnummer" => "ordnumber", + "Angebotsnummer" => "quonumber", + "Eingangsrechnungnummer" => "invnumber", + "Ausgangsrechnungnummer" => "invnumber", + "Mahnungsnummer" => "dunning_id", + "Buchungsnummer" => "gltransaction" + ); + + my $dbh = $form->dbconnect(\%myconfig); + + my $restriction; + $restriction = qq| AND (| . join(' OR ', map { " addition = " . $dbh->quote($_) } split(m/\,/, $form->{einschraenkungen})) . qq|)| if $form->{einschraenkungen}; + $restriction .= qq| AND h.itime::date >= | . conv_dateq($form->{fromdate}) if $form->{fromdate}; + $restriction .= qq| AND h.itime::date <= | . conv_dateq($form->{todate}) if $form->{todate}; + if ($form->{mitarbeiter} =~ m/^\d+$/) { + $restriction .= qq| AND employee_id = | . $form->{mitarbeiter}; + } elsif ($form->{mitarbeiter}) { + $restriction .= qq| AND employee_id = (SELECT id FROM employee WHERE name ILIKE | . $dbh->quote('%' . $form->{mitarbeiter} . '%') . qq|)|; + } -sub edit_sic { - $lxdebug->enter_sub(); - + my $snumbers_where = ''; + my $snumbers_value; + if ($form->{'searchid'}) { + $snumbers_where = ' WHERE snumbers = ?'; + $snumbers_value = $searchNo{$form->{'what2search'}} . '_' . $form->{'searchid'}; + } else { + $snumbers_where = ' WHERE snumbers ~ ?'; + $snumbers_value = '^' . $searchNo{$form->{'what2search'}}; + } + my $query = qq|SELECT trans_id AS id FROM history_erp $snumbers_where|; - $form->{title} = "Edit"; + my @ids = grep { $_ * 1 } selectall_array_query($form, $dbh, $query, $snumbers_value); + my $daten .= shift @ids; + if (scalar(@ids) > 0 ) { + $daten .= ' OR trans_id IN (' . join(',', @ids) . ')'; + } + my ($sort, $sortby) = split(/\-\-/, $form->{order}); + $sort =~ s/.*\.(.*)$/$1/; - AM->get_sic(\%myconfig, \%$form); + setup_am_show_am_history_action_bar(); - &sic_header; + $form->{title} = $locale->text("History Search"); + $form->header(); - $form->{orphaned} = 1; - &form_footer; + print $form->parse_html_template("common/show_history", + { "DATEN" => $form->get_history($dbh, $daten, $restriction, $form->{order}), + "SUCCESS" => ($form->get_history($dbh, $daten, $restriction, $form->{order}) ne "0"), + "NONEWWINDOW" => 1, + uc($sort) => 1, + uc($sort) . "BY" => $sortby, + 'callback' => $callback, + }); + $dbh->disconnect(); - $lxdebug->leave_sub(); + $main::lxdebug->leave_sub(); } +sub add_tax { + $main::lxdebug->enter_sub(); -sub list_sic { - $lxdebug->enter_sub(); - - - AM->sic(\%myconfig, \%$form); - - $form->{callback} = "$form->{script}?action=list_sic&path=$form->{path}&login=$form->{login}&password=$form->{password}"; - - $callback = $form->escape($form->{callback}); - - $form->{title} = $locale->text('Standard Industrial Codes'); + my $form = $main::form; + my $locale = $main::locale; - @column_index = qw(code description); + $main::auth->assert('config'); - $column_header{code} = qq||.$locale->text('Code').qq||; - $column_header{description} = qq||.$locale->text('Description').qq||; + $form->{title} = $locale->text('Add'); - $form->header; - - print qq| - - - - - - - - - - - - - -
$form->{title}
- - -|; - - map { print "$column_header{$_}\n" } @column_index; - - print qq| - -|; - - foreach $ref (@{ $form->{ALL} }) { - - $i++; $i %= 2; - - if ($ref->{sictype} eq 'H') { - print qq| - -|; - $column_data{code} = qq||; - $column_data{description} = qq||; - - } else { - print qq| - -|; + $form->{callback} ||= "am.pl?action=add_tax"; - $column_data{code} = qq||; - $column_data{description} = qq||; + _get_taxaccount_selection(); - } - - map { print "$column_data{$_}\n" } @column_index; - - print qq| - -|; - } + $form->{asset} = 1; + $form->{liability} = 1; + $form->{equity} = 1; + $form->{revenue} = 1; + $form->{expense} = 1; + $form->{costs} = 1; - print qq| -
{script}?action=edit_sic&code=$ref->{code}&path=$form->{path}&login=$form->{login}&password=$form->{password}&callback=$callback>$ref->{code}$ref->{description}
{script}?action=edit_sic&code=$ref->{code}&path=$form->{path}&login=$form->{login}&password=$form->{password}&callback=$callback>$ref->{code}$ref->{description}
-

+ setup_am_edit_tax_action_bar(); + $form->header(); -
-{script}> + my $parameters_ref = { + LANGUAGES => SL::DB::Manager::Language->get_all_sorted, + }; - + # Ausgabe des Templates + print($form->parse_html_template('am/edit_tax', $parameters_ref)); - + $main::lxdebug->leave_sub(); +} -{path}> -{login}> -{password}> +sub edit_tax { + $main::lxdebug->enter_sub(); -|; + my $form = $main::form; + my %myconfig = %main::myconfig; + my $locale = $main::locale; - if ($form->{menubar}) { - require "$form->{path}/menu.pl"; - &menubar; - } + $main::auth->assert('config'); - print qq| -
- - - -|; - - $lxdebug->leave_sub(); -} + $form->{title} = $locale->text('Edit'); + AM->get_tax(\%myconfig, \%$form); -sub sic_header { - $lxdebug->enter_sub(); + _get_taxaccount_selection(); + $form->{asset} = $form->{chart_categories} =~ 'A' ? 1 : 0; + $form->{liability} = $form->{chart_categories} =~ 'L' ? 1 : 0; + $form->{equity} = $form->{chart_categories} =~ 'Q' ? 1 : 0; + $form->{revenue} = $form->{chart_categories} =~ 'I' ? 1 : 0; + $form->{expense} = $form->{chart_categories} =~ 'E' ? 1 : 0; + $form->{costs} = $form->{chart_categories} =~ 'C' ? 1 : 0; - $form->{title} = $locale->text("$form->{title} SIC"); + $form->{rate} = $form->format_amount(\%myconfig, $form->{rate}, 2); -# $locale->text('Add SIC') -# $locale->text('Edit SIC') + setup_am_edit_tax_action_bar(); + $form->header(); - $form->{code} =~ s/\"/"/g; - $form->{description} =~ s/\"/"/g; + my $parameters_ref = { + LANGUAGES => SL::DB::Manager::Language->get_all_sorted, + TAX => SL::DB::Manager::Tax->find_by(id => $form->{id}), + }; - $checked = ($form->{sictype} eq 'H') ? "checked" : ""; - - $form->header; + # Ausgabe des Templates + print($form->parse_html_template('am/edit_tax', $parameters_ref)); - print qq| - - -
{script}> - - -{code}> - - - - - - - - - - - - - - - - - - - - -
$form->{title}
|.$locale->text('Code').qq|{code}>
|.$locale->text('Heading').qq|
|.$locale->text('Description').qq|

-|; - - $lxdebug->leave_sub(); + $main::lxdebug->leave_sub(); } +sub list_tax { + $main::lxdebug->enter_sub(); -sub save_sic { - $lxdebug->enter_sub(); + my $form = $main::form; + my %myconfig = %main::myconfig; + my $locale = $main::locale; + $main::auth->assert('config'); - $form->isblank("code", $locale->text('Code missing!')); - $form->isblank("description", $locale->text('Description missing!')); - AM->save_sic(\%myconfig, \%$form); - $form->redirect($locale->text('SIC saved!')); + AM->taxes(\%myconfig, \%$form); - $lxdebug->leave_sub(); -} + map { $_->{rate} = $form->format_amount(\%myconfig, $_->{rate}, 2) } @{ $form->{TAX} }; + $form->{callback} = build_std_url('action=list_tax'); -sub delete_sic { - $lxdebug->enter_sub(); + $form->{title} = $locale->text('Tax-O-Matic'); + setup_am_list_tax_action_bar(); + $form->header(); - AM->delete_sic(\%myconfig, \%$form); - $form->redirect($locale->text('SIC deleted!')); + # Ausgabe des Templates + print($form->parse_html_template('am/list_tax')); - $lxdebug->leave_sub(); + $main::lxdebug->leave_sub(); } +sub _get_taxaccount_selection{ + $main::lxdebug->enter_sub(); + my $form = $main::form; + my %myconfig = %main::myconfig; -sub display_stylesheet { - $lxdebug->enter_sub(); + $main::auth->assert('config'); - - $form->{file} = "css/$myconfig{stylesheet}"; - &display_form; - - $lxdebug->leave_sub(); -} + AM->get_tax_accounts(\%myconfig, \%$form); + map { $_->{selected} = $form->{chart_id} == $_->{id} } @{ $form->{ACCOUNTS} }; -sub display_form { - $lxdebug->enter_sub(); + $main::lxdebug->leave_sub(); +} +sub save_tax { + $main::lxdebug->enter_sub(); - $form->{file} =~ s/^(.:)*?\/|\.\.\///g; - $form->{file} =~ s/^\/*//g; - $form->{file} =~ s/$userspath//; + my $form = $main::form; + my %myconfig = %main::myconfig; + my $locale = $main::locale; - $form->error("$!: $form->{file}") unless -f $form->{file}; + $main::auth->assert('config'); - AM->load_template(\%$form); + $form->error($locale->text('Taxkey missing!')) unless length($form->{taxkey}) != 0; + $form->error($locale->text('Taxdescription missing!')) unless length($form->{taxdescription}) != 0; + $form->error($locale->text('Taxrate missing!')) unless length($form->{rate}) != 0; - $form->{title} = $form->{file}; + $form->{rate} = $form->parse_amount(\%myconfig, $form->{rate}); - # if it is anything but html - if ($form->{file} !~ /\.html$/) { - $form->{body} = "
\n$form->{body}\n
"; + if ($form->{taxkey} == 0 and $form->{rate} > 0) { + $form->error($locale->text('Taxkey 0 is reserved for rate 0')); } - - $form->header; - print qq| - + if ( $form->{rate} < 0 || $form->{rate} >= 100 ) { + $form->error($locale->text('Tax Percent is a number between 0 and 100')); + } -$form->{body} + if ( $form->{rate} <= 0.99 && $form->{rate} > 0 ) { + $form->error($locale->text('Tax Percent is a number between 0 and 100')); + } -{script}> + my @translation_keys = grep { $_ =~ '^translation_\d+' } keys %$form; + $form->{translations} = { map { $_ =~ '^translation_(\d+)'; $1 => $form->{$_} } @translation_keys }; -{file}> - + AM->save_tax(\%myconfig, \%$form); + $form->redirect($locale->text('Tax saved!')); -{path}> -{login}> -{password}> + $main::lxdebug->leave_sub(); +} -|; +sub delete_tax { + $main::lxdebug->enter_sub(); - if ($form->{menubar}) { - require "$form->{path}/menu.pl"; - &menubar; - } + my $form = $main::form; + my %myconfig = %main::myconfig; + my $locale = $main::locale; - print qq| -
+ $main::auth->assert('config'); - - -|; + AM->delete_tax(\%myconfig, \%$form); + $form->redirect($locale->text('Tax deleted!')); - $lxdebug->leave_sub(); + $main::lxdebug->leave_sub(); } +sub add_warehouse { + $main::lxdebug->enter_sub(); -sub edit_template { - $lxdebug->enter_sub(); - + my $form = $main::form; + my $locale = $main::locale; - AM->load_template(\%$form); + $main::auth->assert('config'); - $form->{title} = $locale->text('Edit Template'); - # convert   to &nbsp; - $form->{body} =~ s/ /&nbsp;/gi; - + $form->{title} = $locale->text('Add Warehouse'); + $form->{callback} ||= build_std_url('action=add_warehouse'); - $form->header; - - print qq| - + setup_am_edit_warehouse_action_bar(); -
{script}> + $form->header(); + print $form->parse_html_template('am/edit_warehouse'); -{file}> - + $main::lxdebug->leave_sub(); +} -{path}> -{login}> -{password}> +sub edit_warehouse { + $main::lxdebug->enter_sub(); - + my $form = $main::form; + my %myconfig = %main::myconfig; + my $locale = $main::locale; - + $main::auth->assert('config'); -
-|; + AM->get_warehouse(\%myconfig, $form); - if ($form->{menubar}) { - require "$form->{path}/menu.pl"; - &menubar; - } + $form->get_lists('employees' => 'EMPLOYEES'); - print q| -
+ $form->{title} = $locale->text('Edit Warehouse'); + $form->{callback} ||= build_std_url('action=list_warehouses'); + setup_am_edit_warehouse_action_bar(id => $::form->{id}, in_use => any { $_->{in_use} } @{ $::form->{BINS} }); - - -|; + $form->header(); + print $form->parse_html_template('am/edit_warehouse'); - $lxdebug->leave_sub(); + $main::lxdebug->leave_sub(); } +sub edit_bins { + $::auth->assert('config'); -sub save_template { - $lxdebug->enter_sub(); + AM->get_warehouse(\%::myconfig, $::form); + $::form->{title} = $::locale->text('Edit Bins for Warehouse \'#1\'', $::form->{description}); + $::form->{callback} ||= build_std_url('action=list_warehouses'); - AM->save_template(\%$form); - $form->redirect($locale->text('Template saved!')); - - $lxdebug->leave_sub(); + setup_am_edit_bins_action_bar(id => $::form->{id}); + + $::form->header; + print $::form->parse_html_template('am/edit_bins'); } +sub list_warehouses { + $main::lxdebug->enter_sub(); -sub config { - $lxdebug->enter_sub(); + my $form = $main::form; + my %myconfig = %main::myconfig; + my $locale = $main::locale; + $main::auth->assert('config'); - # get defaults for account numbers and last numbers - AM->defaultaccounts(\%myconfig, \%$form); + AM->get_all_warehouses(\%myconfig, $form); - foreach $item (qw(mm-dd-yy mm/dd/yy dd-mm-yy dd/mm/yy dd.mm.yy yyyy-mm-dd)) { - $dateformat .= ($item eq $myconfig{dateformat}) ? "