Fixed Bug 436: Radierparagraph: Loeschen am gleichen Tag erlauben
[kivitendo-erp.git] / bin / mozilla / ir.pl
index caa8a0e..03f377d 100644 (file)
@@ -43,7 +43,7 @@ require "$form->{path}/arap.pl";
 
 sub add {
   $lxdebug->enter_sub();
-print STDERR "ir.pl-add\n";
+
   $form->{title} = $locale->text('Add Vendor Invoice');
 
   &invoice_links;
@@ -67,7 +67,7 @@ sub edit {
 
 sub invoice_links {
   $lxdebug->enter_sub();
-print STDERR "ir.pl-invoice_links\n";
+
   # create links
   $form->{webdav} = $webdav;
 
@@ -76,16 +76,40 @@ print STDERR "ir.pl-invoice_links\n";
 
   $form->create_links("AP", \%myconfig, "vendor");
 
+  #quote all_vendor Bug 133
+  foreach $ref (@{ $form->{all_vendor} }) {
+    $ref->{name} = $form->quote($ref->{name});
+  }
+
   if ($form->{all_vendor}) {
     unless ($form->{vendor_id}) {
       $form->{vendor_id} = $form->{all_vendor}->[0]->{id};
     }
   }
+  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};
+  }
 
   $cp_id = $form->{cp_id};
   IR->get_vendor(\%myconfig, \%$form);
   IR->retrieve_invoice(\%myconfig, \%$form);
   $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;
+  }
 
   # currencies
   @curr = split /:/, $form->{currencies};
@@ -97,7 +121,7 @@ print STDERR "ir.pl-invoice_links\n";
   $form->{oldvendor} = "$form->{vendor}--$form->{vendor_id}";
 
   # vendors
-  if ($form->{all_vendor}) {
+  if (@{ $form->{all_vendor} }) {
     $form->{vendor} = "$form->{vendor}--$form->{vendor_id}";
     map { $form->{selectvendor} .= "<option>$_->{name}--$_->{id}\n" }
       (@{ $form->{all_vendor} });
@@ -160,7 +184,7 @@ print STDERR "ir.pl-invoice_links\n";
 
 sub prepare_invoice {
   $lxdebug->enter_sub();
-print STDERR "ir.pl-prepare_invoice\n";
+
   if ($form->{id}) {
 
     map { $form->{$_} =~ s/\"/&quot;/g } qw(invnumber ordnumber quonumber);
@@ -176,8 +200,12 @@ print STDERR "ir.pl-prepare_invoice\n";
       $form->{"sellprice_$i"} =
         $form->format_amount(\%myconfig, $form->{"sellprice_$i"},
                              $decimalplaces);
+
+      (my $dec_qty) = ($form->{"qty_$i"} =~ /\.(\d+)/);
+      $dec_qty = length $dec_qty;
+
       $form->{"qty_$i"} =
-        $form->format_amount(\%myconfig, ($form->{"qty_$i"} * -1));
+        $form->format_amount(\%myconfig, ($form->{"qty_$i"} * -1), $dec_qty);
 
       $form->{rowcount} = $i;
     }
@@ -188,7 +216,7 @@ print STDERR "ir.pl-prepare_invoice\n";
 
 sub form_header {
   $lxdebug->enter_sub();
-print STDERR "ir.pl-form_header\n";
+
   # set option selected
   foreach $item (qw(AP vendor currency department contact)) {
     $form->{"select$item"} =~ s/ selected//;
@@ -196,6 +224,12 @@ print STDERR "ir.pl-form_header\n";
       s/option>\Q$form->{$item}\E/option selected>$form->{$item}/;
   }
 
+  $form->{radier} =
+    ($form->current_date(\%myconfig) eq $form->{gldate}) ? 1 : 0;
+
+  #quote selectvendor Bug 133
+  $form->{"selectvendor"} = $form->quote($form->{"selectvendor"});
+
   $form->{exchangerate} =
     $form->format_amount(\%myconfig, $form->{exchangerate});
 
@@ -223,15 +257,13 @@ print STDERR "ir.pl-form_header\n";
     if ($form->{forex}) {
       $exchangerate .= qq|
                 <th align=right nowrap>|
-        . $locale->text('Exchangerate')
-        . qq|</th>
+        . $locale->text('Exchangerate') . qq|</th>
                 <td>$form->{exchangerate}<input type=hidden name=exchangerate value=$form->{exchangerate}></td>
 |;
     } else {
       $exchangerate .= qq|
                 <th align=right nowrap>|
-        . $locale->text('Exchangerate')
-        . qq|</th>
+        . $locale->text('Exchangerate') . qq|</th>
                 <td><input name=exchangerate size=10 value=$form->{exchangerate}></td>
 |;
     }
@@ -240,6 +272,40 @@ print STDERR "ir.pl-form_header\n";
 <input type=hidden name=forex value=$form->{forex}>
 |;
 
+
+  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} >1) {
+    $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>|;
+
+
+
   $vendor =
     ($form->{selectvendor})
     ? qq|<select name=vendor>$form->{selectvendor}</select>\n<input type=hidden name="selectvendor" value="$form->{selectvendor}">|
@@ -270,14 +336,12 @@ print STDERR "ir.pl-form_header\n";
     $button1 = qq|
        <td><input name=invdate id=invdate size=11 title="$myconfig{dateformat}" value=$form->{invdate}></td>
        <td><input type=button name=invdate id="trigger1" value=|
-      . $locale->text('button')
-      . qq|></td>
+      . $locale->text('button') . qq|></td>
        |;
     $button2 = qq|
        <td width="13"><input name=duedate id=duedate size=11 title="$myconfig{dateformat}" value=$form->{duedate}></td>
        <td width="4"><input type=button name=duedate id="trigger2" value=|
-      . $locale->text('button')
-      . qq|></td></td>
+      . $locale->text('button') . qq|></td></td>
      |;
 
     #write Trigger
@@ -313,7 +377,8 @@ print STDERR "ir.pl-form_header\n";
 <input type=hidden name=locked value=$form->{locked}>
 
 <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}>
 
 <table width=100%>
   <tr class=listtop>
@@ -331,8 +396,7 @@ print STDERR "ir.pl-form_header\n";
                <td colspan=3>$vendor</td>
 
                 <th align=richt nowrap>|
-    . $locale->text('Contact Person')
-    . qq|</th>
+    . $locale->text('Contact Person') . qq|</th>
                 <td colspan=3>$contact</td>
 
                 <input type=hidden name=vendor_id value=$form->{vendor_id}>
@@ -357,6 +421,7 @@ print STDERR "ir.pl-form_header\n";
                <td colspan=3><select name=AP>$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>
@@ -417,7 +482,7 @@ $jsscript
 
 sub form_footer {
   $lxdebug->enter_sub();
-print STDERR "ir.pl-form_footer\n";
+
   $form->{invtotal} = $form->{invsubtotal};
 
   if (($rows = $form->numtextrows($form->{notes}, 25, 8)) < 2) {
@@ -676,29 +741,17 @@ print STDERR "ir.pl-form_footer\n";
 
   if ($form->{id}) {
     print qq|<input class=submit type=submit name=action value="|
-      . $locale->text('Update') . qq|">
+      . $locale->text('Post Payment') . qq|">
 |;
-
-    if (!$form->{revtrans}) {
-      if (!$form->{locked}) {
-        print qq|
-       <input class=submit type=submit name=action value="|
-          . $locale->text('Post') . qq|">
-       <input class=submit type=submit name=action value="|
-          . $locale->text('Delete') . qq|">
-|;
-      }
-    }
-
-    if ($invdate > $closedto) {
-      print qq|
-      <input class=submit type=submit name=action value="|
-        . $locale->text('Post as new') . qq|">
-      <input class=submit type=submit name=action value="|
-        . $locale->text('Order') . qq|">
+    print qq|<input class=submit type=submit name=action value="|
+      . $locale->text('Storno') . qq|">
+| unless ($form->{storno});
+    if ($form->{radier}) {
+    print qq|
+    <input class=submit type=submit name=action value="|
+      . $locale->text('Delete') . qq|">
 |;
-    }
-
+  }
   } else {
     if ($invdate > $closedto) {
       print qq|<input class=submit type=submit name=action value="|
@@ -776,7 +829,9 @@ sub update {
     $form->{creditremaining} += ($form->{oldinvtotal} - $form->{oldtotalpaid});
     &check_form;
 
-      } else {
+  } else {
+
+    $form->{"selected_unit_$i"} = $form->{"unit_$i"};
 
     IR->retrieve_item(\%myconfig, \%$form);
 
@@ -823,7 +878,7 @@ 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);
       }
 
       &display_form;
@@ -852,6 +907,54 @@ sub update {
   $lxdebug->leave_sub();
 }
 
+sub storno {
+  $lxdebug->enter_sub();
+
+  if ($form->{storno}) {
+    $form->error($locale->text('Cannot storno storno invoice!'));
+  }
+
+  $form->{storno_id} = $form->{id};
+  $form->{storno} = 1;
+  $form->{id} = "";
+  $form->{invnumber} = "Storno zu " . $form->{invnumber};
+  $form->{rowcount}--;
+
+  &post();
+  $lxdebug->leave_sub();
+
+}
+
+sub post_payment {
+  $lxdebug->enter_sub();
+  for $i (1 .. $form->{paidaccounts}) {
+    if ($form->{"paid_$i"}) {
+      $datepaid = $form->datetonum($form->{"datepaid_$i"}, \%myconfig);
+
+      $form->isblank("datepaid_$i", $locale->text('Payment date missing!'));
+
+      $form->error($locale->text('Cannot post payment for a closed period!'))
+        if ($datepaid <= $closedto);
+
+      if ($form->{currency} ne $form->{defaultcurrency}) {
+        $form->{"exchangerate_$i"} = $form->{exchangerate}
+          if ($invdate == $datepaid);
+        $form->isblank("exchangerate_$i",
+                       $locale->text('Exchangerate for payment missing!'));
+      }
+    }
+  }
+
+  ($form->{AP})      = split /--/, $form->{AP};
+  ($form->{AP_paid}) = split /--/, $form->{AP_paid};
+  $form->redirect($locale->text(' Payment posted!'))
+      if (IR->post_payment(\%myconfig, \%$form));
+    $form->error($locale->text('Cannot post payment!'));
+
+
+  $lxdebug->leave_sub();
+}
+
 sub post {
   $lxdebug->enter_sub();
 
@@ -876,7 +979,7 @@ sub post {
     if ($form->{currency} ne $form->{defaultcurrency});
 
   for $i (1 .. $form->{paidaccounts}) {
-    if ($form->{"paid_$i"}) {
+    if ($form->parse_amount(\%myconfig, $form->{"paid_$i"})) {
       $datepaid = $form->datetonum($form->{"datepaid_$i"}, \%myconfig);
 
       $form->isblank("datepaid_$i", $locale->text('Payment date missing!'));
@@ -898,6 +1001,11 @@ sub post {
 
   $form->{id} = 0 if $form->{postasnew};
 
+  # get new invnumber in sequence if no invnumber is given or if posasnew was requested
+  if (!$form->{invnumber} || $form->{postasnew}) {
+    $form->{invnumber} = $form->update_defaults(\%myconfig, "invnumber");
+  }
+
   $form->redirect(  $locale->text('Invoice')
                   . " $form->{invnumber} "
                   . $locale->text('posted!'))