my $totalweight = 0;
+ my $record = _make_record();
# rows
my @ROWS;
$form->{"sellprice_$i"} = $form->{"price_new_$i"};
}
- my $record_item = _make_record_item($i);
+ my $record_item = $record->items->[$i-1];
# unit begin
$form->{"unit_old_$i"} ||= $form->{"unit_$i"};
$column_data{weight} = $form->format_amount(\%myconfig, $form->{"qty_$i"} * $form->{"weight_$i"}, 3) . ' ' . $defaults->{weightunit} if $defaults->{show_weight};
if ($form->{"id_${i}"}) {
- my $price_source = SL::PriceSource->new(record_item => $record_item);
+ my $price_source = SL::PriceSource->new(record_item => $record_item, record => $record);
my $price = $price_source->price_from_source($::form->{"active_price_source_$i"});
$::form->{price_sources}[$i] = $price_source;
$column_data{price_source} .= $cgi->button(-value => $price->full_description, -onClick => "toggle_price_source($i)");
$::form->{rowcount} -= $removed_rows;
}
+# TODO: both of these are makeshift so that price sources can operate on rdbo objects. if
+# this ever gets rewritten in controller style, throw this out
sub _make_record_item {
my ($row) = @_;
next unless $obj->meta->column($method);
if ($obj->meta->column($method)->isa('Rose::DB::Object::Metadata::Column::Date')) {
$obj->${\"$method\_as_date"}($::form->{"$method\_$row"});
+ } elsif ((ref $obj->meta->column($method)) =~ /^Rose::DB::Object::Metadata::Column::(?:Numeric|Float|DoublePrecsion)$/) {
+ $obj->${\"$method\_as\_number"}($::form->{$method});
} else {
$obj->$method($::form->{"$method\_$row"});
}
return $obj;
}
+
+sub _make_record {
+ my $class = {
+ sales_order => 'Order',
+ purchase_oder => 'Order',
+ sales_quotation => 'Order',
+ request_quotation => 'Order',
+ invoice => 'Invoice',
+ purchase_invoice => 'PurchaseInvoice',
+ purchase_delivery_order => 'DeliveryOrder',
+ sales_delivery_order => 'DeliveryOrder',
+ }->{$::form->{type}};
+
+ return unless $class;
+
+ $class = 'SL::DB::' . $class;
+
+ eval "require $class";
+
+ my $obj = $::form->{id}
+ ? $class->meta->convention_manager->auto_manager_class_name->find_by(id => $::form->{id})
+ : $class->new;
+
+ for my $method (keys %$::form) {
+ next unless $obj->can($method);
+ next unless $obj->meta->column($method);
+
+ if ($obj->meta->column($method)->isa('Rose::DB::Object::Metadata::Column::Date')) {
+ $obj->${\"$method\_as_date"}($::form->{$method});
+ } elsif ((ref $obj->meta->column($method)) =~ /^Rose::DB::Object::Metadata::Column::(?:Numeric|Float|DoublePrecsion)$/) {
+ $obj->${\"$method\_as\_number"}($::form->{$method});
+ } else {
+ $obj->$method($::form->{$method});
+ }
+ }
+
+ my @items;
+ for my $i (1 .. $::form->{rowcount}) {
+ next unless $::form->{"id_$i"};
+ push @items, _make_record_item($i)
+ }
+
+ $obj->orderitems(@items);
+
+ return $obj;
+}
+