X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=bin%2Fmozilla%2Fio.pl;h=b4f85af3c4a4e588e5f84927095fe1df446053fa;hb=a40f0c2f7523a7d6936ca483901c22dfe86358c9;hp=b96f770f3e583cc35100dfebbc5d66938ce04f01;hpb=d814a525b9f2fbc0bfae5591201d9185d6b1e8f4;p=kivitendo-erp.git diff --git a/bin/mozilla/io.pl b/bin/mozilla/io.pl index b96f770f3..b4f85af3c 100644 --- a/bin/mozilla/io.pl +++ b/bin/mozilla/io.pl @@ -28,7 +28,8 @@ # 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. # ####################################################################### # @@ -49,6 +50,7 @@ use SL::CT; use SL::Locale::String qw(t8); use SL::IC; use SL::IO; +use SL::File; use SL::PriceSource; use SL::DB::Customer; @@ -103,7 +105,6 @@ if (-f "bin/mozilla/$::myconfig{login}_io.pl") { # $locale->text('Nov') # $locale->text('Dec') use SL::IS; -use SL::PE; use SL::AM; use Data::Dumper; @@ -159,7 +160,7 @@ sub display_row { # column_index my @header_sort = qw( - runningnumber partnumber description ship ship_missing qty price_factor + runningnumber partnumber type_and_classific description ship ship_missing qty price_factor unit weight price_source sellprice discount linetotal bin stock_in_out ); @@ -169,6 +170,8 @@ sub display_row { my %column_def = ( runningnumber => { width => 5, value => $locale->text('No.'), display => 1, }, partnumber => { width => 8, value => $locale->text('Number'), display => 1, }, + type_and_classific + => { width => 2, value => $locale->text('Type'), display => 1, }, description => { width => 30, value => $locale->text('Part Description'), display => 1, }, ship => { width => 5, value => $locale->text('Delivered'), display => $is_s_p_order, }, ship_missing => { width => 5, value => $locale->text('Not delivered'), display => $show_ship_missing, }, @@ -295,12 +298,14 @@ sub display_row { my $rows = $form->numtextrows($form->{"description_$i"}, 30, 6); # quick delete single row - $column_data{runningnumber} .= q|| . + $column_data{runningnumber} = q|| . q|| . $locale->text('Remove') . q| |; $column_data{runningnumber} .= $cgi->textfield(-name => "runningnumber_$i", -id => "runningnumber_$i", -size => 5, -value => $i); # HuT $column_data{partnumber} = $cgi->textfield(-name => "partnumber_$i", -id => "partnumber_$i", -size => 12, -value => $form->{"partnumber_$i"}); + $column_data{type_and_classific} = $::request->presenter->type_abbreviation($form->{"part_type_$i"}). + $::request->presenter->classification_abbreviation($form->{"classification_id_$i"}) if $form->{"id_$i"}; $column_data{description} = (($rows > 1) # if description is too large, use a textbox instead ? $cgi->textarea( -name => "description_$i", -id => "description_$i", -default => $form->{"description_$i"}, -rows => $rows, -columns => 30) : $cgi->textfield(-name => "description_$i", -id => "description_$i", -value => $form->{"description_$i"}, -size => 30)) @@ -604,7 +609,7 @@ sub item_selected { my @new_fields = qw(id partnumber description sellprice listprice inventory_accno - income_accno expense_accno bin unit weight assembly taxaccounts + income_accno expense_accno bin unit weight part_type taxaccounts partsgroup formel longdescription not_discountable partnotes lastcost price_factor_id price_factor); @@ -665,15 +670,14 @@ sub item_selected { map { $amount += ($form->{"${_}_base"} * $form->{"${_}_rate"}) } split / /, $form->{"taxaccounts_$i"} if !$form->{taxincluded}; $form->{creditremaining} -= $amount; - $form->{"runningnumber_$i"} = $i; # format amounts map { $form->{"${_}_$i"} = $form->format_amount(\%myconfig, $form->{"${_}_$i"}, $decimalplaces) - } qw(sellprice lastcost qty) if $form->{item} ne 'assembly'; - $form->{"discount_$i"} = $form->format_amount(\%myconfig, $form->{"discount_$i"} * 100.0) if $form->{item} ne 'assembly'; + } qw(sellprice lastcost qty) if $form->{part_type} ne 'assembly'; + $form->{"discount_$i"} = $form->format_amount(\%myconfig, $form->{"discount_$i"} * 100.0) if $form->{part_type} ne 'assembly'; delete $form->{nextsub}; @@ -727,7 +731,7 @@ sub check_form { my $count = 0; # remove any makes or model rows - if ($form->{item} eq 'assembly') { + if ($form->{part_type} eq 'assembly') { # fuer assemblies auskommentiert. seiteneffekte? ;-) wird die woanders benoetigt? #$form->{sellprice} = 0; @@ -760,7 +764,7 @@ sub check_form { $form->redo_rows(\@flds, \@a, $count, $form->{assembly_rows}); $form->{assembly_rows} = $count; - } elsif ($form->{item} !~ m{^(?:part|service)$}) { + } elsif ($form->{part_type} !~ m{^(?:part|service)$}) { remove_emptied_rows(1); $form->{creditremaining} -= &invoicetotal; @@ -860,7 +864,7 @@ sub validate_items { if ($form->{rowcount} == 1) { flash('warning', $::locale->text('The action you\'ve chosen has not been executed because the document does not contain any item yet.')); &update; - ::end_of_request(); + $::dispatcher->end_request; } for my $i (1 .. $form->{rowcount} - 1) { @@ -888,10 +892,22 @@ sub order { $form->{old_employee_id} = $form->{employee_id}; $form->{old_salesman_id} = $form->{salesman_id}; - # link doc invoice -> quotation (single id no multi mode) - $form->{convert_from_ar_ids} = delete $form->{id}; - delete $form->{$_} foreach (qw(printed emailed queued)); + + # When creating a new sales order from a saved sales invoice, reset id, + # ordnumber, transdate and deliverydate as we are creating a new order. This + # workflow is probably mainly used as a template mechanism for creating new + # orders from existing invoices, so we probably don't want to link the items. + # Is this order function called anywhere else? + # The worksflows in oe already call sales_order and purchase_order in oe, not + # this general function which now only seems to be called from saved sales + # invoices + # Why is ordnumber set to invnumber above, does this ever make sense? + + if ( $form->{script} eq 'is.pl' && $form->{type} eq 'invoice' ) { + delete $form->{$_} foreach (qw(ordnumber id transdate deliverydate)); + }; + my $buysell; if ($form->{script} eq 'ir.pl' || $form->{type} eq 'request_quotation') { $form->{title} = $locale->text('Add Purchase Order'); @@ -954,9 +970,6 @@ sub quotation { if ($form->{type} =~ /(sales|purchase)_order/) { $form->{"converted_from_orderitems_id_$_"} = delete $form->{"orderitems_id_$_"} for 1 .. $form->{"rowcount"}; } - # link doc order -> quotation (single id no multi mode) - $form->{convert_from_oe_ids} = delete $form->{id}; - if ($form->{second_run}) { $form->{print_and_post} = 0; } @@ -1054,11 +1067,38 @@ sub edit_e_mail { @dont_hide_key{@dont_hide_key_list} = (1) x @dont_hide_key_list; @hidden_keys = sort grep { !$dont_hide_key{$_} } grep { !ref $form->{$_} } keys %$form; + my (@files, @vc_files, @part_files, $has_document); + + if ($::instance_conf->get_doc_storage) { + @files = SL::File->get_all_versions(object_id => $form->{id}, object_type => $form->{type}, file_type => 'document'); + $has_document = 1 if scalar(@files) > 0; + @files = SL::File->get_all(object_id => $form->{id}, object_type => $form->{type}, file_type => 'attachment'); + @vc_files = SL::File->get_all(object_id => $form->{"$form->{vc}_id"}, object_type => $form->{vc}) + if $form->{vc} && $form->{"$form->{vc}_id"}; + + my %part_id_map = map { $_->{id} => $_ } grep { $_->{id} } map { + { + 'id' => $form->{"id_$_"}, + 'partname' => $form->{"partnumber_$_"} + } + } (1 .. $form->{rowcount}); + + foreach my $partid (keys %part_id_map) { + my @pfiles = SL::File->get_all(object_id => $partid, object_type => 'part'); + push @part_files, map { $_->{partname} = $part_id_map{$partid}->{partname}; $_ } @pfiles; + } + } + print $form->parse_html_template('generic/edit_email', { title => $title, a_filename => $attachment_filename, subject => $subject, + has_document => $has_document, print_options => print_options('inline' => 1), + action => 'send_email', + FILES => \@files, + VC_FILES => \@vc_files, + PART_FILES => \@part_files, HIDDEN => [ map +{ name => $_, value => $form->{$_} }, @hidden_keys ], SHOW_BCC => $::auth->assert('email_bcc', 'may fail') }); @@ -1075,10 +1115,28 @@ sub send_email { my $callback = $form->{script} . "?action=edit"; map({ $callback .= "\&${_}=" . E($form->{$_}); } qw(type id)); + if ( $form->{action_oldfile} || $form->{action_nofile} ) { + if (!$form->{email} || $form->{email} =~ /^\s*$/) { + flash('error', $::locale->text('E-mail address missing!')); + } + else { + $form->send_email(\%myconfig,'pdf'); + } + } + else { + print_form("return"); + $form->{addition} = "SCREENED"; + $form->save_history; + $form->{addition} = "MAILED"; + } - print_form("return"); + flash_later('info' , $::locale->text('E-Mail is sent to #1', $form->{email})) if !$form->{emailerr}; + flash_later('error', $::locale->text($form->{emailerr})) if $form->{emailerr}; + + delete $form->{emailerr}; Common->save_email_status(\%myconfig, $form); + ##TODO andere SAVE HISTORY $form->{callback} = $callback; $form->redirect(); @@ -1146,7 +1204,7 @@ sub print { $form->{formname} = $formname; &edit(); $::lxdebug->leave_sub(); - ::end_of_request(); + $::dispatcher->end_request; } &print_form($old_form); @@ -1281,11 +1339,7 @@ sub print_form { $form->{TEMPLATE_DRIVER_OPTIONS} = { }; if (any { $form->{type} eq $_ } qw(sales_quotation sales_order sales_delivery_order invoice request_quotation purchase_order purchase_delivery_order credit_note)) { - $form->{TEMPLATE_DRIVER_OPTIONS}->{variable_content_types} = { - longdescription => 'html', - partnotes => 'html', - notes => 'html', - }; + $form->{TEMPLATE_DRIVER_OPTIONS}->{variable_content_types} = $form->get_variable_content_types(); } $form->isblank("email", $locale->text('E-mail address missing!')) @@ -1590,7 +1644,7 @@ sub print_form { } call_sub($display_form); - ::end_of_request(); + $::dispatcher->end_request; } my $msg = @@ -1604,7 +1658,7 @@ sub print_form { } if ($form->{printing}) { call_sub($display_form); - ::end_of_request(); + $::dispatcher->end_request; } $main::lxdebug->leave_sub(); @@ -1749,9 +1803,11 @@ sub _update_part_information { foreach my $i (1..$form->{rowcount}) { next unless ($form->{"id_${i}"}); - my $info = $form->{PART_INFORMATION}->{$form->{"id_${i}"}} || { }; - $form->{"partunit_${i}"} = $info->{unit}; - $form->{"weight_$i"} = $info->{weight}; + my $info = $form->{PART_INFORMATION}->{$form->{"id_${i}"}} || { }; + $form->{"partunit_${i}"} = $info->{unit}; + $form->{"weight_$i"} = $info->{weight}; + $form->{"part_type_$i"} = $info->{part_type}; + $form->{"classification_id_$i"} = $info->{classification_id}; } $main::lxdebug->leave_sub();