Einkaufs- und Verkaufsmasken: Die potenziell langen Drop-Down-Boxen auf der linken...
[kivitendo-erp.git] / bin / mozilla / ir.pl
index 3f8812e..c9624cc 100644 (file)
@@ -35,9 +35,9 @@ use SL::IR;
 use SL::IS;
 use SL::PE;
 
-require "$form->{path}/io.pl";
-require "$form->{path}/arap.pl";
-require "$form->{path}/common.pl";
+require "bin/mozilla/io.pl";
+require "bin/mozilla/arap.pl";
+require "bin/mozilla/common.pl";
 require "bin/mozilla/drafts.pl";
 
 1;
@@ -78,10 +78,8 @@ sub invoice_links {
   $lxdebug->enter_sub();
 
   # create links
-  $form->{webdav} = $webdav;
-
-  # set jscalendar
-  $form->{jscalendar} = $jscalendar;
+  $form->{webdav}   = $webdav;
+  $form->{jsscript} = 1;
 
   $form->create_links("AP", \%myconfig, "vendor");
 
@@ -120,11 +118,6 @@ sub invoice_links {
     $form->{taxzone_id} = $taxzone_id;
   }
 
-  # currencies
-  @curr = split(/:/, $form->{currencies});
-  chomp $curr[0];
-  $form->{defaultcurrency} = $curr[0];
-
   map { $form->{selectcurrency} .= "<option>$_\n" } @curr;
 
   $form->{oldvendor} = "$form->{vendor}--$form->{vendor_id}";
@@ -278,7 +271,11 @@ sub form_header {
   $form->get_lists("contacts" => "ALL_CONTACTS",
                    "projects" => { "key" => "ALL_PROJECTS",
                                    "all" => 0,
-                                   "old_id" => \@old_project_ids });
+                                   "old_id" => \@old_project_ids },
+                   "taxzones" => "ALL_TAXZONES",
+                   "employees" => "ALL_SALESMEN",
+                   "currencies" => "ALL_CURRENCIES",
+                   "vendors" => "ALL_VENDORS");
 
   my %labels;
   my @values = (undef);
@@ -287,9 +284,19 @@ sub form_header {
     $labels{$item->{"cp_id"}} = $item->{"cp_name"} .
       ($item->{"cp_abteilung"} ? " ($item->{cp_abteilung})" : "");
   }
-  my $contact =
-    NTI($cgi->popup_menu('-name' => 'cp_id', '-values' => \@values,
-                         '-labels' => \%labels, '-default' => $form->{"cp_id"}));
+
+  my $contact;
+  if (scalar @values > 1) {
+    $contact = qq|
+    <tr>
+      <th align="right">| . $locale->text('Contact Person') . qq|</th>
+      <td>| .
+      NTI($cgi->popup_menu('-name' => 'cp_id', '-values' => \@values, '-style' => 'width: 250px',
+                           '-labels' => \%labels, '-default' => $form->{"cp_id"}))
+      . qq|
+      </td>
+    </tr>|;
+  }
 
   %labels = ();
   @values = ("");
@@ -301,49 +308,93 @@ sub form_header {
     NTI($cgi->popup_menu('-name' => 'globalproject_id', '-values' => \@values,
                          '-labels' => \%labels,
                          '-default' => $form->{"globalproject_id"}));
+  %labels = ();
+  @values = ();
+  my $i = 0;
+  foreach my $item (@{ $form->{"ALL_CURRENCIES"} }) {
+    push(@values, $item);
+    $labels{$item} = $item;
+  }
+  
+  $form->{currency} = $form->{defaultcurrency} unless $form->{currency};
+  my $currencies;
+  if (scalar @values) {
+    $currencies = qq|
+    <tr>
+      <th align="right">| . $locale->text('Currency') . qq|</th>
+      <td>| .
+        NTI($cgi->popup_menu('-name' => 'currency', '-default' => $form->{"currency"},
+                             '-values' => \@values, '-labels' => \%labels)) . qq|
+      </td>
+    </tr>|;
+  }
 
-  if (@{ $form->{TAXZONE} }) {
-    $form->{selecttaxzone} = "";
-    foreach $item (@{ $form->{TAXZONE} }) {
-      if ($item->{id} == $form->{taxzone_id}) {
-        $form->{selecttaxzone} .=
-          "<option value=$item->{id} selected>" . H($item->{description}) .
-          "</option>";
-      } else {
-        $form->{selecttaxzone} .=
-          "<option value=$item->{id}>" . H($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/;
-    }
+  %labels = ();
+  @values = ();
+  my $i = 0;
+  foreach my $item (@{ $form->{"ALL_SALESMEN"} }) {
+    push(@values, $item->{"id"});
+    $labels{$item->{"id"}} = $item->{"name"};
   }
+  my $employees = qq|
+      <tr>
+      <th align="right">| . $locale->text('Employee') . qq|</th>
+      <td>| .
+        NTI($cgi->popup_menu('-name' => 'employee_id', '-default' => $form->{"employee_id"},
+                             '-values' => \@values, '-labels' => \%labels)) . qq|
+      </td>
+      </tr>|;
 
-  $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>|;
+  %labels = ();
+  @values = ();
+  my $i = 0;
+  foreach my $item (@{ $form->{"ALL_VENDORS"} }) {
+    push(@values, $item->{name}.qq|--|.$item->{"id"});
+    $labels{$item->{"id"}} = $item->{"name"}.qq|--|.$item->{"id"};
+  }
+  my $vendors = qq|
+      <th align="right">| . $locale->text('Vendor') . qq|</th>
+      <td>| .
+        NTI($cgi->popup_menu('-name' => 'vendor', '-default' => $form->{"vendor"},
+                             '-onChange' => 'document.getElementById(\'update_button\').click();',
+                             '-values' => \@values, '-labels' => \%labels, '-style' => 'width: 250px')) . qq|
+        <input type="button" value="?" onclick="show_vc_details('vendor')">
+      </td>|;
 
+  %labels = ();
+  @values = ();
+  foreach my $item (@{ $form->{"ALL_TAXZONES"} }) {
+    push(@values, $item->{"id"});
+    $labels{$item->{"id"}} = $item->{"description"};
+  }
 
+  if (!$form->{"id"}) {
+    $taxzone = qq|
+    <tr>
+      <th align="right">| . $locale->text('Steuersatz') . qq|</th>
+      <td>| .
+        NTI($cgi->popup_menu('-name' => 'taxzone_id', '-default' => $form->{"taxzone_id"},
+                             '-values' => \@values, '-labels' => \%labels, '-style' => 'width: 250px')) . qq|
+      </td>
+    </tr>|;
 
-  $vendor =
-    ($form->{selectvendor})
-    ? qq|<select name="vendor"
-onchange="document.getElementById('update_button').click();">| .
-    qq|$form->{selectvendor}</select>\n<input type=hidden name="selectvendor" value="| .
-    Q($form->{selectvendor}) . qq|">|
-    : qq|<input name=vendor value="$form->{vendor}" size=35>|;
+  } else {
+    $taxzone = qq|
+    <tr>
+      <th align="right">| . $locale->text('Steuersatz') . qq|</th>
+      <td>
+        <input type="hidden" name="taxzone_id" value="| . H($form->{"taxzone_id"}) . qq|">
+        | . H($labels{$form->{"taxzone_id"}}) . qq|
+      </td>
+    </tr>|;
+  }
 
   $department = qq|
               <tr>
              <th align="right" nowrap>| . $locale->text('Department') . qq|</th>
-             <td colspan=3><select name=department>$form->{selectdepartment}</select>
-             <input type=hidden name=selectdepartment value="$form->{selectdepartment}">
+             <td colspan="3"><select name="department" style="width: 250px">$form->{selectdepartment}</select>
+             <input type="hidden" name="selectdepartment" value="$form->{selectdepartment}">
              </td>
            </tr>
 | if $form->{selectdepartment};
@@ -351,37 +402,28 @@ onchange="document.getElementById('update_button').click();">| .
   $n = ($form->{creditremaining} =~ /-/) ? "0" : "1";
 
   # use JavaScript Calendar or not
-  $form->{jsscript} = $form->{jscalendar};
+  $form->{jsscript} = 1;
   $jsscript = "";
-  if ($form->{jsscript}) {
-
-    # with JavaScript Calendar
-    $button1 = qq|
-       <td><input name=invdate id=invdate size=11 title="$myconfig{dateformat}" value="$form->{invdate}" onBlur=\"check_right_date_format(this)\"></td>
-       <td><input type=button name=invdate id="trigger1" value=|
-      . $locale->text('button') . qq|></td>
-       |;
-    $button2 = qq|
-       <td width="13"><input name=duedate id=duedate size=11 title="$myconfig{dateformat}" value="$form->{duedate}"  onBlur=\"check_right_date_format(this)\"></td>
-       <td width="4"><input type=button name=duedate id="trigger2" value=|
-      . $locale->text('button') . qq|></td></td>
-     |;
 
-    #write Trigger
-    $jsscript =
-      Form->write_trigger(\%myconfig, "2", "invdate", "BL", "trigger1",
-                          "duedate", "BL", "trigger2");
-  } else {
+  $button1 = qq|
+     <td><input name=invdate id=invdate size=11 title="$myconfig{dateformat}" value="$form->{invdate}" onBlur=\"check_right_date_format(this)\">
+      <input type=button name=invdate id="trigger1" value=|
+    . $locale->text('button') . qq|></td>
+     |;
+  $button2 = qq|
+     <td width="13"><input name=duedate id=duedate size=11 title="$myconfig{dateformat}" value="$form->{duedate}"  onBlur=\"check_right_date_format(this)\">
+      <input type=button name=duedate id="trigger2" value=|
+    . $locale->text('button') . qq|></td></td>
+   |;
 
-    # without JavaScript Calendar
-    $button1 =
-      qq|<td><input name=invdate size=11 title="$myconfig{dateformat}" value="$form->{invdate}"  onBlur=\"check_right_date_format(this)\"></td>|;
-    $button2 =
-      qq|<td width="13"><input name=duedate size=11 title="$myconfig{dateformat}" value="$form->{duedate}" onBlur=\"check_right_date_format(this)\"></td>|;
-  }
+  #write Trigger
+  $jsscript =
+    Form->write_trigger(\%myconfig, "2", "invdate", "BL", "trigger1",
+                        "duedate", "BL", "trigger2");
 
   $form->{"javascript"} .= qq|<script type="text/javascript" src="js/show_form_details.js"></script>|;
   $form->{"javascript"} .= qq|<script type="text/javascript" src="js/common.js"></script>|;
+  $form->{javascript}   .= qq|<script type="text/javascript" src="js/show_vc_details.js"></script>|;
 
   $jsscript .=
     $form->write_trigger(\%myconfig, 2,
@@ -396,78 +438,48 @@ onchange="document.getElementById('update_button').click();">| .
 <body onLoad="$onload">
 
 <form method=post action=$form->{script}>
+|;
 
-<input type=hidden name=id value=$form->{id}>
-<input type=hidden name=title value="$form->{title}">
-<input type=hidden name=vc value="vendor">
-<input type=hidden name=type value=$form->{type}>
-<input type=hidden name=level value=$form->{level}>
-
-<input type=hidden name=creditlimit value=$form->{creditlimit}>
-<input type=hidden name=creditremaining value=$form->{creditremaining}>
+  $form->hide_form(qw(id title vc type level creditlimit creditremaining
+                      closedto locked shippted storno storno_id
+                      max_dunning_level dunning_amount));
 
-<input type=hidden name=closedto value=$form->{closedto}>
-<input type=hidden name=locked value=$form->{locked}>
+  print qq|<p>$form->{saved_message}</p>| if $form->{saved_message};
 
-<input type=hidden name=shipped value=$form->{shipped}>
-<input type=hidden name=storno value=$form->{storno}>
-<input type=hidden name=storno_id value=$form->{storno_id}>
+  print qq|
 
-| . ($form->{saved_message} ? qq|<p>$form->{saved_message}</p>| : "") . qq|
+<div class="listtop" width="100%">$form->{title}</div>
 
 <table width=100%>
-  <tr class=listtop>
-    <th class=listtop>$form->{title}</th>
-  </tr>
-  <tr height="5"></tr>
   <tr>
-    <td>
-      <table width=100%>
-        <tr valign=top>
-         <td>
+    <td valign="top">
            <table>
+        $vendors
+        <input type="hidden" name="vendor_id" value="$form->{vendor_id}">
+        <input type="hidden" name="oldvendor" value="$form->{oldvendor}">
+        <input type="hidden" name="selectvendor" value= "1">
+        $contact
+        <tr>
+          <td align="right">| . $locale->text('Credit Limit') . qq|</td>
+          <td>$form->{creditlimit}; | . $locale->text('Remaining') . qq| <span class="plus$n">$form->{creditremaining}</span></td>
+        </tr>
              <tr>
-               <th align=right nowrap>| . $locale->text('Vendor') . qq|</th>
-               <td colspan=3>$vendor</td>
-
-                <th align=richt nowrap>|
-    . $locale->text('Contact Person') . qq|</th>
-                <td colspan=3>$contact</td>
-
-                <input type=hidden name=vendor_id value=$form->{vendor_id}>
-               <input type=hidden name=oldvendor value="$form->{oldvendor}">
-
-             </tr>
-             <tr>
-               <td></td>
-               <td colspan=3>
-                 <table>
-                   <tr>
-                     <th nowrap>| . $locale->text('Credit Limit') . qq|</th>
-                     <td>$form->{creditlimit}</td>
-                     <td width=20%></td>
-                     <th nowrap>| . $locale->text('Remaining') . qq|</th>
-                     <td class="plus$n">$form->{creditremaining}</td>
-                   </tr>
-                 </table>
-               </td>
-             <tr>
-               <th align=right>| . $locale->text('Record in') . qq|</th>
-               <td colspan=3><select name=AP>$form->{selectAP}</select></td>
-               <input type=hidden name=selectAP value="$form->{selectAP}">
+               <th align="right">| . $locale->text('Record in') . qq|</th>
+               <td colspan="3"><select name="AP" style="width: 250px">$form->{selectAP}</select></td>
+               <input type="hidden" name="selectAP" value="$form->{selectAP}">
              </tr>
               $taxzone
               $department
              <tr>
-               <th align=right nowrap>| . $locale->text('Currency') . qq|</th>
-               <td><select name=currency>$form->{selectcurrency}</select></td>
+    $currencies
                $exchangerate
              </tr>
            </table>
          </td>
          <td align=right>
            <table>
-             <tr>
+     $employees
+             <tr>   
                <th align=right nowrap>| . $locale->text('Invoice Number') . qq|</th>
                <td><input name=invnumber size=11 value="$form->{invnumber}"></td>
              </tr>
@@ -486,13 +498,13 @@ onchange="document.getElementById('update_button').click();">| .
              </tr>
         <tr>
           <th align="right" nowrap>| . $locale->text('Order Date') . qq|</th>
-          <td><input name="orddate" id="orddate" size="11" title="$myconfig{dateformat}" value="| . Q($form->{orddate}) . qq|" onBlur=\"check_right_date_format(this)\"></td>
-          <td><input type="button" name="b_orddate" id="trigger_orddate" value="?"></td>
+          <td><input name="orddate" id="orddate" size="11" title="$myconfig{dateformat}" value="| . Q($form->{orddate}) . qq|" onBlur=\"check_right_date_format(this)\">
+           <input type="button" name="b_orddate" id="trigger_orddate" value="?"></td>
         </tr>
         <tr>
           <th align="right" nowrap>| . $locale->text('Quotation Date') . qq|</th>
-          <td><input name="quodate" id="quodate" size="11" title="$myconfig{dateformat}" value="| . Q($form->{quodate}) . qq|" onBlur=\"check_right_date_format(this)\"></td>
-          <td><input type="button" name="b_quodate" id="trigger_quodate" value="?"></td>
+          <td><input name="quodate" id="quodate" size="11" title="$myconfig{dateformat}" value="| . Q($form->{quodate}) . qq|" onBlur=\"check_right_date_format(this)\">
+           <input type="button" name="b_quodate" id="trigger_quodate" value="?"></td>
         </tr>
              <tr>
           <th align="right" nowrap>| . $locale->text('Project Number') . qq|</th>
@@ -507,8 +519,6 @@ onchange="document.getElementById('update_button').click();">| .
 
 $jsscript
 
-<input type=hidden name=selectcurrency value="$form->{selectcurrency}">
-<input type=hidden name=defaultcurrency value=$form->{defaultcurrency}>
 <input type=hidden name=fxgain_accno value=$form->{fxgain_accno}>
 <input type=hidden name=fxloss_accno value=$form->{fxloss_accno}>
 <input type=hidden name=webdav value=$webdav>
@@ -652,7 +662,7 @@ sub form_footer {
            <table width=100%>
              $subtotal
              $tax
-             <tr>0
+             <tr>
                <th align=right>| . $locale->text('Total') . qq|</th>
                <td align=right>$form->{invtotal}</td>
              </tr>
@@ -691,9 +701,6 @@ sub form_footer {
     print $webdav_list;
   }
   print qq|
-<input type=hidden name=jscalendar value=$form->{jscalendar}>
-|;
-  print qq|
   <tr>
     <td colspan=$colspan>
       <table width=100%>
@@ -795,6 +802,10 @@ sub form_footer {
   $invdate  = $form->datetonum($form->{invdate},  \%myconfig);
   $closedto = $form->datetonum($form->{closedto}, \%myconfig);
 
+  print qq|<input class=submit type=submit name=action id=update_button value="|
+    . $locale->text('Update') . qq|">
+|;
+
   if ($form->{id}) {
     my $show_storno = !$form->{storno} && !IS->has_storno(\%myconfig, $form, "ap");
 
@@ -816,9 +827,6 @@ sub form_footer {
 
   }
 
-  print qq|<input class=submit type=submit name=action id=update_button value="|
-    . $locale->text('Update') . qq|">|;
-
   if (!$form->{id} && ($invdate > $closedto)) {
     print qq| <input class=submit type=submit name=action value="|
       . $locale->text('Post') . qq|"> | .
@@ -826,19 +834,8 @@ sub form_footer {
                        '-class' => 'submit'));
   }
 
-  print $form->write_trigger(\%myconfig, scalar(@triggers) / 3, @triggers) .
-    qq|
-
-<input type=hidden name=rowcount value=$form->{rowcount}>
-
-<input name=callback type=hidden value="$form->{callback}">
-
-<input type=hidden name=path value=$form->{path}>
-<input type=hidden name=login value=$form->{login}>
-<input type=hidden name=password value=$form->{password}>
-|
-  . $cgi->hidden('-name' => 'draft_id', '-default' => [$form->{draft_id}])
-  . $cgi->hidden('-name' => 'draft_description', '-default' => [$form->{draft_description}]);
+  print $form->write_trigger(\%myconfig, scalar(@triggers) / 3, @triggers);
+  $form->hide_form(qw(rowcount callback draft_id draft_description login password));
 
   # button for saving history
   if($form->{id} ne "") {
@@ -989,16 +986,30 @@ sub storno {
     $form->error($locale->text("Invoice has already been storno'd!"));
   }
 
+  my $employee_id = $form->{employee_id};
   invoice_links();
   prepare_invoice();
   relink_accounts();
 
+  # Payments must not be recorded for the new storno invoice.
+  $form->{paidaccounts} = 0;
+  map { my $key = $_; delete $form->{$key} if grep { $key =~ /^$_/ } qw(datepaid_ source_ memo_ paid_ exchangerate_ AR_paid_) } keys %{ $form };
+  
+  # saving the history
+  if(!exists $form->{addition} && $form->{id} ne "") {
+    $form->{snumbers} = qq|invnumber_| . $form->{invnumber};  
+    $form->{addition} = "CANCELED";
+    $form->save_history($form->dbconnect(\%myconfig));
+  }
+  # /saving the history
+  
   $form->{storno_id} = $form->{id};
   $form->{storno} = 1;
   $form->{id} = "";
   $form->{invnumber} = "Storno zu " . $form->{invnumber};
-
-  &post();
+  $form->{rowcount}++;
+  $form->{employee_id} = $employee_id;
+  post();
   $lxdebug->leave_sub();
 
 }
@@ -1041,8 +1052,9 @@ sub post_payment {
        
        if(!exists $form->{addition} && $form->{id} ne "") {
                # saving the history
-      $form->{snumbers} = qq|invnumber|;  
+      $form->{snumbers} = qq|invnumber_| . $form->{invnumber};  
                $form->{addition} = "PAYMENT POSTED";
+      $form->{what_done} = $form->{currency} . qq| | . $form->{paid} . qq| | . $locale->text("POSTED");
                $form->save_history($form->dbconnect(\%myconfig));
                # /saving the history 
                $form->redirect($locale->text(' Payment posted!'));
@@ -1060,6 +1072,9 @@ sub post {
   $form->isblank("invdate", $locale->text('Invoice Date missing!'));
   $form->isblank("vendor",  $locale->text('Vendor missing!'));
 
+  $form->{invnumber} =~ s/^\s*//g;
+  $form->{invnumber} =~ s/\s*$//g;
+
   # if the vendor changed get new values
   if (&check_name(vendor)) {
     &update;
@@ -1105,7 +1120,7 @@ sub post {
   if (IR->post_invoice(\%myconfig, \%$form)){
        # saving the history
        if(!exists $form->{addition} && $form->{id} ne "") {
-               $form->{snumbers} = qq|invnumber|;
+      $form->{snumbers} = qq|invnumber_| . $form->{invnumber};  
       $form->{addition} = "POSTED";
                #$form->{what_done} = $locale->text("Rechnungsnummer") . qq| | . $form->{invnumber};
                $form->save_history($form->dbconnect(\%myconfig));
@@ -1159,7 +1174,7 @@ sub yes {
   if (IR->delete_invoice(\%myconfig, \%$form)) {
     # saving the history
     if(!exists $form->{addition}) {
-      $form->{snumbers} = qq|invnumber|;
+      $form->{snumbers} = qq|invnumber_| . $form->{invnumber};  
          $form->{addition} = "DELETED";
          $form->save_history($form->dbconnect(\%myconfig));
     }