kivitendo/SL/Drafts.pm @ 79b7fc43
bde667c2 | Moritz Bunkus | #======================================================================
|
||
# LX-Office ERP
|
||||
#
|
||||
#======================================================================
|
||||
#
|
||||
# Saving and loading drafts
|
||||
#
|
||||
#======================================================================
|
||||
package Drafts;
|
||||
use YAML;
|
||||
use SL::Common;
|
||||
use SL::DBUtils;
|
||||
38440832 | Sven Schöling | use strict;
|
||
bde667c2 | Moritz Bunkus | sub get_module {
|
||
$main::lxdebug->enter_sub();
|
||||
my ($self, $form) = @_;
|
||||
my ($module, $submodule);
|
||||
$module = $form->{"script"};
|
||||
$module =~ s/\.pl$//;
|
||||
if (grep({ $module eq $_ } qw(is ir ar ap))) {
|
||||
$submodule = "invoice";
|
||||
} else {
|
||||
$submodule = "unknown";
|
||||
}
|
||||
$main::lxdebug->leave_sub();
|
||||
return ($module, $submodule);
|
||||
}
|
||||
0f179c9a | Sven Schöling | my @dont_save = qw(login password action);
|
||
c260666f | Moritz Bunkus | |||
4491f15f | Sven Schöling | sub dont_save {
|
||
return @dont_save;
|
||||
}
|
||||
bde667c2 | Moritz Bunkus | sub save {
|
||
$main::lxdebug->enter_sub();
|
||||
my ($self, $myconfig, $form, $draft_id, $draft_description) = @_;
|
||||
c260666f | Moritz Bunkus | my ($dbh, $sth, $query, %saved, $dumped);
|
||
bde667c2 | Moritz Bunkus | |||
d57c45b5 | Sven Schöling | $dbh = $form->get_standard_dbh;
|
||
$dbh->begin_work;
|
||||
bde667c2 | Moritz Bunkus | |||
my ($module, $submodule) = $self->get_module($form);
|
||||
$query = "SELECT COUNT(*) FROM drafts WHERE id = ?";
|
||||
my ($res) = selectrow_query($form, $dbh, $query, $draft_id);
|
||||
14e6ba3a | Moritz Bunkus | |||
bde667c2 | Moritz Bunkus | if (!$res) {
|
||
$draft_id = $module . "-" . $submodule . "-" . Common::unique_id();
|
||||
14e6ba3a | Moritz Bunkus | $query = "INSERT INTO drafts (id, module, submodule) VALUES (?, ?, ?)";
|
||
bde667c2 | Moritz Bunkus | do_query($form, $dbh, $query, $draft_id, $module, $submodule);
|
||
}
|
||||
map({ $saved{$_} = $form->{$_};
|
||||
delete($form->{$_}); } @dont_save);
|
||||
14e6ba3a | Moritz Bunkus | |||
bde667c2 | Moritz Bunkus | $dumped = YAML::Dump($form);
|
||
map({ $form->{$_} = $saved{$_}; } @dont_save);
|
||||
$query =
|
||||
qq|UPDATE drafts SET description = ?, form = ?, employee_id = | .
|
||||
qq| (SELECT id FROM employee WHERE login = ?) | .
|
||||
qq|WHERE id = ?|;
|
||||
4bd1e2f8 | Sven Schöling | do_query($form, $dbh, $query, $draft_description, $dumped, $::myconfig{login}, $draft_id);
|
||
bde667c2 | Moritz Bunkus | |||
$dbh->commit();
|
||||
14e6ba3a | Moritz Bunkus | $form->{draft_id} = $draft_id;
|
||
bde667c2 | Moritz Bunkus | $form->{draft_description} = $draft_description;
|
||
$main::lxdebug->leave_sub();
|
||||
}
|
||||
sub load {
|
||||
$main::lxdebug->enter_sub();
|
||||
my ($self, $myconfig, $form, $draft_id) = @_;
|
||||
my ($dbh, $sth, $query, @values);
|
||||
d57c45b5 | Sven Schöling | $dbh = $form->get_standard_dbh;
|
||
bde667c2 | Moritz Bunkus | |||
$query = qq|SELECT id, description, form FROM drafts WHERE id = ?|;
|
||||
14e6ba3a | Moritz Bunkus | $sth = prepare_execute_query($form, $dbh, $query, $draft_id);
|
||
bde667c2 | Moritz Bunkus | |||
if (my $ref = $sth->fetchrow_hashref()) {
|
||||
@values = ($ref->{form}, $ref->{id}, $ref->{description});
|
||||
}
|
||||
$sth->finish();
|
||||
$main::lxdebug->leave_sub();
|
||||
return @values;
|
||||
}
|
||||
sub remove {
|
||||
$main::lxdebug->enter_sub();
|
||||
08df38df | Moritz Bunkus | my ($self, $myconfig, $form, @draft_ids) = @_;
|
||
bde667c2 | Moritz Bunkus | |||
08df38df | Moritz Bunkus | return $main::lxdebug->leave_sub() unless (@draft_ids);
|
||
bde667c2 | Moritz Bunkus | |||
08df38df | Moritz Bunkus | my ($dbh, $sth, $query);
|
||
bde667c2 | Moritz Bunkus | |||
d57c45b5 | Sven Schöling | $dbh = $form->get_standard_dbh;
|
||
bde667c2 | Moritz Bunkus | |||
14e6ba3a | Moritz Bunkus | $query = qq|DELETE FROM drafts WHERE id IN (| . join(", ", map { "?" } @draft_ids) . qq|)|;
|
||
08df38df | Moritz Bunkus | do_query($form, $dbh, $query, @draft_ids);
|
||
bde667c2 | Moritz Bunkus | |||
82797ff5 | Jan Büren | $dbh->commit;
|
||
bde667c2 | Moritz Bunkus | $main::lxdebug->leave_sub();
|
||
}
|
||||
sub list {
|
||||
efeb279b | Sven Schöling | $::lxdebug->enter_sub;
|
||
my $self = shift;
|
||||
my $myconfig = shift || \%::myconfig;
|
||||
my $form = shift || $::form;
|
||||
my $dbh = $form->get_standard_dbh;
|
||||
my @list = selectall_hashref_query($form, $dbh, <<SQL, $self->get_module($form));
|
||||
SELECT d.id, d.description, d.itime::timestamp(0) AS itime,
|
||||
e.name AS employee_name
|
||||
FROM drafts d
|
||||
LEFT JOIN employee e ON d.employee_id = e.id
|
||||
WHERE (d.module = ?) AND (d.submodule = ?)
|
||||
ORDER BY d.itime
|
||||
SQL
|
||||
$::lxdebug->leave_sub;
|
||||
bde667c2 | Moritz Bunkus | |||
return @list;
|
||||
}
|
||||
1;
|