Notes: single-dbh
[kivitendo-erp.git] / SL / Notes.pm
1 # Notes
2
3 package Notes;
4
5 use SL::Common;
6 use SL::DBUtils;
7 use SL::DB;
8
9 use strict;
10
11 sub save {
12   $main::lxdebug->enter_sub();
13
14   my $self     = shift;
15   my %params   = @_;
16
17   my $myconfig = \%main::myconfig;
18   my $form     = $main::form;
19
20   SL::DB->client->with_transaction(sub {
21     my $dbh      = $params{dbh} || SL::DB->client->dbh;
22     my ($query, @values);
23
24     if (!$params{id}) {
25       ($params{id}) = selectrow_query($form, $dbh, qq|SELECT nextval('note_id')|);
26       $query        = qq|INSERT INTO notes (created_by, trans_id, trans_module, subject, body, id)
27                          VALUES ((SELECT id FROM employee WHERE login = ?), ?, ?, ?, ?, ?)|;
28       push @values, $::myconfig{login}, conv_i($params{trans_id}), $params{trans_module};
29
30     } else {
31       $query        = qq|UPDATE notes SET subject = ?, body = ? WHERE id = ?|;
32     }
33
34     push @values, $params{subject}, $params{body}, conv_i($params{id});
35
36     do_query($form, $dbh, $query, @values);
37   });
38
39   $main::lxdebug->leave_sub();
40
41   return $params{id};
42 }
43
44 sub retrieve {
45   $main::lxdebug->enter_sub();
46
47   my $self     = shift;
48   my %params   = @_;
49
50   Common::check_params(\%params, qw(id));
51
52   my $myconfig = \%main::myconfig;
53   my $form     = $main::form;
54
55   my $dbh      = $form->get_standard_dbh($myconfig);
56
57   my $ref      = selectfirst_hashref_query($form, $dbh, qq|SELECT * FROM notes WHERE id = ?|, conv_i($params{id}));
58
59   $main::lxdebug->leave_sub();
60
61   return $ref;
62 }
63
64 sub delete {
65   $main::lxdebug->enter_sub();
66
67   my $self     = shift;
68   my %params   = @_;
69
70   Common::check_params(\%params, qw(id));
71
72   my $myconfig = \%main::myconfig;
73   my $form     = $main::form;
74
75   SL::DB->client->with_transaction(sub {
76     my $dbh      = $params{dbh} || SL::DB->client->dbh;
77     my $id       = conv_i($params{id});
78
79     do_query($form, $dbh, qq|DELETE FROM follow_up_links WHERE follow_up_id IN (SELECT DISTINCT id FROM follow_ups WHERE note_id = ?)|, $id);
80     do_query($form, $dbh, qq|DELETE FROM follow_ups      WHERE note_id = ?|, $id);
81     do_query($form, $dbh, qq|DELETE FROM notes           WHERE id = ?|, $id);
82   });
83
84   $main::lxdebug->leave_sub();
85 }
86
87 1;