X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=bin%2Fmozilla%2Fcommon.pl;h=bcdb599966dae549c322e5909cb699f45d064e96;hb=91ab1ef646193de9359076a876a33a74d7691145;hp=359e586013edbb37d6eb19973644c23d97a2c02e;hpb=c90ba6c8ad4b35f2b7cd3159165aab5f29b4e3d2;p=kivitendo-erp.git diff --git a/bin/mozilla/common.pl b/bin/mozilla/common.pl index 359e58601..bcdb59996 100644 --- a/bin/mozilla/common.pl +++ b/bin/mozilla/common.pl @@ -14,7 +14,7 @@ use SL::Common; use SL::MoreCommon; sub build_std_url { - $lxdebug->enter_sub(); + $lxdebug->enter_sub(2); my $script = $form->{script}; @@ -37,7 +37,7 @@ sub build_std_url { my $url = "${script}?" . join('&', @parts); - $lxdebug->leave_sub(); + $lxdebug->leave_sub(2); return $url; } @@ -80,6 +80,123 @@ sub select_employee_internal { $lxdebug->leave_sub(); } +## Customers/Vendors + +sub check_customer_or_vendor { + $lxdebug->enter_sub(); + + my ($field, $cov_selected_nextsub, $is_vendor) = @_; + + if ($form->{"f_${field}"} eq $form->{"f_old_${field}"}) { + $lxdebug->leave_sub(); + return 1; + } + + my $type = $is_vendor ? $locale->text("vendor") : $locale->text("customer"); + + my $old_form = save_form(); + $form->{"name"} = $form->{"f_${field}"}; + $form->{"obsolete"} = 1; + my $covs; + $covs = Common->retrieve_customers_or_vendors(\%myconfig, $form, "name", 1, $is_vendor); + restore_form($old_form); + + if (0 == scalar(@{$covs})) { + $form->header(); + $form->show_generic_error(sprintf($locale->text("There is no %s whose name matches '%s'."), $type, $form->{"f_${field}"})); + + $lxdebug->leave_sub(); + return 0; + + } + + if (1 != scalar(@{$covs})) { + # If there is more than one CoV with the same name + # then we have to check if the ID is set, too. Otherwise + # we'd be stuck in an endless loop. + if ($form->{"f_${field}_id"}) { + foreach my $cov (@{$covs}) { + if (($form->{"f_${field}_id"} == $cov->{"id"}) && + ($form->{"f_${field}"} eq $cov->{"name"})) { + $lxdebug->leave_sub(); + return 1; + } + } + } + + $form->{"cov_selected_nextsub"} = $cov_selected_nextsub; + $form->{"check_cov_field"} = $field; + select_customer_or_vendor("cov_selected", $is_vendor, @{$covs}); + $lxdebug->leave_sub(); + return 0; + } + + $form->{"f_${field}_id"} = $covs->[0]->{"id"}; + $form->{"f_${field}"} = $covs->[0]->{"name"}; + + $lxdebug->leave_sub(); + + return 1; +} + +sub select_customer_or_vendor { + $lxdebug->enter_sub(); + + my ($callback_sub, $is_vendor, @covs) = @_; + + my $old_form = save_form(); + + if (0 == scalar(@covs)) { + delete($form->{"name"}); + $form->{"obsolete"} = 1; + my $c = Common->retrieve_customers_or_vendors(\%myconfig, $form, "name", 1, $is_vendor); + restore_form($old_form); + @covs = @{$c}; + } + + $form->header(); + print($form->parse_html_template("generic/select_customer_or_vendor", + { "COVS" => \@covs, + "old_form" => $old_form, + "title" => $is_vendor ? $locale->text("Select a vendor") : $locale->text("Select a customer"), + "nextsub" => "select_cov_internal", + "callback_sub" => $callback_sub })); + + $lxdebug->leave_sub(); +} + +sub cov_selected { + $lxdebug->enter_sub(); + my ($new_id, $new_name) = @_; + + my $field = $form->{"check_cov_field"}; + delete($form->{"check_cov_field"}); + + $form->{"f_${field}_id"} = $new_id; + $form->{"f_${field}"} = $new_name; + $form->{"f_old_${field}"} = $new_name; + + &{ $form->{"cov_selected_nextsub"} }(); + + $lxdebug->leave_sub(); +} + +sub select_cov_internal { + $lxdebug->enter_sub(); + + my ($new_id, $new_name, $callback_sub); + + my $new_id = $form->{"new_id_" . $form->{"selection"}}; + my $new_name = $form->{"new_name_" . $form->{"selection"}}; + my $callback_sub = $form->{"callback_sub"}; + + restore_form($form->{"old_form"}); + + &{ $callback_sub }($new_id, $new_name); + + $lxdebug->leave_sub(); +} + sub select_part { $lxdebug->enter_sub(); @@ -307,9 +424,9 @@ sub delivery_customer_selection { $form->{"title"} = $locale->text("Select a Customer"); $form->header(); - print($form->parse_html_template("generic/select_delivery_customer", { "HEADER" => \@header, - "DELIVERY" => $delivery, - "onload" => $onload })); + print $form->parse_html_template("generic/select_delivery_customer", { "HEADER" => \@header, + "DELIVERY" => $delivery, + "onload" => $onload }); $lxdebug->leave_sub(); } @@ -349,9 +466,9 @@ sub vendor_selection { $form->{"title"} = $locale->text("Select a Customer"); $form->header(); - print($form->parse_html_template("generic/select_vendor", { "HEADER" => \@header, - "VENDOR" => $vendor, - "onload" => $onload })); + print $form->parse_html_template("generic/select_vendor", { "HEADER" => \@header, + "VENDOR" => $vendor, + "onload" => $onload }); $lxdebug->leave_sub(); } @@ -395,9 +512,9 @@ sub calculate_qty { $form->{formel} = $formel; $form->{"title"} = $locale->text("Please enter values"); $form->header(); - print($form->parse_html_template("generic/calculate_qty", { "HEADER" => \@header, - "VARIABLES" => \@variable, - "onload" => $onload })); + print($form->parse_html_template("generic/calculate_qty", { "HEADER" => \@header, + "VARIABLES" => \@variable, + "onload" => $onload })); $lxdebug->leave_sub(); } @@ -405,14 +522,9 @@ sub calculate_qty { sub set_longdescription { $lxdebug->enter_sub(); - - my $callback = "$form->{script}?action=set_longdescription&"; - map({ $callback .= "$_=" . $form->escape($form->{$_}) . "&" } - (qw(login password name input_name input_id), grep({ /^[fl]_/ } keys %$form))); - - $form->{"title"} = $locale->text("Enter longdescription"); + $form->{title} = $locale->text("Enter longdescription"); $form->header(); - print($form->parse_html_template("generic/set_longdescription")); + print $form->parse_html_template("generic/set_longdescription"); $lxdebug->leave_sub(); } @@ -559,10 +671,177 @@ sub show_vc_details { $form->{title} = $form->{vc} eq "customer" ? $locale->text("Customer details") : $locale->text("Vendor details"); $form->header(); - print($form->parse_html_template("common/show_vc_details", - { "is_customer" => $form->{vc} eq "customer" })); + print $form->parse_html_template("common/show_vc_details", { "is_customer" => $form->{vc} eq "customer" }); $lxdebug->leave_sub(); } +sub mark_as_paid_common { + $lxdebug->enter_sub(); + use SL::DBUtils; + my ($myconfig, $db_name) = @_; + + if($form->{mark_as_paid}) { + my $dbh ||= $form->get_standard_dbh($myconfig); + my $query = qq|UPDATE $db_name SET paid = amount WHERE id = ?|; + do_query($form, $dbh, $query, $form->{id}); + $dbh->commit(); + $form->redirect($locale->text("Marked as paid")); +} + else { + my $referer = $ENV{HTTP_REFERER}; + my $login = $form->escape($form->{login}); + my $password = $form->escape($form->{password}); + my $id = $form->escape($form->{id}); + $referer =~ s/^(.*)action\=.*\&(.*)$/$1action\=mark_as_paid\&mark_as_paid\=1\&login\=$login\&password\=$password\&id\=$id\&$2/; + $form->header(); + print qq||; + print qq|

|.$locale->text('Mark as paid?').qq|

|; + print qq| |; + print qq||; + print qq||; +} + + $lxdebug->leave_sub(); +} + +sub cov_selection_internal { + $lxdebug->enter_sub(); + + $order_by = "name"; + $order_by = $form->{"order_by"} if (defined($form->{"order_by"})); + $order_dir = 1; + $order_dir = $form->{"order_dir"} if (defined($form->{"order_dir"})); + + my $type = $form->{"is_vendor"} ? $locale->text("vendor") : $locale->text("customer"); + + $covs = Common->retrieve_customers_or_vendors(\%myconfig, $form, $order_by, $order_dir, $form->{"is_vendor"}, $form->{"allow_both"}); + map({ $covs->[$_]->{"selected"} = $_ ? 0 : 1; } (0..$#{$covs})); + if (0 == scalar(@{$covs})) { + $form->show_generic_information(sprintf($locale->text("No %s was found matching the search parameters."), $type)); + } elsif (1 == scalar(@{$covs})) { + $onload = "cov_selected('1')"; + } + + my $callback = "$form->{script}?action=cov_selection_internal&"; + map({ $callback .= "$_=" . $form->escape($form->{$_}) . "&" } + (qw(login path password name input_name input_id is_vendor allow_both), grep({ /^[fl]_/ } keys %$form))); + + my @header_sort = qw(name address contact); + my %header_title = ( "name" => $locale->text("Name"), + "address" => $locale->text("Address"), + "contact" => $locale->text("Contact"), + ); + + my @header = + map(+{ "column_title" => $header_title{$_}, + "column" => $_, + "callback" => $callback . "order_by=${_}&order_dir=" . ($order_by eq $_ ? 1 - $order_dir : $order_dir), + }, + @header_sort); + + foreach my $cov (@{ $covs }) { + $cov->{address} = "$cov->{street}, $cov->{zipcode} $cov->{city}"; + $cov->{address} =~ s{^,}{}x; + $cov->{address} =~ s{\ +}{\ }gx; + + $cov->{contact} = join " ", map { $cov->{$_} } qw(cp_greeting cp_title cp_givenname cp_name); + $cov->{contact} =~ s{\ +}{\ }gx; + } + + $form->{"title"} = $form->{is_vendor} ? $locale->text("Select a vendor") : $locale->text("Select a customer"); + $form->header(); + print($form->parse_html_template("generic/cov_selection", { "HEADER" => \@header, + "COVS" => $covs, + "onload" => $onload })); + + $lxdebug->leave_sub(); +} + +sub check_cov2 { + $lxdebug->enter_sub(); + + my $callback_sub = shift; + + if (!$form->{customer} + || ($form->{customer} eq $form->{old_customer}) + || ("$form->{customer}--$form->{customer_id}" eq $form->{old_customer})) { + $lxdebug->leave_sub(); + return; + } + + $old_name = $form->{name}; + $form->{name} = $form->{customer}; + + my $covs = Common->retrieve_customers_or_vendors(\%myconfig, $form, "name", "ASC", 0, 1); + + $form->{name} = $old_name; + + if (0 == scalar @{$covs}) { + $form->show_generic_information(sprintf($locale->text("No %s was found matching the search parameters."), $type)); + + } elsif (1 == scalar @{ $covs }) { + $form->{customer} = $covs->[0]->{name}; + $form->{old_customer} = $covs->[0]->{name}; + $form->{customer_id} = $covs->[0]->{id}; + $form->{customer_is_vendor} = $covs->[0]->{customer_is_vendor}; + + } else { + $form->{new_cov_nextsub} = $callback_sub; + + delete @{$form}{qw(customer customer_is_vendor customer_id old_customer action)}; + my @hidden = map { { 'key' => $_, 'value' => $form->{$_} } } grep { '' eq ref $form->{$_} } keys %{ $form }; + + foreach my $cov (@{ $covs }) { + $cov->{address} = "$cov->{street}, $cov->{zipcode} $cov->{city}"; + $cov->{address} =~ s{^,}{}x; + $cov->{address} =~ s{\ +}{\ }gx; + + $cov->{contact} = join " ", map { $cov->{$_} } qw(cp_greeting cp_title cp_givenname cp_name); + $cov->{contact} =~ s{\ +}{\ }gx; + } + + $form->{title} = $locale->text("Select a vendor or customer"); + $form->header(); + + print $form->parse_html_template("generic/cov_selection2", { "COVS" => $covs, "HIDDEN" => \@hidden }); + + exit 0; + } + + $lxdebug->leave_sub(); +} + +sub cov_selected2 { + $lxdebug->enter_sub(); + + if (!$form->{new_cov} || !$form->{new_cov_nextsub}) { + $form->error($locale->text('No customer has been selected.')); + } + + map { $form->{$_} = $form->{"new_cov_${_}_$form->{new_cov}"} } qw(customer customer_id customer_is_vendor); + $form->{old_customer} = $form->{customer}; + + &{ $form->{new_cov_nextsub} }(); + + $lxdebug->leave_sub(); +} + +sub select_item_selection_internal { + $lxdebug->enter_sub(); + + @items = SystemBrace->retrieve_select_items(\%myconfig, $form, $form->{"select_item_type"}); + if (0 == scalar(@items)) { + $form->show_generic_information($locale->text("No item was found.")); + } elsif (1 == scalar(@items)) { + $onload = "select_item_selected('1')"; + } + + $form->{"title"} = $locale->text("Select an entry"); + $form->header(); + print($form->parse_html_template("generic/select_item_selection", { "SELECT_ITEMS" => \@items, + "onload" => $onload })); + + $lxdebug->leave_sub(); +} 1;