a76144333bf454fe20ad6e38ef3a24f3dfbc124c
[kivitendo-erp.git] / SL / Controller / RecordLinks.pm
1 package SL::Controller::RecordLinks;
2
3 use strict;
4
5 use parent qw(SL::Controller::Base);
6
7 use SL::DB::Order;
8 use SL::DB::DeliveryOrder;
9 use SL::DB::Invoice;
10 use SL::DB::PurchaseInvoice;
11 use SL::Locale::String;
12
13 __PACKAGE__->run_before('check_object_params', only => [ qw(ajax_list ajax_delete) ]);
14
15 #
16 # actions
17 #
18
19 sub action_ajax_list {
20   my ($self) = @_;
21
22   eval {
23     my $model          = 'SL::DB::' . $::form->{object_model};
24     my $object         = $model->new(id => $::form->{object_id})->load || die $::locale->text("Record not found");
25     my $linked_records = $object->linked_records(direction => 'both');
26     my $output         = SL::Presenter->get->grouped_record_list(
27       $linked_records,
28       with_columns      => [ qw(record_link_direction) ],
29       edit_record_links => 1,
30       object_model      => $::form->{object_model},
31       object_id         => $::form->{object_id},
32     );
33     $self->render(\$output, { layout => 0, process => 0 });
34
35     1;
36   } or do {
37     $self->render('generic/error', { layout => 0 }, label_error => $@);
38   };
39 }
40
41 sub action_ajax_delete {
42   my ($self) = @_;
43
44   my $prefix = $::form->{form_prefix} || 'record_links';
45   foreach my $str (@{ $::form->{"${prefix}_delete"} || [] }) {
46     my ($from_table, $from_id, $to_table, $to_id) = split m/__/, $str, 4;
47     $from_id *= 1;
48     $to_id   *= 1;
49
50     next if !$from_table || !$from_id || !$to_table || !$to_id;
51
52     # $::lxdebug->message(0, "INSERT INTO record_links (from_table, from_id, to_table, to_id) VALUES ('${from_table}', ${from_id}, '${to_table}', ${to_id});");
53
54     SL::DB::Manager::RecordLink->delete_all(where => [
55       from_table => $from_table,
56       from_id    => $from_id,
57       to_table   => $to_table,
58       to_id      => $to_id,
59     ]);
60   }
61
62   $self->action_ajax_list;
63 }
64
65 #
66 # filters
67 #
68
69 sub check_object_params {
70   my ($self) = @_;
71
72   return $::form->{object_id} && ($::form->{object_model} =~ m/^(?:Order|DeliveryOrder|Invoice|PurchaseInvoice)$/);
73 }
74
75 1;