-    parts_id    => $part->id,
-    description => $description,
-    qty         => $section->time_estimation * 1,
-    unit        => $self->h_unit_name,
-    sellprice   => $::form->round_amount($self->requirement_spec->hourly_rate, 2),
-    lastcost    => $part->lastcost,
-    discount    => 0,
-    project_id  => $self->requirement_spec->project_id,
+    parts_id        => $part->id,
+    description     => $description,
+    longdescription => $longdescription,
+    qty             => $is_time_based ? $section->time_estimation * 1 : 1,
+    unit            => $is_time_based ? $self->h_unit_name            : $part->unit,
+    sellprice       => $::form->round_amount($self->requirement_spec->hourly_rate * ($is_time_based ? 1 : $section->time_estimation * $section->sellprice_factor), 2),
+    lastcost        => $part->lastcost * $section->sellprice_factor,
+    discount        => 0,
+    project_id      => $self->requirement_spec->project_id,
+  );
+
+  return $item;
+}
+
+sub create_additional_part_order_item {
+  my ($self, %params) = @_;
+
+  my $add_part        = $params{additional_part};
+  my $item            = $params{item} || SL::DB::OrderItem->new;
+  my $part            = $self->parts->{ $add_part->part_id };
+  my $translation     = $params{language_id} ? first { $params{language_id} == $_->language_id } @{ $part->translations } : {};
+  my $description     = $item->description              || $add_part->description;
+  my $longdescription = $translation->{longdescription} || $part->notes;
+
+  $item->assign_attributes(
+    parts_id        => $part->id,
+    description     => $description,
+    longdescription => $longdescription,
+    qty             => $add_part->qty,
+    unit            => $add_part->unit->name,
+    sellprice       => $add_part->unit->convert_to($part->sellprice, $part->unit_obj),
+    lastcost        => $part->lastcost,
+    discount        => 0,
+    project_id      => $self->requirement_spec->project_id,