Projekt

Allgemein

Profil

Herunterladen (3,32 KB) Statistiken
| Zweig: | Markierung: | Revision:
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;