Revision 54e4131e
Von Moritz Bunkus vor mehr als 18 Jahren hinzugefügt
bin/mozilla/oe.pl | ||
---|---|---|
# Order entry module
|
||
# Quotation module
|
||
#======================================================================
|
||
use Data::Dumper;
|
||
|
||
use SL::OE;
|
||
use SL::IR;
|
||
... | ... | |
}
|
||
}
|
||
|
||
if ($form->{print_and_save}) {
|
||
$form->{action} = "print";
|
||
$form->{resubmit} = 1;
|
||
$language_id = $form->{language_id};
|
||
$printer_id = $form->{printer_id};
|
||
}
|
||
|
||
if ($form->{type} eq 'purchase_order') {
|
||
$form->{title} = $locale->text('Edit Purchase Order');
|
||
$form->{heading} = $locale->text('Purchase Order');
|
||
... | ... | |
|
||
&order_links;
|
||
&prepare_order;
|
||
if ($form->{print_and_save}) {
|
||
$form->{language_id} = $language_id;
|
||
$form->{printer_id} = $printer_id;
|
||
}
|
||
&display_form;
|
||
|
||
$lxdebug->leave_sub();
|
||
... | ... | |
|
||
# 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)
|
||
... | ... | |
# 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}"} =
|
||
... | ... | |
$lxdebug->enter_sub();
|
||
$form->{format} = "pdf";
|
||
$form->{media} = "screen";
|
||
$form->{formname} = $form->{type};
|
||
$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;
|
||
|
||
... | ... | |
$form->{jsscript} = $form->{jscalendar};
|
||
$jsscript = "";
|
||
|
||
$payment = qq|<option value=""></option>|;
|
||
foreach $item (@{ $form->{payment_terms} }) {
|
||
if ($form->{payment_id} eq $item->{id}) {
|
||
$payment .= qq|<option value="$item->{id}" selected>$item->{description}</option>|;
|
||
} else {
|
||
$payment .= qq|<option value="$item->{id}">$item->{description}</option>|;
|
||
}
|
||
}
|
||
if ($form->{jsscript}) {
|
||
|
||
# with JavaScript Calendar
|
||
... | ... | |
}
|
||
|
||
# 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} = "<option></option>";
|
||
foreach $item (@{ $form->{all_contacts} }) {
|
||
my $department = ($item->{cp_abteilung}) ? "--$item->{cp_abteilung}" : "";
|
||
if ($form->{cp_id} == $item->{cp_id}) {
|
||
$form->{selectcontact} .=
|
||
"<option selected>$item->{cp_name}--$item->{cp_id}";
|
||
"<option value=$item->{cp_id} selected>$item->{cp_name}$department</option>";
|
||
} else {
|
||
$form->{selectcontact} .= "<option>$item->{cp_name}--$item->{cp_id}";
|
||
$form->{selectcontact} .= "<option value=$item->{cp_id}>$item->{cp_name}$department</option>";
|
||
}
|
||
}
|
||
} 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} = "<option value=0></option>";
|
||
foreach $item (@{ $form->{SHIPTO} }) {
|
||
if ($item->{id} == $form->{shipto_id}) {
|
||
$form->{selectshipto} .=
|
||
"<option value=$item->{id} selected>$item->{shiptoname}</option>";
|
||
} else {
|
||
$form->{selectshipto} .=
|
||
"<option value=$item->{id}>$item->{shiptoname}</option>";
|
||
}
|
||
|
||
}
|
||
} else {
|
||
$form->{selectshipto} =~ s/ selected//g;
|
||
if ($form->{shipto_id} ne "") {
|
||
$form->{selectshipto} =~ s/value=$form->{shipto_id}/value=$form->{shipto_id} selected/;
|
||
}
|
||
}
|
||
|
||
$shipto = qq|
|
||
<th align=right>| . $locale->text('Shipping Address') . qq|</th>
|
||
<td><select name=shipto_id>$form->{selectshipto}</select></td>
|
||
<input type=hidden name=selectshipto value="$form->{selectshipto}">|;
|
||
|
||
|
||
|
||
|
||
$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} =
|
||
... | ... | |
|
||
$contact =
|
||
($form->{selectcontact})
|
||
? qq|<select name=contact>$form->{selectcontact}</select>\n<input type=hidden name="selectcontact" value="$form->{selectcontact}">|
|
||
? qq|<select name=cp_id>$form->{selectcontact}</select>\n<input type=hidden name="selectcontact" value="$form->{selectcontact}">|
|
||
: qq|<input name=contact value="$form->{contact}" size=35>|;
|
||
|
||
$exchangerate = qq|
|
||
... | ... | |
|;
|
||
}
|
||
|
||
if ($form->{max_dunning_level}) {
|
||
$dunning = qq|
|
||
<tr>
|
||
<td colspan=4>
|
||
<table>
|
||
<tr>
|
||
<th align=right>| . $locale->text('Max. Dunning Level') . qq|:</th>
|
||
<td><b>$form->{max_dunning_level}</b></td>
|
||
<th align=right>| . $locale->text('Dunning Amount') . qq|:</th>
|
||
<td><b>|
|
||
. $form->format_amount(\%myconfig, $form->{dunning_amount},2)
|
||
. qq|</b></td>
|
||
</tr>
|
||
</table>
|
||
</td>
|
||
</tr>
|
||
|;
|
||
}
|
||
|
||
if (@{ $form->{TAXZONE} }) {
|
||
$form->{selecttaxzone} = "";
|
||
foreach $item (@{ $form->{TAXZONE} }) {
|
||
if ($item->{id} == $form->{taxzone_id}) {
|
||
$form->{selecttaxzone} .=
|
||
"<option value=$item->{id} selected>$item->{description}</option>";
|
||
} else {
|
||
$form->{selecttaxzone} .=
|
||
"<option value=$item->{id}>$item->{description}</option>";
|
||
}
|
||
|
||
}
|
||
} else {
|
||
$form->{selecttaxzone} =~ s/ selected//g;
|
||
if ($form->{taxzone_id} ne "") {
|
||
$form->{selecttaxzone} =~ s/value=$form->{taxzone_id}/value=$form->{taxzone_id} selected/;
|
||
}
|
||
}
|
||
|
||
if ($form->{rowcount} >0) {
|
||
$form->{selecttaxzone} =~ /<option value=\d+ selected>.*?<\/option>/;
|
||
$form->{selecttaxzone} = $&;
|
||
}
|
||
|
||
|
||
$taxzone = qq|
|
||
<tr>
|
||
<th align=right>| . $locale->text('Steuersatz') . qq|</th>
|
||
<td><select name=taxzone_id>$form->{selecttaxzone}</select></td>
|
||
<input type=hidden name=selecttaxzone value="$form->{selecttaxzone}">
|
||
</tr>|;
|
||
|
||
|
||
if ($form->{type} !~ /_quotation$/) {
|
||
$ordnumber = qq|
|
||
<tr>
|
||
... | ... | |
</tr>
|
||
</table>
|
||
</td>
|
||
$shipto
|
||
</tr>
|
||
|;
|
||
} else {
|
||
... | ... | |
$button2
|
||
</tr>
|
||
|;
|
||
|
||
$creditremaining = qq| <tr>
|
||
<td colspan=4></td>
|
||
$shipto
|
||
</tr>|;
|
||
}
|
||
|
||
$vc =
|
||
... | ... | |
</tr>
|
||
|;
|
||
}
|
||
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->header;
|
||
|
||
print qq|
|
||
<body>
|
||
<body onLoad="$onload">
|
||
|
||
<form method=post action=$form->{script}>
|
||
<form method=post name=oe action=$form->{script}>
|
||
<script type="text/javascript" src="js/common.js"></script>
|
||
<script type="text/javascript" src="js/delivery_customer_selection.js"></script>
|
||
<script type="text/javascript" src="js/vendor_selection.js"></script>
|
||
<script type="text/javascript" src="js/calculate_qty.js"></script>
|
||
|
||
<input type=hidden name=id value=$form->{id}>
|
||
<input type=hidden name=action value=$form->{action}>
|
||
|
||
<input type=hidden name=type value=$form->{type}>
|
||
<input type=hidden name=formname value=$form->{formname}>
|
||
<input type=hidden name=media value=$form->{media}>
|
||
<input type=hidden name=format value=$form->{format}>
|
||
<input type=hidden name=proforma value=$form->{proforma}>
|
||
|
||
<input type=hidden name=queued value="$form->{queued}">
|
||
<input type=hidden name=printed value="$form->{printed}">
|
||
... | ... | |
</tr>
|
||
$creditremaining
|
||
$business
|
||
$dunning
|
||
$taxzone
|
||
$department
|
||
<tr>
|
||
<th align=right>| . $locale->text('Currency') . qq|</th>
|
||
... | ... | |
<tr>
|
||
<th align=right>| . $locale->text('Ship via') . qq|</th>
|
||
<td colspan=3><input name=shipvia size=35 value="$form->{shipvia}"></td>
|
||
</tr>
|
||
</table>
|
||
</tr>|;
|
||
# <tr>
|
||
# <td colspan=4>
|
||
# <table>
|
||
# <tr>
|
||
# <td colspan=2>
|
||
# <button type="button" onclick="delivery_customer_selection_window('delivery_customer_string','delivery_customer_id')">| . $locale->text('Choose Customer') . qq|</button>
|
||
# </td>
|
||
# <td colspan=2><input type=hidden name=delivery_customer_id value="$form->{delivery_customer_id}">
|
||
# <input size=45 id=delivery_customer_string name=delivery_customer_string value="$form->{delivery_customer_string}"></td>
|
||
# </tr>
|
||
# <tr>
|
||
# <td colspan=2>
|
||
# <button type="button" onclick="vendor_selection_window('delivery_vendor_string','delivery_vendor_id')">| . $locale->text('Choose Vendor') . qq|</button>
|
||
# </td>
|
||
# <td colspan=2><input type=hidden name=delivery_vendor_id value="$form->{delivery_vendor_id}">
|
||
# <input size=45 id=vendor_string name=delivery_vendor_string value="$form->{delivery_vendor_string}"></td>
|
||
# </tr>
|
||
# </table>
|
||
# </td>
|
||
# </tr>
|
||
print qq| </table>
|
||
</td>
|
||
<td align=right>
|
||
<table>
|
||
... | ... | |
<td>$notes</td>
|
||
<td>$intnotes</td>
|
||
</tr>
|
||
<th align=right>| . $locale->text('Payment Terms') . qq|</th>
|
||
<td><select name=payment_id tabindex=24>$payment
|
||
</select></td>
|
||
</table>
|
||
</td>
|
||
<td align=right width=100%>
|
||
... | ... | |
. $locale->text('E-mail') . qq|">
|
||
<input class=submit type=submit name=action value="|
|
||
. $locale->text('Save') . qq|">
|
||
<input class=submit type=submit name=action value="|
|
||
. $locale->text('Save and Close') . qq|">
|
||
|;
|
||
|
||
if ($form->{id}) {
|
||
if (($form->{id})) {
|
||
print qq|
|
||
<br>Workflow $form->{heading}<br>
|
||
<input class=submit type=submit name=action value="|
|
||
. $locale->text('Save as new') . qq|">
|
||
<input class=submit type=submit name=action value="|
|
||
. $locale->text('Delete') . qq|">|;
|
||
if ($form->{type} =~ /sales_quotation$/) {
|
||
if (($form->{type} =~ /sales_quotation$/)) {
|
||
print qq|
|
||
<input class=submit type=submit name=action value="|
|
||
. $locale->text('Sales Order') . qq|">|;
|
||
... | ... | |
<input class=submit type=submit name=action value="|
|
||
. $locale->text('Purchase Order') . qq|">|;
|
||
}
|
||
if (1) {
|
||
print qq|
|
||
<input class=submit type=submit name=action value="|
|
||
. $locale->text('Invoice') . qq|">
|
||
|;
|
||
}
|
||
|
||
if ($form->{type} =~ /sales_order$/) {
|
||
print qq|
|
||
... | ... | |
. $locale->text('Order') . qq|">
|
||
|;
|
||
}
|
||
} elsif ($form->{type} =~ /sales_order$/ && $form->{rowcount}) {
|
||
} elsif ($form->{type} =~ /sales_order$/ && $form->{rowcount} && !$form->{proforma}) {
|
||
print qq|
|
||
<br>Workflow $form->{heading}<br>
|
||
<input class=submit type=submit name=action value="|
|
||
... | ... | |
|
||
map { $form->{$_} = $form->parse_amount(\%myconfig, $form->{$_}) }
|
||
qw(exchangerate creditlimit creditremaining);
|
||
$form->{update} = 1;
|
||
|
||
&check_name($form->{vc});
|
||
|
||
... | ... | |
$form->{creditremaining} += ($form->{oldinvtotal} - $form->{oldtotalpaid});
|
||
&check_form;
|
||
|
||
} else {
|
||
} else {
|
||
|
||
$form->{"selected_unit_$i"} = $form->{"unit_$i"};
|
||
|
||
if ( $form->{type} eq 'purchase_order'
|
||
|| $form->{type} eq 'request_quotation') {
|
||
... | ... | |
} 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"};
|
||
|
||
... | ... | |
$form->{rowcount}--;
|
||
$form->{"discount_$i"} = "";
|
||
&display_form;
|
||
} else {
|
||
} else {
|
||
|
||
$form->{"id_$i"} = 0;
|
||
$form->{"unit_$i"} = $locale->text('ea');
|
||
... | ... | |
$lxdebug->leave_sub();
|
||
}
|
||
|
||
sub save {
|
||
sub save_and_close {
|
||
$lxdebug->enter_sub();
|
||
|
||
if ($form->{type} =~ /_order$/) {
|
||
... | ... | |
|
||
}
|
||
|
||
# get new number in sequence if no number is given or if saveasnew was requested
|
||
if (!$form->{$ordumber} || $form->{saveasnew}) {
|
||
$form->{$ordnumber} = $form->update_defaults(\%myconfig, $numberfld);
|
||
}
|
||
$form->{$ordnumber} = $form->update_defaults(\%myconfig, $numberfld)
|
||
unless $form->{$ordnumber};
|
||
|
||
$form->redirect(
|
||
$form->{label} . " $form->{$ordnumber} " . $locale->text('saved!'))
|
||
... | ... | |
$lxdebug->leave_sub();
|
||
}
|
||
|
||
sub save {
|
||
$lxdebug->enter_sub();
|
||
|
||
if ($form->{type} =~ /_order$/) {
|
||
$form->isblank("transdate", $locale->text('Order Date missing!'));
|
||
} else {
|
||
$form->isblank("transdate", $locale->text('Quotation Date missing!'));
|
||
}
|
||
|
||
$msg = ucfirst $form->{vc};
|
||
$form->isblank($form->{vc}, $locale->text($msg . " missing!"));
|
||
|
||
# $locale->text('Customer missing!');
|
||
# $locale->text('Vendor missing!');
|
||
|
||
$form->isblank("exchangerate", $locale->text('Exchangerate missing!'))
|
||
if ($form->{currency} ne $form->{defaultcurrency});
|
||
|
||
&validate_items;
|
||
|
||
# if the name changed get new values
|
||
if (&check_name($form->{vc})) {
|
||
&update;
|
||
exit;
|
||
}
|
||
|
||
$form->{id} = 0 if $form->{saveasnew};
|
||
|
||
# this is for the internal notes section for the [email] Subject
|
||
if ($form->{type} =~ /_order$/) {
|
||
if ($form->{type} eq 'sales_order') {
|
||
$form->{label} = $locale->text('Sales Order');
|
||
|
||
$numberfld = "sonumber";
|
||
$ordnumber = "ordnumber";
|
||
} else {
|
||
$form->{label} = $locale->text('Purchase Order');
|
||
|
||
$numberfld = "ponumber";
|
||
$ordnumber = "ordnumber";
|
||
}
|
||
|
||
$err = $locale->text('Cannot save order!');
|
||
|
||
} else {
|
||
if ($form->{type} eq 'sales_quotation') {
|
||
$form->{label} = $locale->text('Quotation');
|
||
|
||
$numberfld = "sqnumber";
|
||
$ordnumber = "quonumber";
|
||
} else {
|
||
$form->{label} = $locale->text('Request for Quotation');
|
||
|
||
$numberfld = "rfqnumber";
|
||
$ordnumber = "quonumber";
|
||
}
|
||
|
||
$err = $locale->text('Cannot save quotation!');
|
||
|
||
}
|
||
|
||
$form->{$ordnumber} = $form->update_defaults(\%myconfig, $numberfld)
|
||
unless $form->{$ordnumber};
|
||
|
||
|
||
OE->save(\%myconfig, \%$form);
|
||
$form->{simple_save} = 1;
|
||
if(!$form->{print_and_save}) {
|
||
&update;
|
||
exit;
|
||
}
|
||
$lxdebug->leave_sub();
|
||
}
|
||
|
||
sub delete {
|
||
$lxdebug->enter_sub();
|
||
|
||
... | ... | |
exit;
|
||
}
|
||
|
||
($null, $form->{cp_id}) = split /--/, $form->{contact};
|
||
$form->{cp_id} *= 1;
|
||
|
||
if ( $form->{type} =~ /_order/
|
||
... | ... | |
|
||
$form->{saveasnew} = 1;
|
||
$form->{closed} = 0;
|
||
map { delete $form->{$_} } qw(printed emailed queued);
|
||
map { delete $form->{$_} } qw(printed emailed queued ordnumber quonumber);
|
||
|
||
&save;
|
||
|
||
... | ... | |
OE->save(\%myconfig, \%$form);
|
||
}
|
||
|
||
($null, $form->{cp_id}) = split /--/, $form->{contact};
|
||
$form->{cp_id} *= 1;
|
||
|
||
$form->{title} = $locale->text('Add Purchase Order');
|
||
... | ... | |
OE->save(\%myconfig, \%$form);
|
||
}
|
||
|
||
($null, $form->{cp_id}) = split /--/, $form->{contact};
|
||
$form->{cp_id} *= 1;
|
||
|
||
$form->{title} = $locale->text('Add Sales Order');
|
Auch abrufbar als: Unified diff
Uebernahme der kompletten Version, so wie sie Philip als "Demo-Version" gezeigt hat, in das unstable-Repo. Dabei werden auch einige Patches, die seit der 2.2.0 hier eingepflegt wurden, wieder ueberschrieben. Diese werden in den naechsten Tagen wieder eingespielt, sofern noetig. Zu den neuen Features gehoeren (ohne Anspruch auf Vollstaendigkeit) Mahnwesen, Einheiten, Template-Neucodierung, AJAX-basierende Dialoge an einigen Stellen, Buchungsgruppen etc etc.