X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=bin%2Fmozilla%2Foe.pl;h=2e1e763449fc6439a8c0cc1209762fb5753ae99c;hb=bfaef835c20ba69d5ea4242e67a0dcb4fcbd4f50;hp=44bfbd49d68c39a6202ace05b5db9867d8e71f30;hpb=0576299f2aa98125991c4ffcd2f75073ea583d7d;p=kivitendo-erp.git diff --git a/bin/mozilla/oe.pl b/bin/mozilla/oe.pl index 44bfbd49d..2e1e76344 100644 --- a/bin/mozilla/oe.pl +++ b/bin/mozilla/oe.pl @@ -1,4 +1,4 @@ -#===================================================================== +# #===================================================================== # LX-Office ERP # Copyright (C) 2004 # Based on SQL-Ledger Version 2.1.9 @@ -30,6 +30,7 @@ # Order entry module # Quotation module #====================================================================== +use Data::Dumper; use SL::OE; use SL::IR; @@ -43,26 +44,59 @@ require "$form->{path}/arap.pl"; # end of main -sub add { +# For locales.pl: +# $locale->text('Edit the purchase_order'); +# $locale->text('Edit the sales_order'); +# $locale->text('Edit the request_quotation'); +# $locale->text('Edit the sales_quotation'); + +# $locale->text('Workflow purchase_order'); +# $locale->text('Workflow sales_order'); +# $locale->text('Workflow request_quotation'); +# $locale->text('Workflow sales_quotation'); + +sub set_headings { $lxdebug->enter_sub(); + my ($action) = @_; + if ($form->{type} eq 'purchase_order') { - $form->{title} = $locale->text('Add Purchase Order'); - $form->{vc} = 'vendor'; + $form->{title} = $action eq "edit" ? + $locale->text('Edit Purchase Order') : + $locale->text('Add Purchase Order'); + $form->{heading} = $locale->text('Purchase Order'); + $form->{vc} = 'vendor'; } if ($form->{type} eq 'sales_order') { - $form->{title} = $locale->text('Add Sales Order'); - $form->{vc} = 'customer'; + $form->{title} = $action eq "edit" ? + $locale->text('Edit Sales Order') : + $locale->text('Add Sales Order'); + $form->{heading} = $locale->text('Sales Order'); + $form->{vc} = 'customer'; } if ($form->{type} eq 'request_quotation') { - $form->{title} = $locale->text('Add Request for Quotation'); - $form->{vc} = 'vendor'; + $form->{title} = $action eq "edit" ? + $locale->text('Edit Request for Quotation') : + $locale->text('Add Request for Quotation'); + $form->{heading} = $locale->text('Request for Quotation'); + $form->{vc} = 'vendor'; } if ($form->{type} eq 'sales_quotation') { - $form->{title} = $locale->text('Add Quotation'); - $form->{vc} = 'customer'; + $form->{title} = $action eq "edit" ? + $locale->text('Edit Quotation') : + $locale->text('Add Quotation'); + $form->{heading} = $locale->text('Quotation'); + $form->{vc} = 'customer'; } + $lxdebug->leave_sub(); +} + +sub add { + $lxdebug->enter_sub(); + + set_headings("add"); + $form->{callback} = "$form->{script}?action=add&type=$form->{type}&vc=$form->{vc}&login=$form->{login}&path=$form->{path}&password=$form->{password}" unless $form->{callback}; @@ -77,29 +111,42 @@ sub add { sub edit { $lxdebug->enter_sub(); - if ($form->{type} eq 'purchase_order') { - $form->{title} = $locale->text('Edit Purchase Order'); - $form->{heading} = $locale->text('Purchase Order'); - $form->{vc} = 'vendor'; - } - if ($form->{type} eq 'sales_order') { - $form->{title} = $locale->text('Edit Sales Order'); - $form->{heading} = $locale->text('Sales Order'); - $form->{vc} = 'customer'; - } - if ($form->{type} eq 'request_quotation') { - $form->{title} = $locale->text('Edit Request for Quotation'); - $form->{heading} = $locale->text('Request for Quotation'); - $form->{vc} = 'vendor'; + $form->{simple_save} = 0; + + set_headings("edit"); + + # editing without stuff to edit? try adding it first + if ($form->{rowcount}) { + map { $id++ if $form->{"id_$_"} } (1 .. $form->{rowcount}); + if (!$id) { + + # reset rowcount + undef $form->{rowcount}; + &add; + return; + } + } else { + if (!$form->{id}) { + &add; + return; + } } - if ($form->{type} eq 'sales_quotation') { - $form->{title} = $locale->text('Edit Quotation'); - $form->{heading} = $locale->text('Quotation'); - $form->{vc} = 'customer'; + + if ($form->{print_and_save}) { + $form->{action} = "print"; + $form->{resubmit} = 1; + $language_id = $form->{language_id}; + $printer_id = $form->{printer_id}; } + set_headings("edit"); + &order_links; &prepare_order; + if ($form->{print_and_save}) { + $form->{language_id} = $language_id; + $form->{printer_id} = $printer_id; + } &display_form; $lxdebug->leave_sub(); @@ -114,12 +161,37 @@ sub order_links { # retrieve order/quotation $form->{webdav} = $webdav; - # set jscalendar $form->{jscalendar} = $jscalendar; OE->retrieve(\%myconfig, \%$form); + if ($form->{payment_id}) { + $payment_id = $form->{payment_id}; + } + if ($form->{language_id}) { + $language_id = $form->{language_id}; + } + if ($form->{taxzone_id}) { + $taxzone_id = $form->{taxzone_id}; + } + + + # if multiple rowcounts (== collective order) then check if the + # there were more than one customer (in that case OE::retrieve removes + # the content from the field) + if ( $form->{rowcount} + && $form->{type} eq 'sales_order' + && defined $form->{customer} + && $form->{customer} eq '') { + + # $main::lxdebug->message(0, "Detected Edit order with concurrent customers"); + $form->error( + $locale->text( + 'Collective Orders only work for orders from one customer!') + ); + } + $taxincluded = $form->{taxincluded}; $form->{shipto} = 1 if $form->{id}; @@ -135,12 +207,32 @@ sub order_links { # get customer / vendor if ($form->{type} =~ /(purchase_order|request_quotation|receive_order)/) { IR->get_vendor(\%myconfig, \%$form); + + #quote all_vendor Bug 133 + foreach $ref (@{ $form->{all_vendor} }) { + $ref->{name} = $form->quote($ref->{name}); + } + } if ($form->{type} =~ /(sales|ship)_(order|quotation)/) { IS->get_customer(\%myconfig, \%$form); + + #quote all_vendor Bug 133 + foreach $ref (@{ $form->{all_customer} }) { + $ref->{name} = $form->quote($ref->{name}); + } + } $form->{cp_id} = $cp_id; - + if ($payment_id) { + $form->{payment_id} = $payment_id; + } + if ($language_id) { + $form->{language_id} = $language_id; + } + if ($taxzone_id) { + $form->{taxzone_id} = $taxzone_id; + } $form->{intnotes} = $intnotes; ($form->{ $form->{vc} }) = split /--/, $form->{ $form->{vc} }; $form->{"old$form->{vc}"} = @@ -155,7 +247,7 @@ sub order_links { } # currencies - @curr = split /:/, $form->{currencies}; + @curr = split(/:/, $form->{currencies}); chomp $curr[0]; $form->{defaultcurrency} = $curr[0]; $form->{currency} = $form->{defaultcurrency} unless $form->{currency}; @@ -192,34 +284,42 @@ sub order_links { sub prepare_order { $lxdebug->enter_sub(); - $form->{format} = "html"; $form->{media} = "screen"; - $form->{formname} = $form->{type}; - - if ($form->{id}) { + $form->{formname} = $form->{type} unless $form->{formname}; - map { $form->{$_} =~ s/\"/"/g } - qw(ordnumber quonumber shippingpoint shipvia notes intnotes shiptoname shiptostreet shiptozipcode shiptocity shiptocountry shiptocontact); + my $i = 0; + foreach $ref (@{ $form->{form_details} }) { + $form->{rowcount} = ++$i; - foreach $ref (@{ $form->{form_details} }) { - $i++; - map { $form->{"${_}_$i"} = $ref->{$_} } keys %{$ref}; + map { $form->{"${_}_$i"} = $ref->{$_} } keys %{$ref}; + } + for my $i (1 .. $form->{rowcount}) { + if ($form->{id}) { $form->{"discount_$i"} = $form->format_amount(\%myconfig, $form->{"discount_$i"} * 100); + } else { + $form->{"discount_$i"} = + $form->format_amount(\%myconfig, $form->{"discount_$i"}); + } + ($dec) = ($form->{"sellprice_$i"} =~ /\.(\d+)/); + $dec = length $dec; + $decimalplaces = ($dec > 2) ? $dec : 2; - ($dec) = ($form->{"sellprice_$i"} =~ /\.(\d+)/); - $dec = length $dec; - $decimalplaces = ($dec > 2) ? $dec : 2; + # copy reqdate from deliverydate for invoice -> order conversion + $form->{"reqdate_$i"} = $form->{"deliverydate_$i"} + unless $form->{"reqdate_$i"}; - $form->{"sellprice_$i"} = - $form->format_amount(\%myconfig, $form->{"sellprice_$i"}, - $decimalplaces); - $form->{"qty_$i"} = $form->format_amount(\%myconfig, $form->{"qty_$i"}); + $form->{"sellprice_$i"} = + $form->format_amount(\%myconfig, $form->{"sellprice_$i"}, + $decimalplaces); - map { $form->{"${_}_$i"} =~ s/\"/"/g } - qw(partnumber description unit); - $form->{rowcount} = $i; - } + (my $dec_qty) = ($form->{"qty_$i"} =~ /\.(\d+)/); + $dec_qty = length $dec_qty; + $form->{"qty_$i"} = + $form->format_amount(\%myconfig, $form->{"qty_$i"}, $dec_qty); + + map { $form->{"${_}_$i"} =~ s/\"/"/g } + qw(partnumber description unit); } $lxdebug->leave_sub(); @@ -231,24 +331,35 @@ sub form_header { $checkedopen = ($form->{closed}) ? "" : "checked"; $checkedclosed = ($form->{closed}) ? "checked" : ""; + map { $form->{$_} =~ s/\"/"/g } + qw(ordnumber quonumber shippingpoint shipvia notes intnotes shiptoname + shiptostreet shiptozipcode shiptocity shiptocountry shiptocontact + shiptophone shiptofax shiptodepartment_1 shiptodepartment_2); + # use JavaScript Calendar or not $form->{jsscript} = $form->{jscalendar}; $jsscript = ""; + $payment = qq||; + foreach $item (@{ $form->{payment_terms} }) { + if ($form->{payment_id} eq $item->{id}) { + $payment .= qq||; + } else { + $payment .= qq||; + } + } if ($form->{jsscript}) { # with JavaScript Calendar $button1 = qq| {transdate}> text('button') - . qq|> + . $locale->text('button') . qq|> |; $button2 = qq| {reqdate}> text('button') - . qq|> + . $locale->text('button') . qq|> |; #write Trigger @@ -272,11 +383,9 @@ sub form_header { + . $locale->text('Open') . qq| + . $locale->text('Closed') . qq|
| - . $locale->text('Open') - . qq| | - . $locale->text('Closed') - . qq|
@@ -285,29 +394,73 @@ sub form_header { } # set option selected - foreach $item ($form->{vc}, currency, department, employee, contact) { + foreach $item ($form->{vc}, currency, department, employee) { $form->{"select$item"} =~ s/ selected//; $form->{"select$item"} =~ s/option>\Q$form->{$item}\E/option selected>$form->{$item}/; } + #quote select[customer|vendor] Bug 133 + $form->{"select$form->{vc}"} = $form->quote($form->{"select$form->{vc}"}); + #build contacts if ($form->{all_contacts}) { - $form->{selectcontact} = ""; + $form->{selectcontact} = ""; foreach $item (@{ $form->{all_contacts} }) { + my $department = ($item->{cp_abteilung}) ? "--$item->{cp_abteilung}" : ""; if ($form->{cp_id} == $item->{cp_id}) { $form->{selectcontact} .= - ""; } else { - $form->{selectcontact} .= ""; } } + } else { + $form->{selectcontact} =~ s/ selected//g; + if ($form->{cp_id} ne "") { + $form->{selectcontact} =~ s/value=$form->{cp_id}/value=$form->{cp_id} selected/; + } } + + if (@{ $form->{SHIPTO} }) { + $form->{selectshipto} = ""; + foreach $item (@{ $form->{SHIPTO} }) { + if ($item->{shipto_id} == $form->{shipto_id}) { + $form->{selectshipto} .= + ""; + } else { + $form->{selectshipto} .= + ""; + } + + } + } else { + $form->{selectshipto} = $form->unquote($form->{selectshipto}); + $form->{selectshipto} =~ s/ selected//g; + if ($form->{shipto_id} ne "") { + $form->{selectshipto} =~ s/value=$form->{shipto_id}/value=$form->{shipto_id} selected/; + } + } + + $shipto = qq| + | . $locale->text('Shipping Address') . qq| + |; + $form->{selectshipto} = $form->quote($form->{selectshipto}); + $shipto .= qq| |; + + + $form->{exchangerate} = $form->format_amount(\%myconfig, $form->{exchangerate}); + if (($form->{creditlimit} != 0) && ($form->{creditremaining} < 0) && !$form->{update}) { + $creditwarning = 1; + } else { + $creditwarning = 0; + } + $form->{creditlimit} = $form->format_amount(\%myconfig, $form->{creditlimit}, 0, "0"); $form->{creditremaining} = @@ -315,7 +468,7 @@ sub form_header { $contact = ($form->{selectcontact}) - ? qq|\n| + ? qq|\n| : qq||; $exchangerate = qq| @@ -341,14 +494,8 @@ sub form_header { $vclabel = ucfirst $form->{vc}; $vclabel = $locale->text($vclabel); - $terms = qq| - - | . $locale->text('Terms: Net') . qq| - {terms}> | - . $locale->text('days') - . qq| - -|; + $terms = qq||; if ($form->{business}) { $business = qq| @@ -363,6 +510,53 @@ sub form_header { |; } + if ($form->{max_dunning_level}) { + $dunning = qq| + + + + + + + + + +
| . $locale->text('Max. Dunning Level') . qq|:$form->{max_dunning_level}| . $locale->text('Dunning Amount') . qq|:| + . $form->format_amount(\%myconfig, $form->{dunning_amount},2) + . qq|
+ + +|; + } + + if (@{ $form->{TAXZONE} }) { + $form->{selecttaxzone} = ""; + foreach $item (@{ $form->{TAXZONE} }) { + if ($item->{id} == $form->{taxzone_id}) { + $form->{selecttaxzone} .= + ""; + } else { + $form->{selecttaxzone} .= + ""; + } + + } + } else { + $form->{selecttaxzone} =~ s/ selected//g; + if ($form->{taxzone_id} ne "") { + $form->{selecttaxzone} =~ s/value=$form->{taxzone_id}>/value=$form->{taxzone_id} selected>/; + } + } + + $taxzone = qq| + + | . $locale->text('Steuersatz') . qq| + + + |; + + if ($form->{type} !~ /_quotation$/) { $ordnumber = qq| @@ -371,14 +565,12 @@ sub form_header { | - . $locale->text('Quotation Number') - . qq| + . $locale->text('Quotation Number') . qq| | - . $locale->text('Customer Order Number') - . qq| + . $locale->text('Customer Order Number') . qq| @@ -404,10 +596,11 @@ sub form_header { $form->{creditlimit} | . $locale->text('Remaining') . qq| - $form->{creditremaining} + $form->{creditremaining} + $shipto |; } else { @@ -419,8 +612,7 @@ sub form_header { $ordnumber = qq| | - . $locale->text('Quotation Number') - . qq| + . $locale->text('Quotation Number') . qq| @@ -447,7 +639,10 @@ sub form_header { $button2 |; - + $creditremaining = qq| + + $shipto + |; } $vc = @@ -471,6 +666,7 @@ sub form_header { if ($form->{type} eq 'sales_order') { if ($form->{selectemployee}) { $employee = qq| + {customer_klass}> | . $locale->text('Salesperson') . qq| @@ -481,6 +677,7 @@ sub form_header { } } else { $employee = qq| + {customer_klass}> | . $locale->text('Employee') . qq| @@ -489,20 +686,41 @@ sub form_header { |; } + if ($form->{resubmit} && ($form->{format} eq "html")) { + $onload = + qq|window.open('about:blank','Beleg'); document.oe.target = 'Beleg';document.oe.submit()|; + } elsif ($form->{resubmit}) { + $onload = qq|document.oe.submit()|; + } else { + $onload = "fokus()"; + } + + $credittext = $locale->text('Credit Limit exceeded!!!'); + if ($creditwarning) { + $onload = qq|alert('$credittext')|; + } + + $form->{"javascript"} .= qq| + + + {id}> +{action}> {type}> {formname}> {media}> {format}> +{proforma}> @@ -537,12 +755,13 @@ sub form_header { {vc}_id value=$form->{"$form->{vc}_id"}> {vc}"}"> | - . $locale->text('Contact Person') - . qq| + . $locale->text('Contact Person') . qq| $contact $creditremaining $business + $dunning + $taxzone $department | . $locale->text('Currency') . qq| @@ -558,8 +777,28 @@ sub form_header { | . $locale->text('Ship via') . qq| - - + |; +# +# +# +# +# +# +# +# +# +# +# +#
+# +# +#
+# +# +#
+# +# +print qq| @@ -586,6 +825,8 @@ $jsscript + + @@ -633,8 +874,7 @@ sub form_footer { if ($form->{taxaccounts}) { $taxincluded = qq| {taxincluded}> | - . $locale->text('Tax Included') - . qq|

+ . $locale->text('Tax Included') . qq|

|; } @@ -722,6 +962,9 @@ sub form_footer { + +
$notes $intnotes
| . $locale->text('Payment Terms') . qq|
@@ -788,8 +1031,8 @@ sub form_footer { -Bearbeiten des $form->{heading}
-{type}") . qq|
+ @@ -799,24 +1042,33 @@ Bearbeiten des $form->{heading}
. $locale->text('E-mail') . qq|"> + |; - if ($form->{id}) { + if (($form->{id})) { print qq| -
Workflow $form->{heading}
+
| . $locale->text("Workflow $form->{type}") . qq|
|; - if ($form->{type} =~ /quotation$/) { + if (($form->{type} =~ /sales_quotation$/)) { print qq| |; + . $locale->text('Sales Order') . qq|">|; } + if ($form->{type} =~ /request_quotation$/) { + print qq| +|; + } + if (1) { print qq| |; +} if ($form->{type} =~ /sales_order$/) { print qq| @@ -833,7 +1085,7 @@ Bearbeiten des $form->{heading}
+ . $locale->text('Request for Quotation') . qq|"> |; } else { @@ -843,6 +1095,14 @@ Bearbeiten des $form->{heading}
. $locale->text('Order') . qq|"> |; } + } elsif ($form->{type} =~ /sales_order$/ && $form->{rowcount} && !$form->{proforma}) { + print qq| +
Workflow $form->{heading}
+ + +|; } if ($form->{menubar}) { @@ -871,8 +1131,11 @@ Bearbeiten des $form->{heading}
sub update { $lxdebug->enter_sub(); + set_headings($form->{"id"} ? "edit" : "add"); + map { $form->{$_} = $form->parse_amount(\%myconfig, $form->{$_}) } qw(exchangerate creditlimit creditremaining); + $form->{update} = 1; &check_name($form->{vc}); @@ -888,7 +1151,9 @@ sub update { \%myconfig, $form->{currency}, $form->{transdate}, $buysell ))); - my $i = $form->{rowcount}; + # for pricegroups + $i = $form->{rowcount}; + $exchangerate = ($form->{exchangerate}) ? $form->{exchangerate} : 1; if ( ($form->{"partnumber_$i"} eq "") @@ -898,7 +1163,7 @@ sub update { $form->{creditremaining} += ($form->{oldinvtotal} - $form->{oldtotalpaid}); &check_form; - } else { + } else { if ( $form->{type} eq 'purchase_order' || $form->{type} eq 'request_quotation') { @@ -924,11 +1189,16 @@ sub update { } else { $sellprice = $form->parse_amount(\%myconfig, $form->{"sellprice_$i"}); - + if ($form->{"not_discountable_$i"}) { + $form->{"discount_$i"} = 0; + } map { $form->{item_list}[$i]{$_} =~ s/\"/"/g } qw(partnumber description unit); map { $form->{"${_}_$i"} = $form->{item_list}[0]{$_} } keys %{ $form->{item_list}[0] }; + if ($form->{"part_payment_id_$i"} ne "") { + $form->{payment_id} = $form->{"part_payment_id_$i"}; + } $s = ($sellprice) ? $sellprice : $form->{"sellprice_$i"}; @@ -940,6 +1210,8 @@ sub update { $form->{"sellprice_$i"} = $sellprice; } else { + $form->{"sellprice_$i"} *= (1 - $form->{tradediscount}); + # if there is an exchange rate adjust sellprice $form->{"sellprice_$i"} /= $exchangerate; } @@ -960,7 +1232,13 @@ sub update { $form->format_amount(\%myconfig, $form->{"sellprice_$i"}, $decimalplaces); $form->{"qty_$i"} = - $form->format_amount(\%myconfig, $form->{"qty_$i"}); + $form->format_amount(\%myconfig, $form->{"qty_$i"}, $dec_qty); + + # get pricegroups for parts + IS->get_pricegroups_for_parts(\%myconfig, \%$form); + + # build up html code for prices_$i + &set_pricegroup($i); } &display_form; @@ -976,7 +1254,7 @@ sub update { $form->{rowcount}--; $form->{"discount_$i"} = ""; &display_form; - } else { + } else { $form->{"id_$i"} = 0; $form->{"unit_$i"} = $locale->text('ea'); @@ -986,6 +1264,7 @@ sub update { } } } + $lxdebug->leave_sub(); } @@ -1046,7 +1325,8 @@ sub search { $form->{warehouse} = qq|$form->{warehouse}--$form->{warehouse_id}|; map { - $form->{selectwarehouse} .= "