Beim Anlegen einer Einheit bei allen Einheiten nachsehen, ob es eine Einheit mit...
[kivitendo-erp.git] / bin / mozilla / ic.pl
index 33a78b9..a6237fa 100644 (file)
 # Inventory Control module
 #
 #======================================================================
 # Inventory Control module
 #
 #======================================================================
+#$locale->text('ea');
 
 use SL::IC;
 
 
 use SL::IC;
 
+#use SL::PE;
+
 require "$form->{path}/io.pl";
 
 1;
 require "$form->{path}/io.pl";
 
 1;
@@ -48,9 +51,9 @@ sub add {
     "$form->{script}?action=add&item=$form->{item}&path=$form->{path}&login=$form->{login}&password=$form->{password}"
     unless $form->{callback};
 
     "$form->{script}?action=add&item=$form->{item}&path=$form->{path}&login=$form->{login}&password=$form->{password}"
     unless $form->{callback};
 
-  $form->{unit} =
-    ($form->{item} eq 'service') ? $locale->text('hr') : $locale->text('ea');
+  $form->{"unit_changeable"} = 1;
 
 
+  IC->get_pricegroups(\%myconfig, \%$form);
   &link_part;
   &display_form;
 
   &link_part;
   &display_form;
 
@@ -84,14 +87,12 @@ sub search {
     $button1 = qq|
        <td><input name=transdatefrom id=transdatefrom size=11 title="$myconfig{dateformat}"></td>
        <td><input type=button name=transdatefrom id="trigger1" value=|
     $button1 = qq|
        <td><input name=transdatefrom id=transdatefrom size=11 title="$myconfig{dateformat}"></td>
        <td><input type=button name=transdatefrom id="trigger1" value=|
-      . $locale->text('button')
-      . qq|></td>
+      . $locale->text('button') . qq|></td>
       |;
     $button2 = qq|
        <td><input name=transdateto id=transdateto size=11 title="$myconfig{dateformat}"></td>
        <td><input type=button name=transdateto name=transdateto id="trigger2" value=|
       |;
     $button2 = qq|
        <td><input name=transdateto id=transdateto size=11 title="$myconfig{dateformat}"></td>
        <td><input type=button name=transdateto name=transdateto id="trigger2" value=|
-      . $locale->text('button')
-      . qq|></td>
+      . $locale->text('button') . qq|></td>
      |;
 
     #write Trigger
      |;
 
     #write Trigger
@@ -132,8 +133,7 @@ sub search {
 
     $l_serialnumber = qq|
         <td><input name=l_serialnumber class=checkbox type=checkbox value=Y>&nbsp;|
 
     $l_serialnumber = qq|
         <td><input name=l_serialnumber class=checkbox type=checkbox value=Y>&nbsp;|
-      . $locale->text('Serial Number')
-      . qq|</td>
+      . $locale->text('Serial Number') . qq|</td>
 |;
 
   }
 |;
 
   }
@@ -272,8 +272,7 @@ sub search {
         </tr>
         <tr>
           <th align=right nowrap>|
         </tr>
         <tr>
           <th align=right nowrap>|
-    . $locale->text('Part Description')
-    . qq|</th>
+    . $locale->text('Part Description') . qq|</th>
           <td colspan=3><input name=description size=40></td>
         </tr>
        <tr>
           <td colspan=3><input name=description size=40></td>
         </tr>
        <tr>
@@ -310,71 +309,55 @@ sub search {
        </tr>
        <tr>
           <th align=right nowrap>|
        </tr>
        <tr>
           <th align=right nowrap>|
-    . $locale->text('Include in Report')
-    . qq|</th>
+    . $locale->text('Include in Report') . qq|</th>
           <td colspan=3>
             <table>
               <tr>
                 <td><input name=l_partnumber class=checkbox type=checkbox value=Y checked>&nbsp;|
           <td colspan=3>
             <table>
               <tr>
                 <td><input name=l_partnumber class=checkbox type=checkbox value=Y checked>&nbsp;|
-    . $locale->text('Part Number')
-    . qq|</td>
+    . $locale->text('Part Number') . qq|</td>
                <td><input name=l_description class=checkbox type=checkbox value=Y checked>&nbsp;|
                <td><input name=l_description class=checkbox type=checkbox value=Y checked>&nbsp;|
-    . $locale->text('Part Description')
-    . qq|</td>
+    . $locale->text('Part Description') . qq|</td>
                $l_serialnumber
                <td><input name=l_unit class=checkbox type=checkbox value=Y checked>&nbsp;|
                $l_serialnumber
                <td><input name=l_unit class=checkbox type=checkbox value=Y checked>&nbsp;|
-    . $locale->text('Unit of measure')
-    . qq|</td>
+    . $locale->text('Unit of measure') . qq|</td>
              </tr>
              <tr>
                 <td><input name=l_listprice class=checkbox type=checkbox value=Y>&nbsp;|
              </tr>
              <tr>
                 <td><input name=l_listprice class=checkbox type=checkbox value=Y>&nbsp;|
-    . $locale->text('List Price')
-    . qq|</td>
+    . $locale->text('List Price') . qq|</td>
                <td><input name=l_sellprice class=checkbox type=checkbox value=Y checked>&nbsp;|
                <td><input name=l_sellprice class=checkbox type=checkbox value=Y checked>&nbsp;|
-    . $locale->text('Sell Price')
-    . qq|</td>
-               <td><input name=l_lastcost class=checkbox type=checkbox value=Y>&nbsp;|
-    . $locale->text('Last Cost')
-    . qq|</td>
+    . $locale->text('Sell Price') . qq|</td>
+               <td><input name=l_lastcost class=checkbox type=checkbox value=Y checked>&nbsp;|
+    . $locale->text('Last Cost') . qq|</td>
                <td><input name=l_linetotal class=checkbox type=checkbox value=Y checked>&nbsp;|
                <td><input name=l_linetotal class=checkbox type=checkbox value=Y checked>&nbsp;|
-    . $locale->text('Line Total')
-    . qq|</td>
+    . $locale->text('Line Total') . qq|</td>
              </tr>
              <tr>
                 <td><input name=l_priceupdate class=checkbox type=checkbox value=Y>&nbsp;|
              </tr>
              <tr>
                 <td><input name=l_priceupdate class=checkbox type=checkbox value=Y>&nbsp;|
-    . $locale->text('Updated')
-    . qq|</td>
+    . $locale->text('Updated') . qq|</td>
                <td><input name=l_bin class=checkbox type=checkbox value=Y>&nbsp;|
                <td><input name=l_bin class=checkbox type=checkbox value=Y>&nbsp;|
-    . $locale->text('Bin')
-    . qq|</td>
+    . $locale->text('Bin') . qq|</td>
                <td><input name=l_rop class=checkbox type=checkbox value=Y>&nbsp;|
                <td><input name=l_rop class=checkbox type=checkbox value=Y>&nbsp;|
-    . $locale->text('ROP')
-    . qq|</td>
+    . $locale->text('ROP') . qq|</td>
                <td><input name=l_weight class=checkbox type=checkbox value=Y>&nbsp;|
                <td><input name=l_weight class=checkbox type=checkbox value=Y>&nbsp;|
-    . $locale->text('Weight')
-    . qq|</td>
+    . $locale->text('Weight') . qq|</td>
               </tr>
              <tr>
                 <td><input name=l_image class=checkbox type=checkbox value=Y>&nbsp;|
               </tr>
              <tr>
                 <td><input name=l_image class=checkbox type=checkbox value=Y>&nbsp;|
-    . $locale->text('Image')
-    . qq|</td>
+    . $locale->text('Image') . qq|</td>
                <td><input name=l_drawing class=checkbox type=checkbox value=Y>&nbsp;|
                <td><input name=l_drawing class=checkbox type=checkbox value=Y>&nbsp;|
-    . $locale->text('Drawing')
-    . qq|</td>
+    . $locale->text('Drawing') . qq|</td>
                <td><input name=l_microfiche class=checkbox type=checkbox value=Y>&nbsp;|
                <td><input name=l_microfiche class=checkbox type=checkbox value=Y>&nbsp;|
-    . $locale->text('Microfiche')
-    . qq|</td>
+    . $locale->text('Microfiche') . qq|</td>
                <td><input name=l_partsgroup class=checkbox type=checkbox value=Y>&nbsp;|
                <td><input name=l_partsgroup class=checkbox type=checkbox value=Y>&nbsp;|
-    . $locale->text('Group')
-    . qq|</td>
+    . $locale->text('Group') . qq|</td>
               </tr>
              <tr>
                 <td><input name=l_subtotal class=checkbox type=checkbox value=Y>&nbsp;|
               </tr>
              <tr>
                 <td><input name=l_subtotal class=checkbox type=checkbox value=Y>&nbsp;|
-    . $locale->text('Subtotal')
-    . qq|</td>
+    . $locale->text('Subtotal') . qq|</td>
                <td><input name=l_soldtotal class=checkbox type=checkbox value=Y>&nbsp;|
                <td><input name=l_soldtotal class=checkbox type=checkbox value=Y>&nbsp;|
-    . $locale->text('soldtotal')
-    . qq|</td>
+    . $locale->text('soldtotal') . qq|</td>
+               <td><input name=l_deliverydate class=checkbox type=checkbox value=Y>&nbsp;|
+    . $locale->text('deliverydate') . qq|</td>    
              </tr>
             </table>
           </td>
              </tr>
             </table>
           </td>
@@ -395,6 +378,7 @@ $jsscript
 
 <input type=hidden name=revers value="$form->{revers}">
 <input type=hidden name=lastsort value="$form->{lastsort}">
 
 <input type=hidden name=revers value="$form->{revers}">
 <input type=hidden name=lastsort value="$form->{lastsort}">
+<input type=hidden name=sort value="description">
 
 <input type=hidden name=ndxs_counter value="$form->{ndxs_counter}">
 
 
 <input type=hidden name=ndxs_counter value="$form->{ndxs_counter}">
 
@@ -411,6 +395,232 @@ $jsscript
   $lxdebug->leave_sub();
 }    #end search()
 
   $lxdebug->leave_sub();
 }    #end search()
 
+
+sub search_update_prices {
+  $lxdebug->enter_sub();
+
+  $form->{title} = $locale->text('Update prices');
+  IC->get_pricegroups(\%myconfig, \%$form);
+
+  # use JavaScript Calendar or not
+#   $form->{jsscript} = $jscalendar;
+#   $jsscript = "";
+#   if ($form->{jsscript}) {
+# 
+#     # with JavaScript Calendar
+#     $button1 = qq|
+#        <td><input name=transdatefrom id=transdatefrom size=11 title="$myconfig{dateformat}"></td>
+#        <td><input type=button name=transdatefrom id="trigger1" value=|
+#       . $locale->text('button') . qq|></td>
+#       |;
+#     $button2 = qq|
+#        <td><input name=transdateto id=transdateto size=11 title="$myconfig{dateformat}"></td>
+#        <td><input type=button name=transdateto name=transdateto id="trigger2" value=|
+#       . $locale->text('button') . qq|></td>
+#      |;
+# 
+#     #write Trigger
+#     $jsscript =
+#       Form->write_trigger(\%myconfig, "2", "transdatefrom", "BL", "trigger1",
+#                           "transdateto", "BL", "trigger2");
+#   } else {
+# 
+#     # without JavaScript Calendar
+#     $button1 = qq|
+#                               <td><input name=transdatefrom id=transdatefrom size=11 title="$myconfig{dateformat}"></td>|;
+#     $button2 = qq|
+#                               <td><input name=transdateto id=transdateto size=11 title="$myconfig{dateformat}"></td>|;
+#   }
+
+    $onhand = qq|
+            <input name=itemstatus class=radio type=radio value=onhand>&nbsp;|
+      . $locale->text('On Hand') . qq|
+            <input name=itemstatus class=radio type=radio value=short>&nbsp;|
+      . $locale->text('Short') . qq|
+|;
+
+    $makemodel = qq|
+        <tr>
+          <th align=right nowrap>| . $locale->text('Make') . qq|</th>
+          <td><input name=make size=20></td>
+          <th align=right nowrap>| . $locale->text('Model') . qq|</th>
+          <td><input name=model size=20></td>
+        </tr>
+|;
+
+    $serialnumber = qq|
+          <th align=right nowrap>| . $locale->text('Serial Number') . qq|</th>
+          <td><input name=serialnumber size=20></td>
+|;
+
+    $l_serialnumber = qq|
+        <td><input name=l_serialnumber class=checkbox type=checkbox value=Y>&nbsp;|
+      . $locale->text('Serial Number') . qq|</td>
+|;
+
+
+
+  $form->header;
+
+  print qq|
+<body>
+
+<form method=post action=$form->{script}>
+
+<input type=hidden name=title value="$form->{title}">
+
+<table width="100%">
+  <tr><th class=listtop>$form->{title}</th></tr>
+  <tr height="5"></tr>
+  <tr valign=top>
+    <td>
+      <table>
+        <tr>
+          <th align=right nowrap>| . $locale->text('Part Number') . qq|</th>
+          <td><input name=partnumber size=20></td>
+        </tr>
+        <tr>
+          <th align=right nowrap>|
+    . $locale->text('Part Description') . qq|</th>
+          <td colspan=3><input name=description size=40></td>
+        </tr>
+       <tr>
+          <th align=right nowrap>| . $locale->text('Group') . qq|</th>
+          <td><input name=partsgroup size=20></td>
+         $serialnumber
+       </tr>
+       $makemodel
+        <tr>
+          <th align=right nowrap>| . $locale->text('Drawing') . qq|</th>
+          <td><input name=drawing size=20></td>
+          <th align=right nowrap>| . $locale->text('Microfiche') . qq|</th>
+          <td><input name=microfiche size=20></td>
+        </tr>
+       $toplevel
+        <tr>
+          <td></td>
+          <td colspan=3>
+            <input name=itemstatus class=radio type=radio value=active checked>&nbsp;|
+    . $locale->text('Active') . qq|
+           $onhand
+            <input name=itemstatus class=radio type=radio value=obsolete>&nbsp;|
+    . $locale->text('Obsolete') . qq|
+            <input name=itemstatus class=radio type=radio value=orphaned>&nbsp;|
+    . $locale->text('Orphaned') . qq|
+         </td>
+       </tr>
+       $bought
+        <tr>
+         <td></td>
+          <td colspan=3>
+           <hr size=1 noshade>
+         </td>
+       </tr>|;
+  print qq|
+  <tr>
+    <td colspan=4>
+      <table width=100%>
+        <tr>
+          <th class="listheading">| . $locale->text('Preisklasse') . qq|</th>
+          <th class="listheading">| . $locale->text('Preis') . qq|</th>
+          <th class="listheading">| . $locale->text('Prozentual/Absolut') . qq|</th>
+        </tr>
+        <tr>
+          <td>| . $locale->text('Sell Price') . qq|</td>
+          <td><input name="sellprice" size=11 value="$form->{"sellprice"}"></td>
+          <td><input name="sellprice_type" class=radio type=radio value=percent checked>/<input name="sellprice_type" class=radio type=radio value=absolut></td>
+        </tr>
+        <tr>
+          <td>| . $locale->text('List Price') . qq|</td>
+          <td><input name="listprice" size=11 value="$form->{"listprice"}"></td>
+          <td><input name="listprice_type" class=radio type=radio value=percent checked>/<input name="listprice_type" class=radio type=radio value=absolut></td>
+        </tr>
+|;
+  for $i (1 .. $form->{price_rows}) {
+    print qq|
+        <tr>
+          <td width=50%><input type=hidden name="pricegroup_$i" size=30  value="$form->{"pricegroup_$i"}">$form->{"pricegroup_$i"}</td>
+          <td width=50%><input name="price_$i" size=11></td>
+          <input type=hidden name="pricegroup_id_$i" value="$form->{"pricegroup_id_$i"}">
+          <td><input name="pricegroup_type_$i" class=radio type=radio value=percent checked>/<input name="pricegroup_type_$i" class=radio type=radio value=absolut></td>
+        </tr>
+|;
+  }
+
+  print qq|
+      </table>
+    </td>
+  </tr>
+
+  <tr><td colspan=4><hr size=3 noshade></td></tr>
+</table>
+<input type=hidden name=nextsub value=confirm_price_update>
+<input type=hidden name=price_rows value=$form->{price_rows}>
+
+<input type=hidden name=path value=$form->{path}>
+<input type=hidden name=login value=$form->{login}>
+<input type=hidden name=password value=$form->{password}>
+
+<br>
+<input class=submit type=submit name=action value="|
+    . $locale->text('Continue') . qq|">
+</form>
+
+</body>
+</html>
+|;
+  $lxdebug->leave_sub();
+}    #end search()
+
+sub confirm_price_update {
+  $lxdebug->enter_sub();
+
+
+  $form->{nextsub} = "update_prices";
+  $form->header;
+
+  print qq|
+<body>
+
+<form method=post action=$form->{script}>
+|;
+
+  # delete action variable
+  map { delete $form->{$_} } qw(action header);
+
+  foreach $key (keys %$form) {
+    $form->{$key} =~ s/\"/&quot;/g;
+    print qq|<input type=hidden name=$key value="$form->{$key}">\n|;
+  }
+
+  print qq|
+<h2 class=confirm>| . $locale->text('Confirm!') . qq|</h2>
+
+<h4>|
+    . $locale->text('Are you sure you want to update the prices')
+. qq| </h4>
+
+<p>
+<input name=action class=submit type=submit value="|
+    . $locale->text('Continue') . qq|">
+</form>
+|;
+
+  $lxdebug->leave_sub();
+}
+
+sub update_prices {
+  $lxdebug->enter_sub();
+
+  if (IC->update_prices(\%myconfig, \%$form)) {
+    $form->redirect($form->{update_count} . $locale->text('prices updated!'));
+  } else {
+    $form->error($locale->text('Could not update prices!'));
+  }
+
+  $lxdebug->leave_sub();
+}
+
 sub choice {
   $lxdebug->enter_sub();
 
 sub choice {
   $lxdebug->enter_sub();
 
@@ -433,11 +643,9 @@ sub choice {
       <table>
        <tr class=listheading>
          <th class=listheading nowrap>|
       <table>
        <tr class=listheading>
          <th class=listheading nowrap>|
-    . $locale->text('Part Number')
-    . qq|</th>
+    . $locale->text('Part Number') . qq|</th>
          <th class=listheading nowrap>|
          <th class=listheading nowrap>|
-    . $locale->text('Part Description')
-    . qq|</th>
+    . $locale->text('Part Description') . qq|</th>
         </tr>
         <tr valign=top>
          <td><input type=text name=partnumber size=20 value=></td>
         </tr>
         <tr valign=top>
          <td><input type=text name=partnumber size=20 value=></td>
@@ -527,7 +735,7 @@ sub choice {
 
   print qq|
      <input class=submit type=submit name=action value="|
 
   print qq|
      <input class=submit type=submit name=action value="|
-    . $locale->text('list') . qq|"> 
+    . $locale->text('list') . qq|">
     </form>
 
    </body>
     </form>
 
    </body>
@@ -858,10 +1066,9 @@ sub addtop100 {
     $option   .= $locale->text('soldtotal') . qq| : $form->{soldtotal}<br>|;
   }
 
     $option   .= $locale->text('soldtotal') . qq| : $form->{soldtotal}<br>|;
   }
 
-  @columns =
-    $form->sort_columns(
+  @columns = $form->sort_columns(
     qw(number partnumber description partsgroup bin onhand rop unit listprice linetotallistprice sellprice linetotalsellprice lastcost linetotallastcost priceupdate weight image drawing microfiche invnumber ordnumber quonumber name serialnumber soldtotal)
     qw(number partnumber description partsgroup bin onhand rop unit listprice linetotallistprice sellprice linetotalsellprice lastcost linetotallastcost priceupdate weight image drawing microfiche invnumber ordnumber quonumber name serialnumber soldtotal)
-    );
+  );
 
   if ($form->{l_linetotal}) {
     $form->{l_onhand} = "Y";
 
   if ($form->{l_linetotal}) {
     $form->{l_onhand} = "Y";
@@ -890,7 +1097,7 @@ sub addtop100 {
         || $form->{rfq}
         || $form->{quoted}) {
       $form->{l_onhand} = "Y";
         || $form->{rfq}
         || $form->{quoted}) {
       $form->{l_onhand} = "Y";
-        } else {
+    } else {
       $form->{l_linetotalsellprice} = "";
       $form->{l_linetotallastcost}  = "";
     }
       $form->{l_linetotalsellprice} = "";
       $form->{l_linetotallastcost}  = "";
     }
@@ -1262,7 +1469,7 @@ sub addtop100 {
 
   print qq|
     <input type=hidden name=ndxs_counter value="$form->{ndxs_counter}">
 
   print qq|
     <input type=hidden name=ndxs_counter value="$form->{ndxs_counter}">
-    
+
     <input class=submit type=submit name=action value="|
     . $locale->text('choice') . qq|">|;
 
     <input class=submit type=submit name=action value="|
     . $locale->text('choice') . qq|">|;
 
@@ -1441,10 +1648,13 @@ sub generate_report {
     $option   .= $locale->text('soldtotal') . qq| : $form->{soldtotal}<br>|;
   }
 
     $option   .= $locale->text('soldtotal') . qq| : $form->{soldtotal}<br>|;
   }
 
-  @columns =
-    $form->sort_columns(
-    qw(partnumber description partsgroup bin onhand rop unit listprice linetotallistprice sellprice linetotalsellprice lastcost linetotallastcost priceupdate weight image drawing microfiche invnumber ordnumber quonumber name serialnumber soldtotal)
-    );
+  if ($form->{l_deliverydate}) {
+    $callback .= "&deliverydate=$form->{deliverydate}";
+  }
+
+  @columns = $form->sort_columns(
+    qw(partnumber description partsgroup bin onhand rop unit listprice linetotallistprice sellprice linetotalsellprice lastcost linetotallastcost priceupdate weight image drawing microfiche invnumber ordnumber quonumber name serialnumber soldtotal deliverydate)
+  );
 
   if ($form->{l_linetotal}) {
     $form->{l_onhand} = "Y";
 
   if ($form->{l_linetotal}) {
     $form->{l_onhand} = "Y";
@@ -1473,7 +1683,7 @@ sub generate_report {
         || $form->{rfq}
         || $form->{quoted}) {
       $form->{l_onhand} = "Y";
         || $form->{rfq}
         || $form->{quoted}) {
       $form->{l_onhand} = "Y";
-        } else {
+    } else {
       $form->{l_linetotalsellprice} = "";
       $form->{l_linetotallastcost}  = "";
     }
       $form->{l_linetotalsellprice} = "";
       $form->{l_linetotallastcost}  = "";
     }
@@ -1580,6 +1790,11 @@ sub generate_report {
     . $locale->text('soldtotal')
     . qq|</a></th>|;
 
     . $locale->text('soldtotal')
     . qq|</a></th>|;
 
+  $column_header{deliverydate} =
+    qq|<th nowrap><a class=listheading href=$callback&sort=deliverydate&revers=$form->{revers}&lastsort=$form->{lastsort}>|
+    . $locale->text('deliverydate')
+    . qq|</a></th>|;
+
   $form->header;
   $colspan = $#column_index + 1;
 
   $form->header;
   $colspan = $#column_index + 1;
 
@@ -1641,7 +1856,7 @@ sub generate_report {
 
     $column_data{partnumber} =
       "<td align=$align><a href=$form->{script}?action=edit&id=$ref->{id}&path=$form->{path}&login=$form->{login}&password=$form->{password}&callback=$callback>$ref->{partnumber}&nbsp;</a></td>";
 
     $column_data{partnumber} =
       "<td align=$align><a href=$form->{script}?action=edit&id=$ref->{id}&path=$form->{path}&login=$form->{login}&password=$form->{password}&callback=$callback>$ref->{partnumber}&nbsp;</a></td>";
-    $column_data{description} = "<td>$ref->{description}&nbsp;</td>";
+    $column_data{description} = "<td><a href=$form->{script}?action=edit&id=$ref->{id}&path=$form->{path}&login=$form->{login}&password=$form->{password}&callback=$callback>$ref->{description}&nbsp;</a></td>";
     $column_data{partsgroup}  = "<td>$ref->{partsgroup}&nbsp;</td>";
 
     $column_data{onhand} =
     $column_data{partsgroup}  = "<td>$ref->{partsgroup}&nbsp;</td>";
 
     $column_data{onhand} =
@@ -1731,6 +1946,8 @@ sub generate_report {
       . $form->format_amount(\%myconfig, $ref->{soldtotal}, '', "&nbsp;")
       . "</td>";
 
       . $form->format_amount(\%myconfig, $ref->{soldtotal}, '', "&nbsp;")
       . "</td>";
 
+    $column_data{deliverydate} = "<td>$ref->{deliverydate}</td>";
+
     $i++;
     $i %= 2;
     print "<tr class=listrow$i>";
     $i++;
     $i %= 2;
     print "<tr class=listrow$i>";
@@ -1921,7 +2138,9 @@ sub link_part {
   delete $form->{amount};
 
   $form->get_partsgroup(\%myconfig, { all => 1 });
   delete $form->{amount};
 
   $form->get_partsgroup(\%myconfig, { all => 1 });
+
   $form->{partsgroup} = "$form->{partsgroup}--$form->{partsgroup_id}";
   $form->{partsgroup} = "$form->{partsgroup}--$form->{partsgroup_id}";
+
   if (@{ $form->{all_partsgroup} }) {
     $form->{selectpartsgroup} = qq|<option>\n|;
     map {
   if (@{ $form->{all_partsgroup} }) {
     $form->{selectpartsgroup} = qq|<option>\n|;
     map {
@@ -1955,18 +2174,28 @@ sub link_part {
 sub form_header {
   $lxdebug->enter_sub();
 
 sub form_header {
   $lxdebug->enter_sub();
 
+  my $dec = '';
+
+  #decimalplaces for listprice
+  ($dec) = ($form->{listprice} =~ /\.(\d+)/);
+  $dec = length $dec;
+  my $decimalplaces = ($dec == 2) ? $dec : 2;
+  $form->{listprice} =
+    $form->format_amount(\%myconfig, $form->{listprice}, $decimalplaces);
+
+  #decimalplaces for sellprice and gv
   ($dec) = ($form->{sellprice} =~ /\.(\d+)/);
   $dec = length $dec;
   ($dec) = ($form->{sellprice} =~ /\.(\d+)/);
   $dec = length $dec;
-  my $decimalplaces = ($dec > 2) ? $dec : 2;
+  my $decimalplaces = ($dec == 2) ? $dec : 2;
 
   map {
     $form->{$_} =
       $form->format_amount(\%myconfig, $form->{$_}, $decimalplaces)
 
   map {
     $form->{$_} =
       $form->format_amount(\%myconfig, $form->{$_}, $decimalplaces)
-  } qw(listprice sellprice gv);
+  } qw(sellprice gv);
 
   ($dec) = ($form->{lastcost} =~ /\.(\d+)/);
   $dec = length $dec;
 
   ($dec) = ($form->{lastcost} =~ /\.(\d+)/);
   $dec = length $dec;
-  my $decimalplaces = ($dec > 2) ? $dec : 2;
+  my $decimalplaces = ($dec == 2) ? $dec : 2;
 
   $form->{lastcost} =
     $form->format_amount(\%myconfig, $form->{lastcost}, $decimalplaces);
 
   $form->{lastcost} =
     $form->format_amount(\%myconfig, $form->{lastcost}, $decimalplaces);
@@ -1978,12 +2207,22 @@ sub form_header {
     $form->{$item} =~ s/\"/&quot;/g;
   }
 
     $form->{$item} =~ s/\"/&quot;/g;
   }
 
+  $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 (($rows = $form->numtextrows($form->{notes}, 40)) < 2) {
   if (($rows = $form->numtextrows($form->{notes}, 40)) < 2) {
-    $rows = 2;
+    $rows = 4;
   }
 
   $notes =
   }
 
   $notes =
-    qq|<textarea name=notes rows=$rows cols=40 wrap=soft>$form->{notes}</textarea>|;
+    qq|<textarea name=notes rows=$rows cols=50 wrap=soft>$form->{notes}</textarea>|;
   if (($rows = $form->numtextrows($form->{description}, 40)) > 1) {
     $description =
       qq|<textarea name="description" rows=$rows cols=40 wrap=soft>$form->{description}</textarea>|;
   if (($rows = $form->numtextrows($form->{description}, 40)) > 1) {
     $description =
       qq|<textarea name="description" rows=$rows cols=40 wrap=soft>$form->{description}</textarea>|;
@@ -1996,6 +2235,27 @@ sub form_header {
     $form->{"IC_tax_$item"} = ($form->{"IC_tax_$item"}) ? "checked" : "";
   }
 
     $form->{"IC_tax_$item"} = ($form->{"IC_tax_$item"}) ? "checked" : "";
   }
 
+  IC->retrieve_buchungsgruppen(\%myconfig, $form);
+  if (@{ $form->{BUCHUNGSGRUPPEN} }) {
+    foreach $item (@{ $form->{BUCHUNGSGRUPPEN} }) {
+      if ($item->{id} == $form->{buchungsgruppen_id}) {
+        $form->{selectbuchungsgruppe} .=
+          "<option value=$item->{id} selected>$item->{description}\n";
+      } elsif (($form->{id} && $form->{orphaned}) || (!$form->{id})) {
+        $form->{selectbuchungsgruppe} .=
+          "<option value=$item->{id}>$item->{description}\n";
+      }
+
+    }
+  }
+
+  $buchungsgruppe = qq|
+             <tr>
+               <th align=right>| . $locale->text('Buchungsgruppe') . qq|</th>
+               <td><select name=buchungsgruppen_id>$form->{selectbuchungsgruppe}</select></td>
+             </tr>|;
+
+
   # set option
   foreach $item (qw(IC IC_income IC_expense)) {
     if ($form->{$item}) {
   # set option
   foreach $item (qw(IC IC_income IC_expense)) {
     if ($form->{$item}) {
@@ -2008,6 +2268,7 @@ sub form_header {
       }
     }
   }
       }
     }
   }
+
   if ($form->{selectpartsgroup}) {
     $form->{selectpartsgroup} = $form->unescape($form->{selectpartsgroup});
     $partsgroup =
   if ($form->{selectpartsgroup}) {
     $form->{selectpartsgroup} = $form->unescape($form->{selectpartsgroup});
     $partsgroup =
@@ -2034,8 +2295,7 @@ sub form_header {
   $lastcost = qq|
              <tr>
                 <th align="right" nowrap="true">|
   $lastcost = qq|
              <tr>
                 <th align="right" nowrap="true">|
-    . $locale->text('Last Cost')
-    . qq|</th>
+    . $locale->text('Last Cost') . qq|</th>
                 <td><input name=lastcost size=11 value=$form->{lastcost}></td>
               </tr>
 |;
                 <td><input name=lastcost size=11 value=$form->{lastcost}></td>
               </tr>
 |;
@@ -2057,7 +2317,7 @@ sub form_header {
                <input name=selectIC_income type=hidden value="$form->{selectIC_income}">
              </tr>
              <tr>
                <input name=selectIC_income type=hidden value="$form->{selectIC_income}">
              </tr>
              <tr>
-               <th align=right>| . $locale->text('COGS') . qq|</th>
+               <th align=right>| . $locale->text('Expense') . qq|</th>
                <td><select name=IC_expense>$form->{selectIC_expense}</select></td>
                <input name=selectIC_expense type=hidden value="$form->{selectIC_expense}">
              </tr>
                <td><select name=IC_expense>$form->{selectIC_expense}</select></td>
                <input name=selectIC_expense type=hidden value="$form->{selectIC_expense}">
              </tr>
@@ -2136,6 +2396,18 @@ sub form_header {
 |;
 
   }
 |;
 
   }
+  $linkaccounts = qq|<input type=hidden name=IC_income value="$form->{IC_income_default}">|;
+
+  if ($form->{IC_cogs_default}) {
+    $form->{IC_expense_default} = $form->{IC_cogs_default};
+  }
+
+  if (($form->{item} eq "service") || ($form->{item} eq "part")) {
+    $linkaccounts .= qq|<input type=hidden name=IC_expense value="$form->{IC_expense_default}">|;
+  }
+  if ($form->{item} eq "part") {
+    $linkaccounts .= qq|<input type=hidden name=IC value="$form->{IC_default}">|;
+  }
 
   if ($form->{item} ne 'service') {
     $n   = ($form->{onhand} > 0) ? "1" : "0";
 
   if ($form->{item} ne 'service') {
     $n   = ($form->{onhand} > 0) ? "1" : "0";
@@ -2143,8 +2415,7 @@ sub form_header {
              <tr>
                <th align="right" nowrap>| . $locale->text('On Hand') . qq|</th>
                <th align=left nowrap class="plus$n">&nbsp;|
              <tr>
                <th align="right" nowrap>| . $locale->text('On Hand') . qq|</th>
                <th align=left nowrap class="plus$n">&nbsp;|
-      . $form->format_amount(\%myconfig, $form->{onhand})
-      . qq|</th>
+      . $form->format_amount(\%myconfig, $form->{onhand}) . qq|</th>
              </tr>
 |;
 
              </tr>
 |;
 
@@ -2173,17 +2444,26 @@ sub form_header {
     $vegv = qq|
              <tr>
                <th align="right" nowrap="true">|
     $vegv = qq|
              <tr>
                <th align="right" nowrap="true">|
-      . $locale->text('Verrechnungseinheit')
-      . qq|</th>
+      . $locale->text('Verrechnungseinheit') . qq|</th>
                <td><input name=ve size=10 value=$form->{ve}></td>
              </tr>
               <tr>
                <th align="right" nowrap="true">|
                <td><input name=ve size=10 value=$form->{ve}></td>
              </tr>
               <tr>
                <th align="right" nowrap="true">|
-      . $locale->text('Geschäftsvolumen')
-      . qq|</th>
+      . $locale->text('Geschäftsvolumen') . qq|</th>
                <td><input name=gv size=10 value=$form->{gv}></td>
              </tr>
 |;
                <td><input name=gv size=10 value=$form->{gv}></td>
              </tr>
 |;
+    $notdiscountableok = ($form->{not_discountable}) == 1 ? "checked" : "";
+    $notdiscountable .= qq|
+              <tr>
+                <th align=right nowrap>|
+    . $locale->text('Not Discountable') . qq|</th>
+                <td><input class=checkbox type=checkbox name=not_discountable value=1 $notdiscountableok></td>
+             </tr>
+|;
+
+  $formel =
+    qq|<ilayer><layer  onmouseover="this.T_STICKY=true;this.T_STATIC=true;return escape('| . $locale->text('The formula needs the following syntax:<br>For regular article:<br>Variablename= Variable Unit;<br>Variablename2= Variable2 Unit2;<br>...<br>###<br>Variable + ( Variable2 / Variable )<br><b>Please be beware of the spaces in the formula</b><br>') . qq|')"><textarea name=formel rows=4 cols=40 wrap=soft>$form->{formel}</textarea></layer><ilayer>|;
     $imagelinks = qq|
   <tr>
     <td>
     $imagelinks = qq|
   <tr>
     <td>
@@ -2214,15 +2494,15 @@ sub form_header {
 |;
   }
   $shopok = $form->{shop} == 1 ? "checked" : "";
 |;
   }
   $shopok = $form->{shop} == 1 ? "checked" : "";
-  $obsolete .= qq|
+  $shop .= qq|
               <tr>
                 <th align=right nowrap>|
               <tr>
                 <th align=right nowrap>|
-    . $locale->text('Shopartikel')
-    . qq|</th>
+    . $locale->text('Shopartikel') . qq|</th>
                 <td><input class=checkbox type=checkbox name=shop value=1 $shopok></td>
              </tr>
 |;
 
                 <td><input class=checkbox type=checkbox name=shop value=1 $shopok></td>
              </tr>
 |;
 
+
   # type=submit $locale->text('Add Part')
   # type=submit $locale->text('Add Service')
   # type=submit $locale->text('Add Assembly')
   # type=submit $locale->text('Add Part')
   # type=submit $locale->text('Add Service')
   # type=submit $locale->text('Add Assembly')
@@ -2239,14 +2519,12 @@ sub form_header {
     $button1 = qq|
        <td width="13"><input name=priceupdate id=priceupdate size=11  title="$myconfig{dateformat}" value="$form->{priceupdate}"></td>
        <td width="4" align="left"><input type=button name=priceupdate id="trigger1" value=|
     $button1 = qq|
        <td width="13"><input name=priceupdate id=priceupdate size=11  title="$myconfig{dateformat}" value="$form->{priceupdate}"></td>
        <td width="4" align="left"><input type=button name=priceupdate id="trigger1" value=|
-      . $locale->text('button')
-      . qq|></td>
+      . $locale->text('button') . qq|></td>
       |;
 
     #write Trigger
     $jsscript =
       |;
 
     #write Trigger
     $jsscript =
-      Form->write_trigger(\%myconfig, "1", "priceupdate", "BL", "trigger1", "",
-                          "", "");
+      Form->write_trigger(\%myconfig, "1", "priceupdate", "BL", "trigger1");
   } else {
 
     # without JavaScript Calendar
   } else {
 
     # without JavaScript Calendar
@@ -2254,12 +2532,21 @@ sub form_header {
                               <td><input name=transdatefrom id=transdatefrom size=11 title="$myconfig{dateformat}"></td>|;
   }
 
                               <td><input name=transdatefrom id=transdatefrom size=11 title="$myconfig{dateformat}"></td>|;
   }
 
+  my $unit_select = '<input type="hidden" name="unit_changeable" value="' . $form->{"unit_changeable"} . '">';
+  if (!$form->{"unit_changeable"}) {
+    $unit_select .= '<input type="hidden" name="unit" value="' . $form->{"unit"} . '">' . $form->{"unit"};
+  } else {
+    my $units = AM->retrieve_units(\%myconfig, $form, $form->{"item"} eq "service" ? "service" : "dimension");
+    $unit_select .= AM->unit_select_html($units, "unit", $form->{"unit"});
+  }
+
   $form->{fokus} = "ic.partnumber";
   $form->header;
 
   print qq|
   <body onLoad="fokus()">
   $form->{fokus} = "ic.partnumber";
   $form->header;
 
   print qq|
   <body onLoad="fokus()">
+ <script type="text/javascript" src="js/common.js"></script>
+ <script type="text/javascript" src="js/parts_language_selection.js"></script>
 
 <form method=post name="ic" action=$form->{script}>
 
 
 <form method=post name="ic" action=$form->{script}>
 
@@ -2273,6 +2560,7 @@ sub form_header {
 <input name=taxaccounts type=hidden value="$form->{taxaccounts}">
 <input name=rowcount type=hidden value=$form->{rowcount}>
 <input name=eur type=hidden value=$eur>
 <input name=taxaccounts type=hidden value="$form->{taxaccounts}">
 <input name=rowcount type=hidden value=$form->{rowcount}>
 <input name=eur type=hidden value=$eur>
+<input name=language_values type=hidden value="$form->{language_values}">
 
 <table width="100%">
   <tr>
 
 <table width="100%">
   <tr>
@@ -2304,17 +2592,40 @@ sub form_header {
             <table width="100%" height="100%">
               <tr class="listheading">
                 <th class="listheading" align="center" colspan=2>|
             <table width="100%" height="100%">
               <tr class="listheading">
                 <th class="listheading" align="center" colspan=2>|
-    . $locale->text('Link Accounts')
-    . qq|</th>
+    . $locale->text('') . qq|</th>
               </tr>
               </tr>
-              $linkaccounts
+              <td colspan=2>
+                <table>
+                  $buchungsgruppe
+                  $linkaccounts
+                </table>
+              </td>
               <tr>
                 <th align="left">| . $locale->text('Notes') . qq|</th>
               <tr>
                 <th align="left">| . $locale->text('Notes') . qq|</th>
+                <th align="left">| . $locale->text('Formula') . qq|</th>
               </tr>
               <tr>
               </tr>
               <tr>
-                <td colspan=2>
+                <td>
                   $notes
                 </td>
                   $notes
                 </td>
+                <td>
+                  $formel
+                </td>
+              </tr>
+              <tr>
+                <td colspan=2>
+                  <button type="button" onclick="parts_language_selection_window('language_values')">| . $locale->text('Set Language Values') . qq|</button>
+                </td>
+              </tr>
+              <tr>
+              <td colspan=2>
+                <table>
+                <tr>
+              <th align=right>| . $locale->text('Payment Terms') . qq|</th>
+                <td><select name=payment_id>$payment</select></td>
+                </tr>
+               </table>
+              </td>
               </tr>
             </table>
           </td>
               </tr>
             </table>
           </td>
@@ -2322,10 +2633,9 @@ sub form_header {
            <table width="100%">
              <tr>
                 <th align="right" nowrap="true">|
            <table width="100%">
              <tr>
                 <th align="right" nowrap="true">|
-    . $locale->text('Updated')
-    . qq|</th>
+    . $locale->text('Updated') . qq|</th>
                 $button1
                 $button1
-              </tr>  
+              </tr>
              <tr>
                <th align="right" nowrap="true">| . $locale->text('List Price') . qq|</th>
                <td><input name=listprice size=11 value=$form->{listprice}></td>
              <tr>
                <th align="right" nowrap="true">| . $locale->text('List Price') . qq|</th>
                <td><input name=listprice size=11 value=$form->{listprice}></td>
@@ -2337,12 +2647,14 @@ sub form_header {
              $lastcost
              <tr>
                <th align="right" nowrap="true">| . $locale->text('Unit') . qq|</th>
              $lastcost
              <tr>
                <th align="right" nowrap="true">| . $locale->text('Unit') . qq|</th>
-               <td><input name=unit size=5 maxlength="10" value="$form->{unit}"></td>
+               <td>$unit_select</td>
              </tr>
              $weight
              $rop
              $bin
              </tr>
              $weight
              $rop
              $bin
+              $notdiscountable
               $vegv
               $vegv
+              $shop
              $obsolete
            </table>
          </td>
              $obsolete
            </table>
          </td>
@@ -2351,7 +2663,7 @@ sub form_header {
     </td>
   </tr>
   $imagelinks
     </td>
   </tr>
   $imagelinks
-  
+
 $jsscript
 |;
   $lxdebug->leave_sub();
 $jsscript
 |;
   $lxdebug->leave_sub();
@@ -2368,11 +2680,9 @@ sub form_footer {
             <table width="100%">
               <tr>
                 <th colspan=2 align=right>|
             <table width="100%">
               <tr>
                 <th colspan=2 align=right>|
-      . $locale->text('Total')
-      . qq|&nbsp;</th>
+      . $locale->text('Total') . qq|&nbsp;</th>
                 <th align=right>|
                 <th align=right>|
-      . $form->format_amount(\%myconfig, $form->{assemblytotal}, 2)
-      . qq|</th>
+      . $form->format_amount(\%myconfig, $form->{assemblytotal}, 2) . qq|</th>
               </tr>
             </table>
           </td>
               </tr>
             </table>
           </td>
@@ -2405,6 +2715,9 @@ sub form_footer {
     |;
   }
 
     |;
   }
 
+  print qq|
+     <input type=hidden name=price_rows value=$form->{price_rows}>|;
+
   print qq|
       <input class=submit type=submit name=action value="|
     . $locale->text('Save') . qq|">|;
   print qq|
       <input class=submit type=submit name=action value="|
     . $locale->text('Save') . qq|">|;
@@ -2444,6 +2757,7 @@ sub form_footer {
   print qq|
 
 </form>
   print qq|
 
 </form>
+<script type="text/javascript" src="js/wz_tooltip.js"></script>
 
 </body>
 </html>
 
 </body>
 </html>
@@ -2630,6 +2944,8 @@ sub assembly_row {
 
     $column_data{total} = qq|<td align=right>$linetotal</td>|;
 
 
     $column_data{total} = qq|<td align=right>$linetotal</td>|;
 
+    $column_data{deliverydate} = qq|<td align=right>$deliverydate</td>|;
+
     print qq|
         <tr>|;
 
     print qq|
         <tr>|;
 
@@ -2665,7 +2981,7 @@ sub update {
 
       &check_form;
 
 
       &check_form;
 
-        } else {
+    } else {
 
       IC->assembly_item(\%myconfig, \%$form);
 
 
       IC->assembly_item(\%myconfig, \%$form);
 
@@ -2708,8 +3024,8 @@ sub update {
   if ($form->{item} eq 'service') {
     map { $form->{$_} = $form->parse_amount(\%myconfig, $form->{$_}) }
       qw(sellprice listprice);
   if ($form->{item} eq 'service') {
     map { $form->{$_} = $form->parse_amount(\%myconfig, $form->{$_}) }
       qw(sellprice listprice);
-
     &form_header;
     &form_header;
+    &price_row;
     &form_footer;
   }
 
     &form_footer;
   }
 
@@ -2719,9 +3035,12 @@ sub update {
 sub save {
   $lxdebug->enter_sub();
 
 sub save {
   $lxdebug->enter_sub();
 
-  # check if there is a part number
+  # check if there is a part number - commented out, cause there is an automatic allocation of numbers
   # $form->isblank("partnumber", $locale->text(ucfirst $form->{item}." Part Number missing!"));
 
   # $form->isblank("partnumber", $locale->text(ucfirst $form->{item}." Part Number missing!"));
 
+  # check if there is a description
+  $form->isblank("description", $locale->text("Part Description missing!"));
+
   if ($form->{obsolete}) {
     $form->error(
       $locale->text(
   if ($form->{obsolete}) {
     $form->error(
       $locale->text(
@@ -2730,6 +3049,15 @@ sub save {
       if ($form->{onhand});
   }
 
       if ($form->{onhand});
   }
 
+  if (!$form->{buchungsgruppen_id}) {
+    $form->error($locale->text("Parts must have an entry type.") . " " . 
+     $locale->text("If you see this message, you most likely just setup your LX-Office and haven't added any entry types. If this is the case, the option is accessible for administrators in the System menu.") 
+    );
+  }
+
+  $form->error($locale->text('Description must not be empty!')) unless $form->{description};
+  $form->error($locale->text('Partnumber must not be set to empty!')) if $form->{id} && !$form->{partnumber};
+
   # expand dynamic strings
   # $locale->text('Inventory quantity must be zero before you can set this part obsolete!')
   # $locale->text('Inventory quantity must be zero before you can set this assembly obsolete!')
   # expand dynamic strings
   # $locale->text('Inventory quantity must be zero before you can set this part obsolete!')
   # $locale->text('Inventory quantity must be zero before you can set this assembly obsolete!')
@@ -2738,6 +3066,8 @@ sub save {
   # $locale->text('Assembly Number missing!')
 
   # save part
   # $locale->text('Assembly Number missing!')
 
   # save part
+  $lxdebug->message(LXDebug::DEBUG1,
+                    "ic.pl: sellprice in save = $form->{sellprice}\n");
   $rc = IC->save(\%myconfig, \%$form);
   if ($rc == 3) {
     $form->error($locale->text('Partnumber not unique!'));
   $rc = IC->save(\%myconfig, \%$form);
   if ($rc == 3) {
     $form->error($locale->text('Partnumber not unique!'));
@@ -2792,11 +3122,12 @@ sub save {
       map { $form->{"${_}_$i"} = $newform{$_} }
         qw(partnumber description bin unit listprice inventory_accno income_accno expense_accno sellprice);
       $form->{"sellprice_$i"} = $newform{lastcost} if ($form->{vendor_id});
       map { $form->{"${_}_$i"} = $newform{$_} }
         qw(partnumber description bin unit listprice inventory_accno income_accno expense_accno sellprice);
       $form->{"sellprice_$i"} = $newform{lastcost} if ($form->{vendor_id});
-
       if ($form->{exchangerate} != 0) {
         $form->{"sellprice_$i"} /= $form->{exchangerate};
       }
       if ($form->{exchangerate} != 0) {
         $form->{"sellprice_$i"} /= $form->{exchangerate};
       }
-
+      $lxdebug->message(LXDebug::DEBUG1,
+                        qq|sellprice_$i in previousform 2 = |
+                          . $form->{"sellprice_$i"} . qq|\n|);
       map { $form->{"taxaccounts_$i"} .= "$_ " } split / /,
         $newform{taxaccount};
       chop $form->{"taxaccounts_$i"};
       map { $form->{"taxaccounts_$i"} .= "$_ " } split / /,
         $newform{taxaccount};
       chop $form->{"taxaccounts_$i"};
@@ -2817,6 +3148,12 @@ sub save {
 
       $form->{creditremaining} -= $amount;
 
 
       $form->{creditremaining} -= $amount;
 
+      # redo number formatting, because invoice parse them!
+      $i = $form->{rowcount};
+      map {
+        $form->{"${_}_$i"} =
+          $form->format_amount(\%myconfig, $form->{"${_}_$i"})
+      } qw(weight listprice sellprice rop);
     }
 
     $form->{"id_$i"} = $parts_id;
     }
 
     $form->{"id_$i"} = $parts_id;
@@ -2838,6 +3175,9 @@ sub save {
     }
     $form->{callback} = $callback;
   }
     }
     $form->{callback} = $callback;
   }
+  $lxdebug->message(LXDebug::DEBUG1,
+                    qq|ic.pl: sellprice_$i nach sub save = |
+                      . $form->{"sellprice_$i"} . qq|\n|);
 
   # redirect
   $form->redirect;
 
   # redirect
   $form->redirect;
@@ -2849,6 +3189,7 @@ sub save_as_new {
   $lxdebug->enter_sub();
 
   $form->{id} = 0;
   $lxdebug->enter_sub();
 
   $form->{id} = 0;
+  $form->{partnumber} = "";
   &save;
 
   $lxdebug->leave_sub();
   &save;
 
   $lxdebug->leave_sub();
@@ -2888,15 +3229,13 @@ sub stock_assembly {
       <table>
         <tr>
           <th align="right" nowrap="true">|
       <table>
         <tr>
           <th align="right" nowrap="true">|
-    . $locale->text('Part Number')
-    . qq|</th>
+    . $locale->text('Part Number') . qq|</th>
           <td><input name=partnumber size=20></td>
           <td>&nbsp;</td>
         </tr>
         <tr>
           <th align="right" nowrap="true">|
           <td><input name=partnumber size=20></td>
           <td>&nbsp;</td>
         </tr>
         <tr>
           <th align="right" nowrap="true">|
-    . $locale->text('Part Description')
-    . qq|</th>
+    . $locale->text('Part Description') . qq|</th>
           <td><input name=description size=40></td>
         </tr>
       </table>
           <td><input name=description size=40></td>
         </tr>
       </table>
@@ -3043,5 +3382,70 @@ sub restock_assemblies {
   $lxdebug->leave_sub();
 }
 
   $lxdebug->leave_sub();
 }
 
-sub continue { &{ $form->{nextsub} } }
+sub price_row {
+  $lxdebug->enter_sub();
+
+  my ($numrows) = @_;
+
+  print qq|
+  <tr>
+    <td>
+      <table width=100%>
+        <tr>
+          <th class="listheading">| . $locale->text('Preisklasse') . qq|</th>
+          <th class="listheading">| . $locale->text('Preis') . qq|</th>
+        </tr>
+|;
+  for $i (1 .. $numrows) {
+    print qq|
+        <tr>
+          <td width=50%><input type=hidden name="pricegroup_$i" size=30  value="$form->{"pricegroup_$i"}">$form->{"pricegroup_$i"}</td>
+          <td width=50%><input name="price_$i" size=11 value="$form->{"price_$i"}"></td>
+          <input type=hidden name="pricegroup_id_$i" value="$form->{"pricegroup_id_$i"}">
+        </tr>
+|;
+  }
+
+  print qq|
+      </table>
+    </td>
+  </tr>
+|;
+
+  $lxdebug->leave_sub();
+}
+
+
+sub parts_language_selection {
+  $lxdebug->enter_sub();
+
+
+  my $languages = IC->retrieve_languages(\%myconfig, $form);
 
 
+
+  my $callback = "$form->{script}?action=parts_language_selection&";
+  map({ $callback .= "$_=" . $form->escape($form->{$_}) . "&" }
+      (qw(login path password name input_name), grep({ /^[fl]_/ } keys %$form)));
+
+  my @header_sort = qw(name longdescription);
+  my %header_title = ( "name" => $locale->text("Name"),
+                       "longdescription" => $locale->text("Long Description"),
+                       );
+
+  my @header =
+    map(+{ "column_title" => $header_title{$_},
+           "column" => $_,
+           "callback" => $callback,
+         },
+        @header_sort);
+
+  $form->{"title"} = $locale->text("Language Values");
+  $form->header();
+  print($form->parse_html_template("ic/parts_language_selection", { "HEADER" => \@header,
+                                                                   "LANGUAGES" => $languages,
+                                                                   "onload" => $onload }));
+
+  $lxdebug->leave_sub();
+}
+
+sub continue { &{ $form->{nextsub} } }