Nicht-editierbare CVars bei "als neu speichern/verwenden" richtig setzen.
[kivitendo-erp.git] / bin / mozilla / io.pl
index 68be7e7..a54f65d 100644 (file)
@@ -436,20 +436,22 @@ sub display_row {
     my @hidden_vars;
     # add hidden ids for persistent (item|invoice)_ids and previous (converted_from*) ids
     if ($is_quotation) {
-      push @hidden_vars, qw(orderitems_id);
+      push @hidden_vars, qw(orderitems_id converted_from_orderitems_id);
     }
     if ($is_s_p_order) {
-      push @hidden_vars, qw(orderitems_id converted_from_quotation_orderitems_id);
+      push @hidden_vars, qw(orderitems_id converted_from_orderitems_id converted_from_invoice_id);
     }
     if ($is_invoice) {
-      push @hidden_vars, qw(invoice_id converted_from_quotation_orderitems_id converted_from_order_orderitems_id
-                            converted_from_delivery_order_items_id);
+      push @hidden_vars, qw(invoice_id converted_from_orderitems_id converted_from_delivery_order_items_id converted_from_invoice_id);
+    }
+    if ($::form->{type} =~ /credit_note/) {
+      push @hidden_vars, qw(invoice_id converted_from_invoice_id);
     }
    if ($is_delivery_order) {
       map { $form->{"${_}_${i}"} = $form->format_amount(\%myconfig, $form->{"${_}_${i}"}) } qw(sellprice discount lastcost);
       push @hidden_vars, grep { defined $form->{"${_}_${i}"} } qw(sellprice discount not_discountable price_factor_id lastcost);
       push @hidden_vars, "stock_${stock_in_out}_sum_qty", "stock_${stock_in_out}";
-      push @hidden_vars, qw(delivery_order_items_id converted_from_order_orderitems_id);
+      push @hidden_vars, qw(delivery_order_items_id converted_from_orderitems_id converted_from_delivery_order_items_id);
     }
 
     my @HIDDENS = map { value => $_}, (
@@ -554,23 +556,23 @@ sub item_selected {
 
   map { $form->{"${_}_$i"} = $new_item->{$_} } @new_fields;
 
-  my $record       = _make_record();
-  my $price_source = SL::PriceSource->new(record_item => $record->items->[$i-1], record => $record);
-  my $best_price   = $price_source->best_price;
+  if (my $record = _make_record()) {
+    my $price_source = SL::PriceSource->new(record_item => $record->items->[$i-1], record => $record);
+    my $best_price   = $price_source->best_price;
 
-  if ($best_price) {
-    $::form->{"sellprice_$i"}           = $best_price->price;
-    $::form->{"active_price_source_$i"} = $best_price->source;
-  }
+    if ($best_price) {
+      $::form->{"sellprice_$i"}           = $best_price->price;
+      $::form->{"active_price_source_$i"} = $best_price->source;
+    }
 
-  my $best_discount = $price_source->best_discount;
+    my $best_discount = $price_source->best_discount;
 
-  if ($best_discount) {
-    $::form->{"discount_$i"}               = $best_discount->discount;
-    $::form->{"active_discount_source_$i"} = $best_discount->source;
+    if ($best_discount) {
+      $::form->{"discount_$i"}               = $best_discount->discount;
+      $::form->{"active_discount_source_$i"} = $best_discount->source;
+    }
   }
 
-
   $form->{"marge_price_factor_$i"} = $new_item->{price_factor};
 
   if ($form->{"part_payment_id_$i"} ne "") {
@@ -740,8 +742,8 @@ sub remove_emptied_rows {
                 marge_price_factor lastcost price_factor_id partnotes
                 stock_out stock_in has_sernumber reqdate orderitems_id
                 active_price_source active_discount_source delivery_order_items_id
-                invoice_id converted_from_quotation_orderitems_id
-                converted_from_order_orderitems_id converted_from_delivery_order_items_id);
+                invoice_id converted_from_orderitems_id
+                converted_from_delivery_order_items_id converted_from_invoice_id);
 
   my $ic_cvar_configs = CVar->get_configs(module => 'IC');
   push @flds, map { "ic_cvar_$_->{name}" } @{ $ic_cvar_configs };
@@ -841,7 +843,10 @@ sub order {
   $form->{old_employee_id} = $form->{employee_id};
   $form->{old_salesman_id} = $form->{salesman_id};
 
-  map { delete $form->{$_} } qw(id printed emailed queued);
+  # link doc invoice -> quotation (single id no multi mode)
+  $form->{convert_from_ar_ids} = delete $form->{id};
+
+  delete $form->{$_} foreach (qw(printed emailed queued));
   my $buysell;
   if ($form->{script} eq 'ir.pl' || $form->{type} eq 'request_quotation') {
     $form->{title} = $locale->text('Add Purchase Order');
@@ -881,6 +886,7 @@ sub order {
     map({ $form->{"${_}_${i}"} = $form->parse_amount(\%myconfig, $form->{"${_}_${i}"})
             if ($form->{"${_}_${i}"}) }
         qw(ship qty sellprice listprice basefactor discount));
+    $form->{"converted_from_invoice_id_$i"} = delete $form->{"invoice_id_$i"};
   }
 
   &prepare_order;
@@ -901,12 +907,15 @@ sub quotation {
   # we are coming from *_order and convert to quotation
   # it seems that quotation is only called if we have a existing order
   if ($form->{type} =~  /(sales|purchase)_order/) {
-    delete $form->{"orderitems_id_$_"} for 1 .. $form->{"rowcount"};
+    $form->{"converted_from_orderitems_id_$_"} = delete $form->{"orderitems_id_$_"} for 1 .. $form->{"rowcount"};
   }
+  # link doc order -> quotation (single id no multi mode)
+  $form->{convert_from_oe_ids} = delete $form->{id};
+
   if ($form->{second_run}) {
     $form->{print_and_post} = 0;
   }
-  map { delete $form->{$_} } qw(id printed emailed queued);
+  delete $form->{$_} foreach (qw(printed emailed queued));
 
   my $buysell;
   if ($form->{script} eq 'ir.pl' || $form->{type} eq 'purchase_order') {