Uebernahme der kompletten Version, so wie sie Philip als "Demo-Version" gezeigt hat...
[kivitendo-erp.git] / bin / mozilla / oe.pl
index 7aa3f2e..f4b32c0 100644 (file)
@@ -30,7 +30,6 @@
 # Order entry module
 # Quotation module
 #======================================================================
-use Data::Dumper;
 
 use SL::OE;
 use SL::IR;
@@ -95,6 +94,13 @@ sub edit {
     }
   }
 
+  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');
@@ -118,6 +124,10 @@ sub 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();
@@ -132,12 +142,22 @@ 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)
@@ -168,24 +188,20 @@ 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}"} =
@@ -239,11 +255,11 @@ sub prepare_order {
   $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;
 
@@ -291,6 +307,14 @@ sub form_header {
   $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
@@ -337,32 +361,69 @@ 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} = "<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} =
@@ -370,7 +431,7 @@ sub form_header {
 
   $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|
@@ -417,6 +478,58 @@ sub form_header {
 |;
   }
 
+  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>
@@ -460,6 +573,7 @@ sub form_header {
                    </tr>
                  </table>
                </td>
+                $shipto
              </tr>
 |;
   } else {
@@ -498,7 +612,10 @@ sub form_header {
                 $button2
              </tr>
 |;
-
+    $creditremaining = qq| <tr>
+                            <td colspan=4></td>
+                            $shipto
+                          </tr>|;
   }
 
   $vc =
@@ -542,20 +659,39 @@ sub form_header {
              </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}">
@@ -595,6 +731,8 @@ sub form_header {
              </tr>
              $creditremaining
              $business
+              $dunning
+              $taxzone
              $department
              <tr>
                <th align=right>| . $locale->text('Currency') . qq|</th>
@@ -610,8 +748,28 @@ sub form_header {
              <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>
@@ -773,6 +931,9 @@ sub form_footer {
                <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%>
@@ -850,16 +1011,18 @@ Bearbeiten des $form->{heading}<br>
     . $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|">|;
@@ -869,10 +1032,12 @@ Bearbeiten des $form->{heading}<br>
 <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|
@@ -899,7 +1064,7 @@ Bearbeiten des $form->{heading}<br>
         . $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="|
@@ -937,6 +1102,7 @@ sub update {
 
   map { $form->{$_} = $form->parse_amount(\%myconfig, $form->{$_}) }
     qw(exchangerate creditlimit creditremaining);
+  $form->{update} = 1;
 
   &check_name($form->{vc});
 
@@ -964,7 +1130,9 @@ sub update {
     $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') {
@@ -990,11 +1158,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/\"/&quot;/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"};
 
@@ -1050,7 +1223,7 @@ sub update {
         $form->{rowcount}--;
         $form->{"discount_$i"} = "";
         &display_form;
-          } else {
+      } else {
 
         $form->{"id_$i"}   = 0;
         $form->{"unit_$i"} = $locale->text('ea');
@@ -1693,7 +1866,7 @@ sub subtotal {
   $lxdebug->leave_sub();
 }
 
-sub save {
+sub save_and_close {
   $lxdebug->enter_sub();
 
   if ($form->{type} =~ /_order$/) {
@@ -1754,10 +1927,8 @@ sub save {
 
   }
 
-  # 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!'))
@@ -1767,6 +1938,80 @@ sub save {
   $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();
 
@@ -1855,7 +2100,6 @@ sub invoice {
     exit;
   }
 
-  ($null, $form->{cp_id}) = split /--/, $form->{contact};
   $form->{cp_id} *= 1;
 
   if (   $form->{type} =~ /_order/
@@ -2134,7 +2378,7 @@ sub save_as_new {
 
   $form->{saveasnew} = 1;
   $form->{closed}    = 0;
-  map { delete $form->{$_} } qw(printed emailed queued);
+  map { delete $form->{$_} } qw(printed emailed queued ordnumber quonumber);
 
   &save;
 
@@ -2150,7 +2394,6 @@ sub purchase_order {
     OE->save(\%myconfig, \%$form);
   }
 
-  ($null, $form->{cp_id}) = split /--/, $form->{contact};
   $form->{cp_id} *= 1;
 
   $form->{title} = $locale->text('Add Purchase Order');
@@ -2171,7 +2414,6 @@ sub sales_order {
     OE->save(\%myconfig, \%$form);
   }
 
-  ($null, $form->{cp_id}) = split /--/, $form->{contact};
   $form->{cp_id} *= 1;
 
   $form->{title} = $locale->text('Add Sales Order');