X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;ds=inline;f=bin%2Fmozilla%2Fam.pl;h=8f380aa20238e34b61d311c3e4fafd3ed32d2aba;hb=2dacd2790bb5e0990ec5fe89a9d59370b018c25c;hp=02290c7b29c8617b1718830da64b3746acd09a31;hpb=c90ba6c8ad4b35f2b7cd3159165aab5f29b4e3d2;p=kivitendo-erp.git diff --git a/bin/mozilla/am.pl b/bin/mozilla/am.pl index 02290c7b2..8f380aa20 100644 --- a/bin/mozilla/am.pl +++ b/bin/mozilla/am.pl @@ -31,12 +31,14 @@ # #====================================================================== +use SL::Auth; use SL::AM; use SL::CA; use SL::Form; use SL::User; use SL::USTVA; use SL::Iconv; +use SL::TODO; use CGI::Ajax; use CGI; @@ -53,17 +55,18 @@ sub delete { call_sub("delete_$form->{type}"); } sub save { call_sub("save_$form->{type}"); } sub edit { call_sub("edit_$form->{type}"); } sub continue { call_sub($form->{"nextsub"}); } +sub save_as_new { call_sub("save_as_new_$form->{type}"); } sub add_account { $lxdebug->enter_sub(); + $auth->assert('config'); + $form->{title} = "Add"; $form->{charttype} = "A"; AM->get_account(\%myconfig, \%$form); - $form->{callback} = - "$form->{script}?action=list_account&login=$form->{login}&password=$form->{password}" - unless $form->{callback}; + $form->{callback} = "am.pl?action=list_account" unless $form->{callback}; &account_header; &form_footer; @@ -74,6 +77,8 @@ sub add_account { sub edit_account { $lxdebug->enter_sub(); + $auth->assert('config'); + $form->{title} = "Edit"; AM->get_account(\%myconfig, \%$form); @@ -90,10 +95,12 @@ sub edit_account { sub account_header { $lxdebug->enter_sub(); + $auth->assert('config'); + if ( $form->{action} eq 'edit_account') { $form->{account_exists} = '1'; - } - + } + $form->{title} = $locale->text("$form->{title} Account"); $form->{"$form->{charttype}_checked"} = "checked"; @@ -102,9 +109,9 @@ sub account_header { $form->{select_tax} = ""; my @tax_report_pos = USTVA->report_variables({ - myconfig => \%myconfig, - form => $form, - type => '', + myconfig => \%myconfig, + form => $form, + type => '', attribute => 'position', calc => '', }); @@ -140,41 +147,41 @@ sub account_header { if ($item->{id} == $taxkey_used->{tax_id}) { $form->{ACCOUNT_TAXKEYS}[$i]{selecttaxkey} .= qq|| - . sprintf("%.2d", $item->{taxkey}) + . sprintf("%.2d", $item->{taxkey}) . qq|. $item->{taxdescription} ($item->{rate}) | - . $locale->text('Tax-o-matic Account') + . $locale->text('Tax-o-matic Account') . qq|: $item->{chart_accno}\n|; - } + } else { $form->{ACCOUNT_TAXKEYS}[$i]{selecttaxkey} .= qq|| - . sprintf("%.2d", $item->{taxkey}) + . sprintf("%.2d", $item->{taxkey}) . qq|. $item->{taxdescription} ($item->{rate}) | . $locale->text('Tax-o-matic Account') . qq|: $item->{chart_accno}\n|; } } - + # Fill in the USTVA Numbers as select options foreach my $item ( '', sort({ $a cmp $b } @tax_report_pos) ) { if ($item eq ''){ $form->{ACCOUNT_TAXKEYS}[$i]{select_tax} .= qq|-\n|; - } - elsif ( $item == $taxkey_used->{pos_ustva} ) { + } + elsif ( $item eq $taxkey_used->{pos_ustva} ) { $form->{ACCOUNT_TAXKEYS}[$i]{select_tax} .= qq|$item\n|; } else { $form->{ACCOUNT_TAXKEYS}[$i]{select_tax} .= qq|$item\n|; } - } + } $i++; } } - # Newaccount Folgekonto + # Newaccount Folgekonto if (@{ $form->{NEWACCOUNT} }) { if (!$form->{new_chart_valid}) { $form->{selectnewaccount} = qq| |. $locale->text('None') .q||; @@ -208,7 +215,7 @@ sub account_header { 14 => "Steuern, Versich., Beiträge", 15 => "Kfz-Steuern", 16 => "Kfz-Versicherungen", - 17 => "Sonst. Fahrtkosten", + 17 => "Sonst. Fahrzeugkosten", 18 => "Werbe- und Reisekosten", 19 => "Instandhaltung u. Werkzeuge", 20 => "Fachzeitschriften, Bücher", @@ -281,18 +288,18 @@ sub account_header { # this is for our parser only! Do not remove. # type=submit $locale->text('Add Account') # type=submit $locale->text('Edit Account') - + $form->{type} = "account"; # preselections category - + $select_category = q| |. $locale->text('None') .q|\n|; %category = ( 'A' => $locale->text('Asset'), 'L' => $locale->text('Liability'), 'Q' => $locale->text('Equity'), - 'I' => $locale->text('Revenue'), + 'I' => $locale->text('Revenue'), 'E' => $locale->text('Expense'), 'C' => $locale->text('Costs'), ); @@ -304,7 +311,7 @@ sub account_header { } } - + # preselection chart type my $select_charttype = q{}; @@ -312,7 +319,7 @@ sub account_header { 'A' => $locale->text('Account'), 'H' => $locale->text('Header'), ); - + foreach $item ( sort({ $a <=> $b } keys %charttype) ) { if ($item eq $form->{charttype}) { $select_charttype .= qq|$charttype{$item}\n|; @@ -324,9 +331,9 @@ sub account_header { } my $ChartTypeIsAccount = ($form->{charttype} eq "A") ? "1":""; - + $form->header(); - + my $parameters_ref = { ChartTypeIsAccount => $ChartTypeIsAccount, select_category => $select_category, @@ -337,7 +344,7 @@ sub account_header { select_bilanz => $select_bilanz, select_eur => $select_eur, }; - + # Ausgabe des Templates print($form->parse_html_template('am/edit_accounts', $parameters_ref)); @@ -348,12 +355,11 @@ sub account_header { sub form_footer { $lxdebug->enter_sub(); - print qq| + $auth->assert('config'); - + print qq| -{login}> -{password}> + |; if ((!$form->{id}) || ($form->{id} && $form->{orphaned}) || (($form->{type} eq "account") && (!$form->{new_chart_valid}))) { @@ -368,6 +374,12 @@ sub form_footer { . $locale->text('Delete') . qq|">|; } + if ($form->{id} && $form->{type} eq "account") { + print qq| + |; + } + print qq| @@ -381,9 +393,11 @@ sub form_footer { sub save_account { $lxdebug->enter_sub(); + $auth->assert('config'); + $form->isblank("accno", $locale->text('Account Number missing!')); $form->isblank("description", $locale->text('Account Description missing!')); - + if ($form->{charttype} eq 'A'){ $form->isblank("category", $locale->text('Account Type missing!')); } @@ -395,91 +409,97 @@ sub save_account { $lxdebug->leave_sub(); } -sub list_account { +sub save_as_new_account { $lxdebug->enter_sub(); - CA->all_accounts(\%myconfig, \%$form); + $auth->assert('config'); - $form->{title} = $locale->text('Chart of Accounts'); + $form->isblank("accno", $locale->text('Account Number missing!')); + $form->isblank("description", $locale->text('Account Description missing!')); + + 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->{id} = 0; + if ($form->{"original_accno"} && + ($form->{"accno"} eq $form->{"original_accno"})) { + $form->error($locale->text('Account Number already used!')); + } + $form->redirect($locale->text('Account saved!')) + if (AM->save_account(\%myconfig, \%$form)); + $form->error($locale->text('Cannot save account!')); + + $lxdebug->leave_sub(); +} - # construct callback - $callback = - "$form->{script}?action=list_account&login=$form->{login}&password=$form->{password}"; +sub list_account { + $lxdebug->enter_sub(); + $auth->assert('config'); + $form->{callback} = build_std_url('action=list_account'); + my $link_edit_account = build_std_url('action=edit_account', 'callback'); - # escape callback - $callback = $form->escape($callback); + CA->all_accounts(\%myconfig, \%$form); foreach $ca (@{ $form->{CA} }) { - $ca->{debit} = " "; - $ca->{credit} = " "; + $ca->{debit} = ""; + $ca->{credit} = ""; if ($ca->{amount} > 0) { - $ca->{credit} = - $form->format_amount(\%myconfig, $ca->{amount}, 2, " "); + $ca->{credit} = $form->format_amount(\%myconfig, $ca->{amount}, 2); } if ($ca->{amount} < 0) { - $ca->{debit} = - $form->format_amount(\%myconfig, -1 * $ca->{amount}, 2, " "); + $ca->{debit} = $form->format_amount(\%myconfig, -1 * $ca->{amount}, 2); } - $ca->{heading} = ( $ca->{charttype} eq 'H' ) ? 1:''; - $ca->{link_edit_account} = - qq|$form->{script}?action=edit_account&id=$ca->{id}| - .qq|&login=$form->{login}| - .qq|&password=$form->{password}&callback=$callback|; - } - - # Ajax - my $list_account_details_url = - "$form->{script}?login=$form->{login}" - ."&password=$form->{password}&action=list_account_details&"; - - - my $pjx = new CGI::Ajax( - 'list_account_details' => $list_account_details_url - ); + $ca->{heading} = ( $ca->{charttype} eq 'H' ) ? 1:''; + $ca->{link_edit_account} = $link_edit_account . '&id=' . E($ca->{id}); + } + + # Ajax + my $pjx = new CGI::Ajax('list_account_details' => build_std_url('action=list_account_details')); # Eneable AJAX debuging #$pjx->DEBUG(1); #$pjx->JSDEBUG(1); - + push(@ { $form->{AJAX} }, $pjx); - + + $form->{stylesheets} = "list_accounts.css"; + $form->{title} = $locale->text('Chart of Accounts'); + $form->header; - - + + my $parameters_ref = { # hidden_variables => $_hidden_variables_ref, }; - + # Ausgabe des Templates print($form->parse_html_template('am/list_accounts', $parameters_ref)); - + $lxdebug->leave_sub(); } sub list_account_details { -# Ajax Funktion aus list_account_details +# Ajax Funktion aus list_account_details $lxdebug->enter_sub(); - my $chart_id = $form->{args}; - - CA->all_accounts(\%myconfig, \%$form, $chart_id); - - $form->{title} = $locale->text('Chart of Accounts'); + $auth->assert('config'); - # construct callback - $callback = - "$form->{script}?action=list_account&login=$form->{login}&password=$form->{password}"; - - $form->header; + my $chart_id = $form->{args}; - # escape callback - $callback = $form->escape($callback); + CA->all_accounts(\%myconfig, \%$form, $chart_id); foreach $ca (@{ $form->{CA} }) { @@ -496,11 +516,11 @@ sub list_account_details { } my @links = split( q{:}, $ca->{link}); - + $ca->{link} = q{}; - + foreach my $link (@links){ - $link = ( $link eq 'AR') ? $locale->text('Account Link AR') + $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') @@ -517,16 +537,8 @@ sub list_account_details { : ( $link eq 'IC_taxservice' ) ? $locale->text('Account Link IC_taxservice') # : ( $link eq 'CT_tax' ) ? $locale->text('Account Link CT_tax') : $locale->text('Unknown Link') . ': ' . $link; - $ca->{link} .= ($link ne '') ? "[$link] ":''; } - - $ca->{startdate} =~ s/,//og; - $ca->{tk_ustva} =~ s/,//og; - $ca->{taxkey} =~ s/,//og; - $ca->{taxaccount} =~ s/,//og; - $ca->{taxdescription} =~ s/,//og; - $ca->{datevautomatik} = ($ca->{datevautomatik}) ? $locale->text('On'):$locale->text('Off'); $ca->{category} = ($ca->{category} eq 'A') ? $locale->text('Account Category A') : ($ca->{category} eq 'E') ? $locale->text('Account Category E') @@ -536,29 +548,13 @@ sub list_account_details { : ($ca->{category} eq 'C') ? $locale->text('Account Category C') : ($ca->{category} eq 'G') ? $locale->text('Account Category G') : $locale->text('Unknown Category') . ': ' . $ca->{category}; - - $ca->{link_edit_account} = - qq|$form->{script}?action=edit_account&id=$ca->{id}| - .qq|&login=$form->{login}| - .qq|&password=$form->{password}&callback=$callback|; } + $form->{title} = $locale->text('Chart of Accounts'); + $form->header(); + print $form->parse_html_template('am/list_account_details'); - - my $parameters_ref = { - - - # hidden_variables => $_hidden_variables_ref, - }; - - # Ausgabe des Templates - #my $q = CGI->new(); - my $result = $form->parse_html_template('am/list_account_details', $parameters_ref); - - print $result; -# print "chart_id:$chart_id, form->chartid:$form->{chart_id}, rest=$rest"; - $lxdebug->leave_sub(); } @@ -566,6 +562,8 @@ sub list_account_details { sub delete_account { $lxdebug->enter_sub(); + $auth->assert('config'); + $form->{title} = $locale->text('Delete Account'); foreach $id ( @@ -586,12 +584,12 @@ sub delete_account { sub add_department { $lxdebug->enter_sub(); + $auth->assert('config'); + $form->{title} = "Add"; $form->{role} = "P"; - $form->{callback} = - "$form->{script}?action=add_department&login=$form->{login}&password=$form->{password}" - unless $form->{callback}; + $form->{callback} = "am.pl?action=add_department" unless $form->{callback}; &department_header; &form_footer; @@ -602,6 +600,8 @@ sub add_department { sub edit_department { $lxdebug->enter_sub(); + $auth->assert('config'); + $form->{title} = "Edit"; AM->get_department(\%myconfig, \%$form); @@ -615,10 +615,11 @@ sub edit_department { sub list_department { $lxdebug->enter_sub(); + $auth->assert('config'); + AM->departments(\%myconfig, \%$form); - $form->{callback} = - "$form->{script}?action=list_department&login=$form->{login}&password=$form->{password}"; + $form->{callback} = "am.pl?action=list_department"; $callback = $form->escape($form->{callback}); @@ -674,7 +675,7 @@ sub list_department { $profitcenter = ($ref->{role} eq "P") ? "X" : ""; $column_data{description} = - qq|{script}?action=edit_department&id=$ref->{id}&login=$form->{login}&password=$form->{password}&callback=$callback>$ref->{description}|; + qq|$ref->{description}|; $column_data{cost} = qq|$costcenter|; $column_data{profit} = qq|$profitcenter|; @@ -695,15 +696,12 @@ sub list_department { -{script}> + -{login}> -{password}> - @@ -719,6 +717,8 @@ sub list_department { sub department_header { $lxdebug->enter_sub(); + $auth->assert('config'); + $form->{title} = $locale->text("$form->{title} Department"); # $locale->text('Add Department') @@ -742,7 +742,7 @@ sub department_header { print qq| -{script}> + {id}> @@ -775,6 +775,8 @@ sub department_header { sub save_department { $lxdebug->enter_sub(); + $auth->assert('config'); + $form->isblank("description", $locale->text('Description missing!')); AM->save_department(\%myconfig, \%$form); $form->redirect($locale->text('Department saved!')); @@ -785,6 +787,8 @@ sub save_department { sub delete_department { $lxdebug->enter_sub(); + $auth->assert('config'); + AM->delete_department(\%myconfig, \%$form); $form->redirect($locale->text('Department deleted!')); @@ -794,11 +798,11 @@ sub delete_department { sub add_lead { $lxdebug->enter_sub(); + $auth->assert('config'); + $form->{title} = "Add"; - $form->{callback} = - "$form->{script}?action=add_lead&login=$form->{login}&password=$form->{password}" - unless $form->{callback}; + $form->{callback} = "am.pl?action=add_lead" unless $form->{callback}; &lead_header; &form_footer; @@ -809,6 +813,8 @@ sub add_lead { sub edit_lead { $lxdebug->enter_sub(); + $auth->assert('config'); + $form->{title} = "Edit"; AM->get_lead(\%myconfig, \%$form); @@ -824,10 +830,11 @@ sub edit_lead { sub list_lead { $lxdebug->enter_sub(); + $auth->assert('config'); + AM->lead(\%myconfig, \%$form); - $form->{callback} = - "$form->{script}?action=list_lead&login=$form->{login}&password=$form->{password}"; + $form->{callback} = "am.pl?action=list_lead"; $callback = $form->escape($form->{callback}); @@ -869,9 +876,8 @@ sub list_lead { |; $lead = $ref->{lead}; - - $column_data{description} = - qq|{script}?action=edit_lead&id=$ref->{id}&login=$form->{login}&password=$form->{password}&callback=$callback>$ref->{lead}|; + + $column_data{description} = qq|$ref->{lead}|; map { print "$column_data{$_}\n" } @column_index; @@ -887,15 +893,12 @@ sub list_lead { -{script}> + -{login}> -{password}> - @@ -911,6 +914,8 @@ sub list_lead { sub lead_header { $lxdebug->enter_sub(); + $auth->assert('config'); + $form->{title} = $locale->text("$form->{title} Lead"); # $locale->text('Add Lead') @@ -926,7 +931,7 @@ sub lead_header { print qq| -{script}> + {id}> @@ -951,6 +956,8 @@ sub lead_header { sub save_lead { $lxdebug->enter_sub(); + $auth->assert('config'); + $form->isblank("description", $locale->text('Description missing!')); AM->save_lead(\%myconfig, \%$form); $form->redirect($locale->text('lead saved!')); @@ -961,6 +968,8 @@ sub save_lead { sub delete_lead { $lxdebug->enter_sub(); + $auth->assert('config'); + AM->delete_lead(\%myconfig, \%$form); $form->redirect($locale->text('lead deleted!')); @@ -970,11 +979,11 @@ sub delete_lead { sub add_business { $lxdebug->enter_sub(); + $auth->assert('config'); + $form->{title} = "Add"; - $form->{callback} = - "$form->{script}?action=add_business&login=$form->{login}&password=$form->{password}" - unless $form->{callback}; + $form->{callback} = "am.pl?action=add_business" unless $form->{callback}; &business_header; &form_footer; @@ -1000,10 +1009,11 @@ sub edit_business { sub list_business { $lxdebug->enter_sub(); + $auth->assert('config'); + AM->business(\%myconfig, \%$form); - $form->{callback} = - "$form->{script}?action=list_business&login=$form->{login}&password=$form->{password}"; + $form->{callback} = "am.pl?action=list_business"; $callback = $form->escape($form->{callback}); @@ -1059,8 +1069,7 @@ sub list_business { $form->format_amount(\%myconfig, $ref->{discount} * 100); $description = $ref->{description}; - $column_data{description} = - qq|{script}?action=edit_business&id=$ref->{id}&login=$form->{login}&password=$form->{password}&callback=$callback>$description|; + $column_data{description} = qq|$description|; $column_data{discount} = qq|$discount|; $column_data{customernumberinit} = qq|$ref->{customernumberinit}|; @@ -1082,15 +1091,12 @@ sub list_business { -{script}> + -{login}> -{password}> - @@ -1106,6 +1112,8 @@ sub list_business { sub business_header { $lxdebug->enter_sub(); + $auth->assert('config'); + $form->{title} = $locale->text("$form->{title} Business"); # $locale->text('Add Business') @@ -1120,7 +1128,7 @@ sub business_header { print qq| -{script}> + {id}> @@ -1153,6 +1161,8 @@ sub business_header { sub save_business { $lxdebug->enter_sub(); + $auth->assert('config'); + $form->isblank("description", $locale->text('Description missing!')); $form->{discount} = $form->parse_amount(\%myconfig, $form->{discount}) / 100; AM->save_business(\%myconfig, \%$form); @@ -1164,6 +1174,8 @@ sub save_business { sub delete_business { $lxdebug->enter_sub(); + $auth->assert('config'); + AM->delete_business(\%myconfig, \%$form); $form->redirect($locale->text('Business deleted!')); @@ -1173,11 +1185,11 @@ sub delete_business { sub add_language { $lxdebug->enter_sub(); + $auth->assert('config'); + $form->{title} = "Add"; - $form->{callback} = - "$form->{script}?action=add_language&login=$form->{login}&password=$form->{password}" - unless $form->{callback}; + $form->{callback} = "am.pl?action=add_language" unless $form->{callback}; &language_header; &form_footer; @@ -1188,6 +1200,8 @@ sub add_language { sub edit_language { $lxdebug->enter_sub(); + $auth->assert('config'); + $form->{title} = "Edit"; AM->get_language(\%myconfig, \%$form); @@ -1203,10 +1217,11 @@ sub edit_language { sub list_language { $lxdebug->enter_sub(); + $auth->assert('config'); + AM->language(\%myconfig, \%$form); - $form->{callback} = - "$form->{script}?action=list_language&login=$form->{login}&password=$form->{password}"; + $form->{callback} = "am.pl?action=list_language"; $callback = $form->escape($form->{callback}); @@ -1272,7 +1287,7 @@ sub list_language { $column_data{description} = - qq|{script}?action=edit_language&id=$ref->{id}&login=$form->{login}&password=$form->{password}&callback=$callback>$ref->{description}|; + qq|$ref->{description}|; $column_data{template_code} = qq|$ref->{template_code}|; $column_data{article_code} = qq|$ref->{article_code}|; @@ -1308,15 +1323,12 @@ sub list_language { -{script}> + -{login}> -{password}> - @@ -1332,6 +1344,8 @@ sub list_language { sub language_header { $lxdebug->enter_sub(); + $auth->assert('config'); + $form->{title} = $locale->text("$form->{title} Language"); # $locale->text('Add Language') @@ -1369,7 +1383,7 @@ sub language_header { print qq| -{script}> + {id}> @@ -1420,6 +1434,8 @@ sub language_header { sub save_language { $lxdebug->enter_sub(); + $auth->assert('config'); + $form->isblank("description", $locale->text('Language missing!')); $form->isblank("template_code", $locale->text('Template Code missing!')); $form->isblank("article_code", $locale->text('Article Code missing!')); @@ -1432,6 +1448,8 @@ sub save_language { sub delete_language { $lxdebug->enter_sub(); + $auth->assert('config'); + AM->delete_language(\%myconfig, \%$form); $form->redirect($locale->text('Language deleted!')); @@ -1442,13 +1460,14 @@ sub delete_language { sub add_buchungsgruppe { $lxdebug->enter_sub(); + $auth->assert('config'); + # $locale->text("Add Buchungsgruppe") # $locale->text("Edit Buchungsgruppe") $form->{title} = "Add"; - $form->{callback} = - "$form->{script}?action=add_buchungsgruppe&login=$form->{login}&password=$form->{password}" - unless $form->{callback}; + $form->{callback} = "am.pl?action=add_buchungsgruppe" unless $form->{callback}; + AM->get_buchungsgruppe(\%myconfig, \%$form); $form->{"inventory_accno_id"} = $form->{"std_inventory_accno_id"}; for (my $i = 0; 4 > $i; $i++) { @@ -1465,6 +1484,8 @@ sub add_buchungsgruppe { sub edit_buchungsgruppe { $lxdebug->enter_sub(); + $auth->assert('config'); + $form->{title} = "Edit"; AM->get_buchungsgruppe(\%myconfig, \%$form); @@ -1479,10 +1500,11 @@ sub edit_buchungsgruppe { sub list_buchungsgruppe { $lxdebug->enter_sub(); + $auth->assert('config'); + AM->buchungsgruppe(\%myconfig, \%$form); - $form->{callback} = - "$form->{script}?action=list_buchungsgruppe&login=$form->{login}&password=$form->{password}"; + $form->{callback} = "am.pl?action=list_buchungsgruppe"; $callback = $form->escape($form->{callback}); @@ -1564,9 +1586,7 @@ sub list_buchungsgruppe { |; - my $swap_link = qq|$form->{script}?action=swap_buchungsgruppen&|; - map({ $swap_link .= $_ . "=" . $form->escape($form->{$_}) . "&" } - qw(login password)); + my $swap_link = qq|am.pl?action=swap_buchungsgruppen&|; my $row = 0; foreach $ref (@{ $form->{ALL} }) { @@ -1600,8 +1620,7 @@ sub list_buchungsgruppe { qq||; } - $column_data{description} = - qq|{script}?action=edit_buchungsgruppe&id=$ref->{id}&login=$form->{login}&password=$form->{password}&callback=$callback>$ref->{description}|; + $column_data{description} = qq|$ref->{description}|; $column_data{inventory_accno} = qq|$ref->{inventory_accno}|; $column_data{income_accno_0} = qq|$ref->{income_accno_0}|; @@ -1635,15 +1654,12 @@ sub list_buchungsgruppe { -{script}> + -{login}> -{password}> - @@ -1659,6 +1675,8 @@ sub list_buchungsgruppe { sub buchungsgruppe_header { $lxdebug->enter_sub(); + $auth->assert('config'); + $form->{title} = $locale->text("$form->{title} Buchungsgruppe"); # $locale->text('Add Accounting Group') @@ -1690,11 +1708,11 @@ sub buchungsgruppe_header { if ($form->{id}) { $form->{selectIC} =~ s/selected//g; - $form->{selectIC} =~ s/ value=$form->{inventory_accno_id}/ value=$form->{inventory_accno_id} selected/; + $form->{selectIC} =~ s/ value=\Q$form->{inventory_accno_id}\E/ value=$form->{inventory_accno_id} selected/; $form->{selectIC_income} =~ s/selected//g; - $form->{selectIC_income} =~ s/ value=$form->{income_accno_id_0}/ value=$form->{income_accno_id_0} selected/; + $form->{selectIC_income} =~ s/ value=\Q$form->{income_accno_id_0}\E/ value=$form->{income_accno_id_0} selected/; $form->{selectIC_expense} =~ s/selected//g; - $form->{selectIC_expense} =~ s/ value=$form->{expense_accno_id_0}/ value=$form->{expense_accno_id_0} selected/; + $form->{selectIC_expense} =~ s/ value=\Q$form->{expense_accno_id_0}\E/ value=$form->{expense_accno_id_0} selected/; } if (!$eur) { @@ -1721,9 +1739,9 @@ sub buchungsgruppe_header { |; if ($form->{id}) { $form->{selectIC_income} =~ s/selected//g; - $form->{selectIC_income} =~ s/ value=$form->{income_accno_id_1}/ value=$form->{income_accno_id_1} selected/; + $form->{selectIC_income} =~ s/ value=\Q$form->{income_accno_id_1}\E/ value=$form->{income_accno_id_1} selected/; $form->{selectIC_expense} =~ s/selected//g; - $form->{selectIC_expense} =~ s/ value=$form->{expense_accno_id_1}/ value=$form->{expense_accno_id_1} selected/; + $form->{selectIC_expense} =~ s/ value=\Q$form->{expense_accno_id_1}\E/ value=$form->{expense_accno_id_1} selected/; } $linkaccounts .= qq| | . $locale->text('Revenues EU with UStId') . qq| @@ -1736,9 +1754,9 @@ sub buchungsgruppe_header { if ($form->{id}) { $form->{selectIC_income} =~ s/selected//g; - $form->{selectIC_income} =~ s/ value=$form->{income_accno_id_2}/ value=$form->{income_accno_id_2} selected/; + $form->{selectIC_income} =~ s/ value=\Q$form->{income_accno_id_2}\E/ value=$form->{income_accno_id_2} selected/; $form->{selectIC_expense} =~ s/selected//g; - $form->{selectIC_expense} =~ s/ value=$form->{expense_accno_id_2}/ value=$form->{expense_accno_id_2} selected/; + $form->{selectIC_expense} =~ s/ value=\Q$form->{expense_accno_id_2}\E/ value=$form->{expense_accno_id_2} selected/; } $linkaccounts .= qq| @@ -1752,9 +1770,9 @@ sub buchungsgruppe_header { if ($form->{id}) { $form->{selectIC_income} =~ s/selected//g; - $form->{selectIC_income} =~ s/ value=$form->{income_accno_id_3}/ value=$form->{income_accno_id_3} selected/; + $form->{selectIC_income} =~ s/ value=\Q$form->{income_accno_id_3}\E/ value=$form->{income_accno_id_3} selected/; $form->{selectIC_expense} =~ s/selected//g; - $form->{selectIC_expense} =~ s/ value=$form->{expense_accno_id_3}/ value=$form->{expense_accno_id_3} selected/; + $form->{selectIC_expense} =~ s/ value=\Q$form->{expense_accno_id_3}\E/ value=$form->{expense_accno_id_3} selected/; } $linkaccounts .= qq| @@ -1773,7 +1791,7 @@ sub buchungsgruppe_header { print qq| -{script}> + {id}> @@ -1799,6 +1817,8 @@ sub buchungsgruppe_header { sub save_buchungsgruppe { $lxdebug->enter_sub(); + $auth->assert('config'); + $form->isblank("description", $locale->text('Description missing!')); AM->save_buchungsgruppe(\%myconfig, \%$form); @@ -1810,6 +1830,8 @@ sub save_buchungsgruppe { sub delete_buchungsgruppe { $lxdebug->enter_sub(); + $auth->assert('config'); + AM->delete_buchungsgruppe(\%myconfig, \%$form); $form->redirect($locale->text('Accounting Group deleted!')); @@ -1819,6 +1841,8 @@ sub delete_buchungsgruppe { sub swap_buchungsgruppen { $lxdebug->enter_sub(); + $auth->assert('config'); + AM->swap_sortkeys(\%myconfig, $form, "buchungsgruppen"); list_buchungsgruppe(); @@ -1829,11 +1853,11 @@ sub swap_buchungsgruppen { sub add_printer { $lxdebug->enter_sub(); + $auth->assert('config'); + $form->{title} = "Add"; - $form->{callback} = - "$form->{script}?action=add_printer&login=$form->{login}&password=$form->{password}" - unless $form->{callback}; + $form->{callback} = "am.pl?action=add_printer" unless $form->{callback}; &printer_header; &form_footer; @@ -1844,6 +1868,8 @@ sub add_printer { sub edit_printer { $lxdebug->enter_sub(); + $auth->assert('config'); + $form->{title} = "Edit"; AM->get_printer(\%myconfig, \%$form); @@ -1859,10 +1885,11 @@ sub edit_printer { sub list_printer { $lxdebug->enter_sub(); + $auth->assert('config'); + AM->printer(\%myconfig, \%$form); - $form->{callback} = - "$form->{script}?action=list_printer&login=$form->{login}&password=$form->{password}"; + $form->{callback} = "am.pl?action=list_printer"; $callback = $form->escape($form->{callback}); @@ -1915,8 +1942,7 @@ sub list_printer { |; - $column_data{printer_description} = - qq|{script}?action=edit_printer&id=$ref->{id}&login=$form->{login}&password=$form->{password}&callback=$callback>$ref->{printer_description}|; + $column_data{printer_description} = qq|$ref->{printer_description}|; $column_data{printer_command} = qq|$ref->{printer_command}|; $column_data{template_code} = qq|$ref->{template_code}|; @@ -1938,15 +1964,12 @@ sub list_printer { -{script}> + -{login}> -{password}> - @@ -1962,6 +1985,8 @@ sub list_printer { sub printer_header { $lxdebug->enter_sub(); + $auth->assert('config'); + $form->{title} = $locale->text("$form->{title} Printer"); # $locale->text('Add Printer') @@ -1977,7 +2002,7 @@ sub printer_header { print qq| -{script}> + {id}> @@ -2010,6 +2035,8 @@ sub printer_header { sub save_printer { $lxdebug->enter_sub(); + $auth->assert('config'); + $form->isblank("printer_description", $locale->text('Description missing!')); $form->isblank("printer_command", $locale->text('Printer Command missing!')); AM->save_printer(\%myconfig, \%$form); @@ -2021,6 +2048,8 @@ sub save_printer { sub delete_printer { $lxdebug->enter_sub(); + $auth->assert('config'); + AM->delete_printer(\%myconfig, \%$form); $form->redirect($locale->text('Printer deleted!')); @@ -2030,11 +2059,11 @@ sub delete_printer { sub add_payment { $lxdebug->enter_sub(); + $auth->assert('config'); + $form->{title} = "Add"; - $form->{callback} = - "$form->{script}?action=add_payment&login=$form->{login}&password=$form->{password}" - unless $form->{callback}; + $form->{callback} = "am.pl?action=add_payment" unless $form->{callback}; $form->{terms_netto} = 0; $form->{terms_skonto} = 0; @@ -2052,6 +2081,8 @@ sub add_payment { sub edit_payment { $lxdebug->enter_sub(); + $auth->assert('config'); + $form->{title} = "Edit"; AM->get_payment(\%myconfig, $form); @@ -2069,6 +2100,8 @@ sub edit_payment { sub list_payment { $lxdebug->enter_sub(); + $auth->assert('config'); + AM->payment(\%myconfig, \%$form); $form->{callback} = build_std_url("action=list_payment"); @@ -2197,15 +2230,12 @@ sub list_payment { -{script}> + -{login}> -{password}> - @@ -2221,6 +2251,8 @@ sub list_payment { sub payment_header { $lxdebug->enter_sub(); + $auth->assert('config'); + $form->{title} = $locale->text("$form->{title} Payment Terms"); # $locale->text('Add Payment Terms') @@ -2235,7 +2267,7 @@ sub payment_header { print qq| -{script}> + {id}> @@ -2276,11 +2308,11 @@ sub payment_header { | . $locale->text('Skonto Terms') . qq| - + | . $locale->text('Skonto') . qq| % - + @@ -2301,8 +2333,12 @@ sub payment_header { | . $locale->text("<%skonto_amount%> -- The deductible amount") . qq| | . $locale->text("<%total%> -- Amount payable") +. qq| + | . $locale->text("<%total_wo_skonto%> -- Amount payable less discount") . qq| | . $locale->text("<%invtotal%> -- Invoice total") +. qq| + | . $locale->text("<%invtotal_wo_skonto%> -- Invoice total less discount") . qq| | . $locale->text("<%currency%> -- The selected currency") . qq| @@ -2323,6 +2359,8 @@ sub payment_header { sub save_payment { $lxdebug->enter_sub(); + $auth->assert('config'); + $form->isblank("description", $locale->text('Description missing!')); $form->{"percent_skonto"} = $form->parse_amount(\%myconfig, $form->{percent_skonto}) / 100; @@ -2335,6 +2373,8 @@ sub save_payment { sub delete_payment { $lxdebug->enter_sub(); + $auth->assert('config'); + AM->delete_payment(\%myconfig, \%$form); $form->redirect($locale->text('Payment terms deleted!')); @@ -2344,39 +2384,74 @@ sub delete_payment { sub swap_payment_terms { $lxdebug->enter_sub(); + $auth->assert('config'); + AM->swap_sortkeys(\%myconfig, $form, "payment_terms"); list_payment(); $lxdebug->leave_sub(); } -sub config { +sub edit_defaults { $lxdebug->enter_sub(); # get defaults for account numbers and last numbers AM->defaultaccounts(\%myconfig, \%$form); + $form->{ALL_UNITS} = AM->convertible_units(AM->retrieve_all_units(), 'g'); - 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}) - ? "$item\n" - : "$item\n"; - } + map { $form->{"defaults_${_}"} = $form->{defaults}->{$_} } keys %{ $form->{defaults} }; - foreach $item (qw(1,000.00 1000.00 1.000,00 1000,00)) { - $numberformat .= - ($item eq $myconfig{numberformat}) - ? "$item\n" - : "$item\n"; + foreach $key (keys %{ $form->{IC} }) { + foreach $accno (sort keys %{ $form->{IC}->{$key} }) { + my $array = "ACCNOS_" . uc($key); + $form->{$array} ||= []; + + my $value = "${accno}--" . $form->{IC}->{$key}->{$accno}->{description}; + push @{ $form->{$array} }, { + 'name' => $value, + 'value' => $value, + 'selected' => $form->{IC}->{$key}->{$accno}->{id} == $form->{defaults}->{$key}, + }; + } } - foreach $item (qw(name company address signature)) { - $myconfig{$item} =~ s/\"/"/g; - } + $form->{title} = $locale->text('Ranges of numbers and default accounts'); + + $form->header(); + print $form->parse_html_template('am/edit_defaults'); + + $lxdebug->leave_sub(); +} + +sub save_defaults { + $lxdebug->enter_sub(); + + AM->save_defaults(); + + $form->redirect($locale->text('Defaults saved.')); - foreach $item (qw(address signature)) { - $myconfig{$item} =~ s/\\n/\r\n/g; + $lxdebug->leave_sub(); +} + +sub _build_cfg_options { + my $idx = shift; + my $array = uc($idx) . 'S'; + + $form->{$array} = []; + foreach my $item (@_) { + push @{ $form->{$array} }, { + 'name' => $item, + 'value' => $item, + 'selected' => $item eq $myconfig{$idx}, + }; } +} + +sub config { + $lxdebug->enter_sub(); + + _build_cfg_options('dateformat', qw(mm-dd-yy mm/dd/yy dd-mm-yy dd/mm/yy dd.mm.yy yyyy-mm-dd)); + _build_cfg_options('numberformat', qw(1,000.00 1000.00 1.000,00 1000,00)); @formats = (); if ($opendocument_templates && $openofficeorg_writer_bin && @@ -2400,412 +2475,114 @@ sub config { if (!$myconfig{"template_format"}) { $myconfig{"template_format"} = "pdf"; } - my $template_format = ""; + $form->{TEMPLATE_FORMATS} = []; foreach $item (@formats) { - $template_format .= - "{value}\"" . - ($item->{"value"} eq $myconfig{"template_format"} ? - " selected" : "") . - ">" . H($item->{"name"}) . ""; + 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"; } + my %selected = ($myconfig{"default_media"} => "selected"); - my $default_media = qq| - | . $locale->text("Screen") . qq| - | . $locale->text("Printer") . qq| - | . $locale->text("Queue") . qq| -|; + $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}, }, + ]; - %selected = (); - $selected{$myconfig{"default_printer_id"}} = "selected" - if ($myconfig{"default_printer_id"}); - my $default_printer = qq||; AM->printer(\%myconfig, $form); + + $form->{PRINTERS} = []; foreach my $printer (@{$form->{"ALL"}}) { - $default_printer .= qq|{'id'}}>| . - H($printer->{"printer_description"}) . qq||; + push @{ $form->{PRINTERS} }, { + 'name' => $printer->{printer_description}, + 'value' => $printer->{id}, + 'selected' => $printer->{id} == $myconfig{default_printer_id}, + }; } %countrycodes = User->country_codes; - $countrycodes = ''; - foreach $key (sort { $countrycodes{$a} cmp $countrycodes{$b} } - keys %countrycodes - ) { - $countrycodes .= - ($myconfig{countrycode} eq $key) - ? "$countrycodes{$key}\n" - : "$countrycodes{$key}\n"; + + $form->{COUNTRYCODES} = []; + foreach $countrycode (sort { $countrycodes{$a} cmp $countrycodes{$b} } keys %countrycodes) { + push @{ $form->{COUNTRYCODES} }, { + 'name' => $countrycodes{$countrycode}, + 'value' => $countrycode, + 'selected' => $countrycode eq $myconfig{countrycode}, + }; } - $countrycodes = "American English\n$countrycodes"; - foreach $key (keys %{ $form->{IC} }) { - foreach $accno (sort keys %{ $form->{IC}{$key} }) { - $myconfig{$key} .= - ($form->{IC}{$key}{$accno}{id} == $form->{defaults}{$key}) - ? "$accno--$form->{IC}{$key}{$accno}{description}\n" - : "$accno--$form->{IC}{$key}{$accno}{description}\n"; - } + $form->{STYLESHEETS} = []; + foreach $item (qw(lx-office-erp.css Win2000.css)) { + push @{ $form->{STYLESHEETS} }, { + 'name' => $item, + 'value' => $item, + 'selected' => $item eq $myconfig{stylesheet}, + }; } -# opendir CSS, "css/."; -# @all = grep /.*\.css$/, readdir CSS; -# closedir CSS; + $myconfig{show_form_details} = 1 unless (defined($myconfig{show_form_details})); + $form->{CAN_CHANGE_PASSWORD} = $auth->can_change_password(); + $form->{todo_cfg} = { TODO->get_user_config('login' => $form->{login}) }; -# css dir has styles that are not intended as general layouts. -# reverting to hardcoded list - @all = qw(lx-office-erp.css Win2000.css); + $form->{title} = $locale->text('Edit Preferences for #1', $form->{login}); - foreach $item (@all) { - if ($item eq $myconfig{stylesheet}) { - $selectstylesheet .= qq|$item\n|; - } else { - $selectstylesheet .= qq|$item\n|; - } - } - $selectstylesheet .= "\n"; + $form->header(); + print $form->parse_html_template('am/config'); - $form->{title} = $locale->text('Edit Preferences for') . qq| $form->{login}|; + $lxdebug->leave_sub(); +} - $form->header; +sub save_preferences { + $lxdebug->enter_sub(); - if ($myconfig{menustyle} eq "old") { - $menustyle_old = "checked"; - } elsif ($myconfig{menustyle} eq "neu") { - $menustyle_neu = "checked"; - } elsif ($myconfig{menustyle} eq "v3") { - $menustyle_v3 = "checked"; - } + $form->{stylesheet} = $form->{usestylesheet}; - my ($show_form_details, $hide_form_details); - $myconfig{"show_form_details"} = 1 - unless (defined($myconfig{"show_form_details"})); - $show_form_details = "checked" if ($myconfig{"show_form_details"}); - $hide_form_details = "checked" unless ($myconfig{"show_form_details"}); + TODO->save_user_config('login' => $form->{login}, %{ $form->{todo_cfg} || { } }); + + $form->redirect($locale->text('Preferences saved!')) if (AM->save_preferences(\%myconfig, \%$form, 0)); + $form->error($locale->text('Cannot save preferences!')); + + $lxdebug->leave_sub(); +} + +sub audit_control { + $lxdebug->enter_sub(); + + $auth->assert('config'); + + $form->{title} = $locale->text('Audit Control'); + + AM->closedto(\%myconfig, \%$form); + + $form->header; print qq| -{script}> - - - - + $form->{title} + - - | . $locale->text('Name') . qq| - - - - | . $locale->text('Password') . qq| - - - - | . $locale->text('E-mail') . qq| - - - - | . $locale->text('Signature') . qq| - $myconfig{signature} - - - | . $locale->text('Phone') . qq| - - - - | . $locale->text('Fax') . qq| - - - - | . $locale->text('Company') . qq| - - - - | . $locale->text('Address') . qq| - $myconfig{address} - - - | . $locale->text('Date Format') . qq| - $dateformat - - | . $locale->text('Output Number Format') . qq| - $numberformat - - - - | . $locale->text('Dropdown Limit') . qq| - - - - | . $locale->text('Language') . qq| - $countrycodes - - - | . $locale->text('Stylesheet') . qq| - $selectstylesheet + | . $locale->text('Close Books up to') . qq| + {closedto}> - - | . $locale->text('Setup Menu') . qq| - | . - $locale->text("Top (CSS)") . qq| - | . - $locale->text("Top (Javascript)") . qq| - | . - $locale->text("Old (on the side)") . qq| + + - - | . $locale->text('Form details (second row)') . qq| - - | . $locale->text('Show by default') . qq| - - | . $locale->text('Hide by default') . qq| - - - - | . $locale->text("Print options") . qq| - - - | . $locale->text('Default template format') . qq| - $template_format - - - | . $locale->text('Default output medium') . qq| - $default_media - - - | . $locale->text('Default printer') . qq| - $default_printer - - - | . $locale->text('Number of copies') . qq| - - + - - - - - - | . $locale->text('Business Number') . qq| - - - - | . $locale->text('Year End') . qq| (mm/dd) - {defaults}{yearend}> - - - | - . $locale->text('Last Numbers & Default Accounts') . qq| - - - - - - | . $locale->text('Inventory Account') . qq| - $myconfig{IC} - - - | . $locale->text('Revenue Account') . qq| - $myconfig{IC_income} - - - | . $locale->text('Expense Account') . qq| - $myconfig{IC_expense} - - - | . $locale->text('Foreign Exchange Gain') . qq| - $myconfig{FX_gain} - - - | . $locale->text('Foreign Exchange Loss') . qq| - $myconfig{FX_loss} - - - | - . $locale->text( - 'Enter up to 3 letters separated by a colon (i.e CAD:USD:EUR) for your native and foreign currencies' - ) - . qq| - - - - - - - - - | . $locale->text('Last Invoice Number') . qq| - {defaults}{invnumber}> - | - . $locale->text('Last Customer Number') . qq| - {defaults}{customernumber}> - - - | - . $locale->text('Last Credit Note Number') . qq| - {defaults}{cnnumber}> - | - . $locale->text('Last Vendor Number') . qq| - {defaults}{vendornumber}> - - - | - . $locale->text('Last Sales Order Number') . qq| - {defaults}{sonumber}> - - - | - . $locale->text('Last Purchase Order Number') . qq| - {defaults}{ponumber}> - | - . $locale->text('Last Article Number') . qq| - {defaults}{articlenumber}> - - - | - . $locale->text('Last Sales Quotation Number') . qq| - {defaults}{sqnumber}> - | - . $locale->text('Last Service Number') . qq| - {defaults}{servicenumber}> - - - | . $locale->text('Last RFQ Number') . qq| - {defaults}{rfqnumber}> - - - - - - |; -# -# | . $locale->text('Tax Accounts') . qq| -# -# -# -# -# -# -# | . $locale->text('Rate') . qq| (%) -# | . $locale->text('Number') . qq| -# -# |; -# -# foreach $accno (sort keys %{ $form->{taxrates} }) { -# print qq| -# -# $form->{taxrates}{$accno}{description} -# {taxrates}{$accno}{id} size=6 value=$form->{taxrates}{$accno}{rate}> -# -# -# |; -# $form->{taxaccounts} .= "$form->{taxrates}{$accno}{id} "; -# } -# -# chop $form->{taxaccounts}; -# -# print qq| -# -# -# -# -# -print qq| - - - - - - - -{login}> -{password}> - - - - - - - - -|; - - $lxdebug->leave_sub(); -} - -sub save_preferences { - $lxdebug->enter_sub(); - - $form->{stylesheet} = $form->{usestylesheet}; - - $form->redirect($locale->text('Preferences saved!')) - if ( - AM->save_preferences(\%myconfig, \%$form, $memberfile, $userspath, $webdav - )); - $form->error($locale->text('Cannot save preferences!')); - - $lxdebug->leave_sub(); -} - -sub audit_control { - $lxdebug->enter_sub(); - - $form->{title} = $locale->text('Audit Control'); - - AM->closedto(\%myconfig, \%$form); - - if ($form->{revtrans}) { - $checked{Y} = "checked"; - } else { - $checked{N} = "checked"; - } - - $form->header; - - print qq| - - -{script}> - -{login}> -{password}> - - - $form->{title} - - - - - - | - . $locale->text('Enforce transaction reversal for all dates') . qq| - | - . $locale->text('Yes') - . qq| | - . $locale->text('No') - . qq| - - - | . $locale->text('Close Books up to') . qq| - {closedto}> - - - - - - - + @@ -2825,19 +2602,16 @@ sub audit_control { sub doclose { $lxdebug->enter_sub(); + $auth->assert('config'); + AM->closebooks(\%myconfig, \%$form); - if ($form->{revtrans}) { + if ($form->{closedto}) { $form->redirect( - $locale->text('Transaction reversal enforced for all dates')); + $locale->text('Books closed up to') . " " + . $locale->date(\%myconfig, $form->{closedto}, 1)); } else { - if ($form->{closedto}) { - $form->redirect( - $locale->text('Transaction reversal enforced up to') . " " - . $locale->date(\%myconfig, $form->{closedto}, 1)); - } else { - $form->redirect($locale->text('Books are open')); - } + $form->redirect($locale->text('Books are open')); } $lxdebug->leave_sub(); @@ -2846,7 +2620,9 @@ sub doclose { sub edit_units { $lxdebug->enter_sub(); - $units = AM->retrieve_units(\%myconfig, $form, $form->{"unit_type"}, "resolved_"); + $auth->assert('config'); + + $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})); @@ -2870,18 +2646,18 @@ sub edit_units { $i++; } - $units = AM->retrieve_units(\%myconfig, $form, $form->{"unit_type"}); + $units = AM->retrieve_units(\%myconfig, $form); $ddbox = AM->unit_select_data($units, undef, 1); - my $updownlink = build_std_url("action=swap_units", "unit_type"); + my $updownlink = build_std_url("action=swap_units"); - $form->{"title"} = sprintf($locale->text("Add and edit %s"), $form->{"unit_type"} eq "dimension" ? $locale->text("dimension units") : $locale->text("service units")); + $form->{"title"} = $locale->text("Add and edit units"); $form->header(); print($form->parse_html_template("am/edit_units", - { "UNITS" => \@unit_list, + { "UNITS" => \@unit_list, "NEW_BASE_UNIT_DDBOX" => $ddbox, - "LANGUAGES" => \@languages, - "updownlink" => $updownlink })); + "LANGUAGES" => \@languages, + "updownlink" => $updownlink })); $lxdebug->leave_sub(); } @@ -2889,8 +2665,10 @@ sub edit_units { sub add_unit { $lxdebug->enter_sub(); + $auth->assert('config'); + $form->isblank("new_name", $locale->text("The name is missing.")); - $units = AM->retrieve_units(\%myconfig, $form, $form->{"unit_type"}); + $units = AM->retrieve_units(\%myconfig, $form); $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"}}); @@ -2913,7 +2691,7 @@ sub add_unit { }); } - AM->add_unit(\%myconfig, $form, $form->{"new_name"}, $base_unit, $factor, $form->{"unit_type"}, \@languages); + AM->add_unit(\%myconfig, $form, $form->{"new_name"}, $base_unit, $factor, \@languages); $form->{"saved_message"} = $locale->text("The unit has been saved."); @@ -2925,6 +2703,8 @@ sub add_unit { sub set_unit_languages { $lxdebug->enter_sub(); + $auth->assert('config'); + my ($unit, $languages, $idx) = @_; $unit->{"LANGUAGES"} = []; @@ -2943,7 +2723,9 @@ sub set_unit_languages { sub save_unit { $lxdebug->enter_sub(); - $old_units = AM->retrieve_units(\%myconfig, $form, $form->{"unit_type"}, "resolved_"); + $auth->assert('config'); + + $old_units = AM->retrieve_units(\%myconfig, $form, "resolved_"); AM->units_in_use(\%myconfig, $form, $old_units); @languages = AM->language(\%myconfig, $form, 1); @@ -3009,7 +2791,7 @@ sub save_unit { } } - AM->save_units(\%myconfig, $form, $form->{"unit_type"}, $new_units, \@delete_units); + AM->save_units(\%myconfig, $form, $new_units, \@delete_units); $form->{"saved_message"} = $locale->text("The units have been saved."); @@ -3019,121 +2801,442 @@ sub save_unit { } sub show_history_search { - $lxdebug->enter_sub(); - - $form->{title} = $locale->text("History Search"); - $form->header(); - - print $form->parse_html_template("/common/search_history"); - - $lxdebug->leave_sub(); + $lxdebug->enter_sub(); + + $auth->assert('config'); + + $form->{title} = $locale->text("History Search"); + $form->header(); + + print $form->parse_html_template("common/search_history"); + + $lxdebug->leave_sub(); } sub show_am_history { - $lxdebug->enter_sub(); - my %search = ( "Artikelnummer" => "parts", - "Kundennummer" => "customer", - "Lieferantennummer" => "vendor", - "Projektnummer" => "project", - "Buchungsnummer" => "oe", - "Eingangsrechnungnummer" => "ap", - "Ausgangsrechnungnummer" => "ar", - "Mahnungsnummer" => "dunning" - ); - my %searchNo = ( "Artikelnummer" => "partnumber", - "Kundennummer" => "customernumber", - "Lieferantennummer" => "vendornumber", - "Projektnummer" => "projectnummer", - "Buchungsnummer" => "ordnumber", - "Eingangsrechnungnummer" => "invnumber", - "Ausgangsrechnungnummer" => "invnumber", - "Mahnungsnummer" => "dunning_id" - ); - - my $restriction; - my $tempNo = 0; - foreach(split(/\,/, $form->{einschraenkungen})) { - if($tempNo == 0) { - $restriction .= " AND addition = '" . $_ . "'"; - $tempNo = 1; - } - else { - $restriction .= " OR addition = '" . $_ . "'"; - } - } - $restriction .= (($form->{transdate} ne "" && $form->{reqdate} ne "") - ? qq| AND st.itime::date >= '| . $form->{transdate} . qq|' AND st.itime::date <= '| . $form->{reqdate} . qq|'| - : (($form->{transdate} ne "" && $form->{reqdate} eq "") - ? qq| AND st.itime::date >= '| . $form->{transdate} . qq|'| - : ($form->{transdate} eq "" && $form->{reqdate} ne "") - ? qq| AND st.itime::date <= '| . $form->{reqdate} . qq|'| - : "" - ) - ); - $restriction .= ($form->{mitarbeiter} eq "" ? "" - : ($form->{mitarbeiter} =~ /^[0-9]*$/ - ? " AND employee_id = " . $form->{mitarbeiter} - : " AND employee_id = " . &get_employee_id($form->{mitarbeiter}, $dbh))); - - my $dbh = $form->dbconnect(\%myconfig); - my $query = qq|SELECT trans_id AS id FROM history_erp | . - ($form->{'searchid'} ? - qq| WHERE snumbers = '| . $searchNo{$form->{'what2search'}} . qq|_| . $form->{'searchid'} . qq|'| : - qq| WHERE snumbers ~ '^| . $searchNo{$form->{'what2search'}} . qq|'|); - - my $sth = $dbh->prepare($query); - - $sth->execute() || $form->dberror($query); - - $form->{title} = $locale->text("History Search"); - $form->header(); - - my $i = 1; - my $daten = qq||; - while(my $hash_ref = $sth->fetchrow_hashref()){ - if($i) { - $daten .= $hash_ref->{id}; - $i = 0; - } - else { - $daten .= " OR trans_id = " . $hash_ref->{id}; - } + $lxdebug->enter_sub(); + + $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", + "Buchungsnummer" => "oe", + "Eingangsrechnungnummer" => "ap", + "Ausgangsrechnungnummer" => "ar", + "Mahnungsnummer" => "dunning" + ); + my %searchNo = ( "Artikelnummer" => "partnumber", + "Kundennummer" => "customernumber", + "Lieferantennummer" => "vendornumber", + "Projektnummer" => "projectnummer", + "Buchungsnummer" => "ordnumber", + "Eingangsrechnungnummer" => "invnumber", + "Ausgangsrechnungnummer" => "invnumber", + "Mahnungsnummer" => "dunning_id" + ); + + my $dbh = $form->dbconnect(\%myconfig); + + my $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|)|; } - + + my $query = qq|SELECT trans_id AS id FROM history_erp | . + ( $form->{'searchid'} ? qq| WHERE snumbers = '| . $searchNo{$form->{'what2search'}} . qq|_| . $form->{'searchid'} . qq|'| + : qq| WHERE snumbers ~ '^| . $searchNo{$form->{'what2search'}} . qq|'|); + + my @ids = grep { $_ * 1 } selectall_array_query($form, $dbh, $query); + my $daten .= shift @ids; + $daten .= join '', map { " OR trans_id = $_" } @ids; + my ($sort, $sortby) = split(/\-\-/, $form->{order}); $sort =~ s/.*\.(.*)$/$1/; - 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 - }); - $dbh->disconnect(); - $lxdebug->leave_sub(); -} + $form->{title} = $locale->text("History Search"); + $form->header(); + + 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(); -sub get_employee_id { - $lxdebug->enter_sub(); - my $query = qq|SELECT id FROM employee WHERE name = '| . $_[0] . qq|'|; - my $sth = $_[1]->prepare($query); - $sth->execute() || $form->dberror($query); - my $return = $sth->fetch(); - $sth->finish(); - return ${$return}[0]; - $lxdebug->leave_sub(); + $lxdebug->leave_sub(); } sub swap_units { $lxdebug->enter_sub(); + $auth->assert('config'); + my $dir = $form->{"dir"} eq "down" ? "down" : "up"; - my $unit_type = $form->{"unit_type"} eq "dimension" ? - "dimension" : "service"; - AM->swap_units(\%myconfig, $form, $dir, $form->{"name"}, $unit_type); + AM->swap_units(\%myconfig, $form, $dir, $form->{"name"}); edit_units(); $lxdebug->leave_sub(); } + +sub add_tax { + $lxdebug->enter_sub(); + + $auth->assert('config'); + + $form->{title} = $locale->text('Add'); + + $form->{callback} ||= "am.pl?action=add_tax"; + + _get_taxaccount_selection(); + + $form->header(); + + my $parameters_ref = { +# ChartTypeIsAccount => $ChartTypeIsAccount, + }; + + # Ausgabe des Templates + print($form->parse_html_template('am/edit_tax', $parameters_ref)); + + $lxdebug->leave_sub(); +} + +sub edit_tax { + $lxdebug->enter_sub(); + + $auth->assert('config'); + + $form->{title} = $locale->text('Edit'); + + AM->get_tax(\%myconfig, \%$form); + _get_taxaccount_selection(); + + $form->{rate} = $form->format_amount(\%myconfig, $form->{rate}, 2); + + $form->header(); + + my $parameters_ref = { + }; + + # Ausgabe des Templates + print($form->parse_html_template('am/edit_tax', $parameters_ref)); + + $lxdebug->leave_sub(); +} + +sub list_tax { + $lxdebug->enter_sub(); + + $auth->assert('config'); + + AM->taxes(\%myconfig, \%$form); + + map { $_->{rate} = $form->format_amount(\%myconfig, $_->{rate}, 2) } @{ $form->{TAX} }; + + $form->{callback} = build_std_url('action=list_tax'); + + $form->{title} = $locale->text('Tax-O-Matic'); + + $form->header(); + + # Ausgabe des Templates + print($form->parse_html_template('am/list_tax', $parameters_ref)); + + $lxdebug->leave_sub(); +} + +sub _get_taxaccount_selection{ + $lxdebug->enter_sub(); + + $auth->assert('config'); + + AM->get_tax_accounts(\%myconfig, \%$form); + + map { $_->{selected} = $form->{chart_id} == $_->{id} } @{ $form->{ACCOUNTS} }; + + $lxdebug->leave_sub(); +} + +sub save_tax { + $lxdebug->enter_sub(); + + $auth->assert('config'); + + $form->isblank("rate", $locale->text('Taxrate missing!')); + $form->isblank("taxdescription", $locale->text('Taxdescription missing!')); + $form->isblank("taxkey", $locale->text('Taxkey missing!')); + + $form->{rate} = $form->parse_amount(\%myconfig, $form->{rate}); + + if ( $form->{rate} < 0 || $form->{rate} >= 100 ) { + $form->error($locale->text('Tax Percent is a number between 0 and 100')); + } + + if ( $form->{rate} <= 0.99 && $form->{rate} > 0 ) { + $form->error($locale->text('Tax Percent is a number between 0 and 100')); + } + + AM->save_tax(\%myconfig, \%$form); + $form->redirect($locale->text('Tax saved!')); + + $lxdebug->leave_sub(); +} + +sub delete_tax { + $lxdebug->enter_sub(); + + $auth->assert('config'); + + AM->delete_tax(\%myconfig, \%$form); + $form->redirect($locale->text('Tax deleted!')); + + $lxdebug->leave_sub(); +} + +sub add_price_factor { + $lxdebug->enter_sub(); + + $auth->assert('config'); + + $form->{title} = $locale->text('Add Price Factor'); + $form->{callback} ||= build_std_url('action=add_price_factor'); + $form->{fokus} = 'description'; + + $form->header(); + print $form->parse_html_template('am/edit_price_factor'); + + $lxdebug->leave_sub(); +} + +sub edit_price_factor { + $lxdebug->enter_sub(); + + $auth->assert('config'); + + $form->{title} = $locale->text('Edit Price Factor'); + $form->{callback} ||= build_std_url('action=add_price_factor'); + $form->{fokus} = 'description'; + + AM->get_price_factor(\%myconfig, $form); + + $form->{factor} = $form->format_amount(\%myconfig, $form->{factor} * 1); + + $form->header(); + print $form->parse_html_template('am/edit_price_factor'); + + $lxdebug->leave_sub(); +} + +sub list_price_factors { + $lxdebug->enter_sub(); + + $auth->assert('config'); + + AM->get_all_price_factors(\%myconfig, \%$form); + + my $previous; + foreach my $current (@{ $form->{PRICE_FACTORS} }) { + if ($previous) { + $previous->{next_id} = $current->{id}; + $current->{previous_id} = $previous->{id}; + } + + $current->{factor} = $form->format_amount(\%myconfig, $current->{factor} * 1); + + $previous = $current; + } + + $form->{callback} = build_std_url('action=list_price_factors'); + $form->{title} = $locale->text('Price Factors'); + $form->{url_base} = build_std_url('callback'); + + $form->header(); + print $form->parse_html_template('am/list_price_factors'); + + $lxdebug->leave_sub(); +} + +sub save_price_factor { + $lxdebug->enter_sub(); + + $auth->assert('config'); + + $form->isblank("description", $locale->text('Description missing!')); + $form->isblank("factor", $locale->text('Factor missing!')); + + $form->{factor} = $form->parse_amount(\%myconfig, $form->{factor}); + + AM->save_price_factor(\%myconfig, $form); + + $form->{callback} .= '&MESSAGE=' . $form->escape($locale->text('Price factor saved!')) if ($form->{callback}); + + $form->redirect($locale->text('Price factor saved!')); + + $lxdebug->leave_sub(); +} + +sub delete_price_factor { + $lxdebug->enter_sub(); + + $auth->assert('config'); + + AM->delete_price_factor(\%myconfig, \%$form); + + $form->{callback} .= '&MESSAGE=' . $form->escape($locale->text('Price factor deleted!')) if ($form->{callback}); + + $form->redirect($locale->text('Price factor deleted!')); + + $lxdebug->leave_sub(); +} + +sub swap_price_factors { + $lxdebug->enter_sub(); + + $auth->assert('config'); + + AM->swap_sortkeys(\%myconfig, $form, 'price_factors'); + list_price_factors(); + + $lxdebug->leave_sub(); +} + +sub add_warehouse { + $lxdebug->enter_sub(); + + $auth->assert('config'); + + $form->{title} = $locale->text('Add Warehouse'); + $form->{callback} ||= build_std_url('action=add_warehouse'); + $form->{fokus} = 'description'; + + $form->header(); + print $form->parse_html_template('am/edit_warehouse'); + + $lxdebug->leave_sub(); +} + +sub edit_warehouse { + $lxdebug->enter_sub(); + + $auth->assert('config'); + + AM->get_warehouse(\%myconfig, $form); + + $form->get_lists('employees' => 'EMPLOYEES'); + + $form->{title} = $locale->text('Edit Warehouse'); + $form->{callback} ||= build_std_url('action=list_warehouses'); + $form->{fokus} = 'description'; + + $form->header(); + print $form->parse_html_template('am/edit_warehouse'); + + $lxdebug->leave_sub(); +} + +sub list_warehouses { + $lxdebug->enter_sub(); + + $auth->assert('config'); + + AM->get_all_warehouses(\%myconfig, $form); + + my $previous; + foreach my $current (@{ $form->{WAREHOUSES} }) { + if ($previous) { + $previous->{next_id} = $current->{id}; + $current->{previous_id} = $previous->{id}; + } + + $previous = $current; + } + + $form->{callback} = build_std_url('action=list_warehouses'); + $form->{title} = $locale->text('Warehouses'); + $form->{url_base} = build_std_url('callback'); + + $form->header(); + print $form->parse_html_template('am/list_warehouses'); + + $lxdebug->leave_sub(); +} + +sub save_warehouse { + $lxdebug->enter_sub(); + + $auth->assert('config'); + + $form->isblank("description", $locale->text('Description missing!')); + + $form->{number_of_new_bins} = $form->parse_amount(\%myconfig, $form->{number_of_new_bins}); + + AM->save_warehouse(\%myconfig, $form); + + $form->{callback} .= '&saved_message=' . E($locale->text('Warehouse saved.')) if ($form->{callback}); + + $form->redirect($locale->text('Warehouse saved.')); + + $lxdebug->leave_sub(); +} + +sub swap_warehouses { + $lxdebug->enter_sub(); + + $auth->assert('config'); + + AM->swap_sortkeys(\%myconfig, $form, 'warehouse'); + list_warehouses(); + + $lxdebug->leave_sub(); +} + +sub delete_warehouse { + $lxdebug->enter_sub(); + + $auth->assert('config'); + + if (!$form->{confirmed}) { + $form->{title} = $locale->text('Confirmation'); + + $form->header(); + print $form->parse_html_template('am/confirm_delete_warehouse'); + exit 0; + } + + if (AM->delete_warehouse(\%myconfig, $form)) { + $form->{callback} .= '&saved_message=' . E($locale->text('Warehouse deleted.')) if ($form->{callback}); + $form->redirect($locale->text('Warehouse deleted.')); + + } else { + $form->error($locale->text('The warehouse could not be deleted because it has already been used.')); + } + + $lxdebug->leave_sub(); +} + +sub save_bin { + $lxdebug->enter_sub(); + + $auth->assert('config'); + + AM->save_bins(\%myconfig, $form); + + $form->{callback} .= '&saved_message=' . E($locale->text('Bins saved.')) if ($form->{callback}); + + $form->redirect($locale->text('Bins saved.')); + + $lxdebug->leave_sub(); +}