Revision 19fb04d1
Von Kivitendo Admin vor etwa 8 Jahren hinzugefügt
SL/PE.pm | ||
---|---|---|
#=====================================================================
|
||
# LX-Office ERP
|
||
# Copyright (C) 2004
|
||
# Based on SQL-Ledger Version 2.1.9
|
||
# Web http://www.lx-office.org
|
||
#
|
||
#=====================================================================
|
||
# SQL-Ledger Accounting
|
||
# Copyright (C) 1998-2002
|
||
#
|
||
# Author: Dieter Simader
|
||
# Email: dsimader@sql-ledger.org
|
||
# Web: http://www.sql-ledger.org
|
||
#
|
||
# Contributors:
|
||
#
|
||
# This program is free software; you can redistribute it and/or modify
|
||
# it under the terms of the GNU General Public License as published by
|
||
# the Free Software Foundation; either version 2 of the License, or
|
||
# (at your option) any later version.
|
||
#
|
||
# This program is distributed in the hope that it will be useful,
|
||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
# GNU General Public License for more details.
|
||
# You should have received a copy of the GNU General Public License
|
||
# along with this program; if not, write to the Free Software
|
||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||
# MA 02110-1335, USA.
|
||
#======================================================================
|
||
#
|
||
# Partsgroups and pricegroups
|
||
#
|
||
#======================================================================
|
||
|
||
package PE;
|
||
|
||
use Data::Dumper;
|
||
|
||
use SL::DBUtils;
|
||
use SL::DB;
|
||
|
||
use strict;
|
||
|
||
sub partsgroups {
|
||
$main::lxdebug->enter_sub();
|
||
|
||
my ($self, $myconfig, $form) = @_;
|
||
|
||
# connect to database
|
||
my $dbh = SL::DB->client->dbh;
|
||
|
||
my ($where, @values);
|
||
|
||
if ($form->{partsgroup}) {
|
||
$where .= qq| AND partsgroup ILIKE ?|;
|
||
push(@values, like($form->{partsgroup}));
|
||
}
|
||
|
||
if ($form->{status} eq 'orphaned') {
|
||
$where .=
|
||
qq| AND id NOT IN | .
|
||
qq| (SELECT DISTINCT partsgroup_id FROM parts | .
|
||
qq| WHERE NOT partsgroup_id ISNULL | .
|
||
qq| UNION | .
|
||
qq| SELECT DISTINCT partsgroup_id FROM custom_variable_config_partsgroups | .
|
||
qq| WHERE NOT partsgroup_id ISNULL) |;
|
||
}
|
||
|
||
substr($where, 0, 4) = "WHERE " if ($where);
|
||
|
||
my $sortorder = $form->{sort} ? $form->{sort} : "partsgroup";
|
||
$sortorder =~ s/[^a-z_]//g;
|
||
|
||
my $query =
|
||
qq|SELECT id, partsgroup FROM partsgroup | .
|
||
$where .
|
||
qq|ORDER BY $sortorder|;
|
||
|
||
$form->{item_list} = selectall_hashref_query($form, $dbh, $query, @values);
|
||
|
||
$main::lxdebug->leave_sub();
|
||
|
||
return scalar(@{ $form->{item_list} });
|
||
}
|
||
|
||
sub save_partsgroup {
|
||
$main::lxdebug->enter_sub();
|
||
|
||
my ($self, $myconfig, $form) = @_;
|
||
|
||
# connect to database
|
||
my $dbh = SL::DB->client->dbh;
|
||
|
||
$form->{discount} /= 100;
|
||
|
||
my @values = ($form->{partsgroup});
|
||
my $query;
|
||
|
||
if ($form->{id}) {
|
||
$query = qq|UPDATE partsgroup SET partsgroup = ? WHERE id = ?|;
|
||
push(@values, $form->{id});
|
||
} else {
|
||
$query = qq|INSERT INTO partsgroup (partsgroup) VALUES (?)|;
|
||
}
|
||
do_query($form, $dbh, $query, @values);
|
||
|
||
$main::lxdebug->leave_sub();
|
||
}
|
||
|
||
sub get_partsgroup {
|
||
$main::lxdebug->enter_sub();
|
||
|
||
my ($self, $myconfig, $form) = @_;
|
||
|
||
# connect to database
|
||
my $dbh = SL::DB->client->dbh;
|
||
|
||
my $query =
|
||
qq|SELECT pg.*, | .
|
||
qq|(SELECT COUNT(*) FROM parts WHERE partsgroup_id = ?) = 0 AS orphaned | .
|
||
qq|FROM partsgroup pg | .
|
||
qq|WHERE pg.id = ?|;
|
||
my $sth = prepare_execute_query($form, $dbh, $query, $form->{id},
|
||
$form->{id});
|
||
my $ref = $sth->fetchrow_hashref("NAME_lc");
|
||
|
||
map({ $form->{$_} = $ref->{$_} } keys(%{$ref}));
|
||
$sth->finish;
|
||
|
||
# also not orphaned if partsgroup is selected for a cvar filter
|
||
if ($form->{orphaned}) {
|
||
my $cvar_count = scalar( @{ SL::DB::PartsGroup->new(id => $form->{id})->custom_variable_configs } );
|
||
$form->{orphaned} = !$cvar_count;
|
||
}
|
||
|
||
$main::lxdebug->leave_sub();
|
||
}
|
||
|
||
sub delete_tuple {
|
||
$main::lxdebug->enter_sub();
|
||
|
||
my ($self, $myconfig, $form) = @_;
|
||
|
||
# connect to database
|
||
SL::DB->client->with_transaction(sub {
|
||
my $dbh = SL::DB->client->dbh;
|
||
|
||
my $table = $form->{type} eq "pricegroup" ? "pricegroup" : "partsgroup";
|
||
|
||
my $query = qq|DELETE FROM $table WHERE id = ?|;
|
||
do_query($form, $dbh, $query, $form->{id});
|
||
1;
|
||
}) or do { die SL::DB->client->error };
|
||
|
||
$main::lxdebug->leave_sub();
|
||
}
|
||
|
||
##########################
|
||
# get pricegroups from database
|
||
#
|
||
sub pricegroups {
|
||
$main::lxdebug->enter_sub();
|
||
|
||
my ($self, $myconfig, $form) = @_;
|
||
|
||
# connect to database
|
||
my $dbh = SL::DB->client->dbh;
|
||
|
||
my ($where, @values);
|
||
|
||
if ($form->{pricegroup}) {
|
||
$where .= qq| AND pricegroup ILIKE ?|;
|
||
push(@values, like($form->{pricegroup}));
|
||
}
|
||
|
||
if ($form->{status} eq 'orphaned') {
|
||
my $first = 1;
|
||
|
||
$where .= qq| AND id NOT IN (|;
|
||
foreach my $table (qw(invoice orderitems prices)) {
|
||
$where .= "UNION " unless ($first);
|
||
$first = 0;
|
||
$where .=
|
||
qq|SELECT DISTINCT pricegroup_id FROM $table | .
|
||
qq|WHERE NOT pricegroup_id ISNULL |;
|
||
}
|
||
$where .= qq|) |;
|
||
}
|
||
|
||
substr($where, 0, 4) = "WHERE " if ($where);
|
||
|
||
my $sortorder = $form->{sort} ? $form->{sort} : "pricegroup";
|
||
$sortorder =~ s/[^a-z_]//g;
|
||
|
||
my $query =
|
||
qq|SELECT id, pricegroup FROM pricegroup | .
|
||
$where .
|
||
qq|ORDER BY $sortorder|;
|
||
|
||
$form->{item_list} = selectall_hashref_query($form, $dbh, $query, @values);
|
||
|
||
$main::lxdebug->leave_sub();
|
||
|
||
return scalar(@{ $form->{item_list} });
|
||
}
|
||
|
||
########################
|
||
# save pricegruop to database
|
||
#
|
||
sub save_pricegroup {
|
||
$main::lxdebug->enter_sub();
|
||
|
||
my ($self, $myconfig, $form) = @_;
|
||
|
||
SL::DB->client->with_transaction(sub {
|
||
my $dbh = SL::DB->client->dbh;
|
||
my $query;
|
||
|
||
$form->{discount} /= 100;
|
||
|
||
my @values = ($form->{pricegroup});
|
||
|
||
if ($form->{id}) {
|
||
$query = qq|UPDATE pricegroup SET pricegroup = ? WHERE id = ? |;
|
||
push(@values, $form->{id});
|
||
} else {
|
||
$query = qq|INSERT INTO pricegroup (pricegroup) VALUES (?)|;
|
||
}
|
||
do_query($form, $dbh, $query, @values);
|
||
1;
|
||
}) or do { die SL::DB->client->error };
|
||
|
||
$main::lxdebug->leave_sub();
|
||
}
|
||
|
||
############################
|
||
# get one pricegroup from database
|
||
#
|
||
sub get_pricegroup {
|
||
$main::lxdebug->enter_sub();
|
||
|
||
my ($self, $myconfig, $form) = @_;
|
||
|
||
# connect to database
|
||
my $dbh = SL::DB->client->dbh;
|
||
|
||
my $query = qq|SELECT id, pricegroup FROM pricegroup WHERE id = ?|;
|
||
my $sth = prepare_execute_query($form, $dbh, $query, $form->{id});
|
||
my $ref = $sth->fetchrow_hashref("NAME_lc");
|
||
|
||
map({ $form->{$_} = $ref->{$_} } keys(%{$ref}));
|
||
|
||
$sth->finish;
|
||
|
||
my $first = 1;
|
||
|
||
my @values = ();
|
||
$query = qq|SELECT |;
|
||
foreach my $table (qw(invoice orderitems prices)) {
|
||
$query .= " + " unless ($first);
|
||
$first = 0;
|
||
$query .= qq|(SELECT COUNT(*) FROM $table WHERE pricegroup_id = ?) |;
|
||
push(@values, $form->{id});
|
||
}
|
||
|
||
($form->{orphaned}) = selectrow_query($form, $dbh, $query, @values);
|
||
$form->{orphaned} = !$form->{orphaned};
|
||
|
||
$main::lxdebug->leave_sub();
|
||
}
|
||
|
||
1;
|
||
|
bin/mozilla/ap.pl | ||
---|---|---|
use SL::FU;
|
||
use SL::IR;
|
||
use SL::IS;
|
||
use SL::PE;
|
||
use SL::ReportGenerator;
|
||
use SL::DB::Default;
|
||
use SL::DB::PurchaseInvoice;
|
bin/mozilla/ar.pl | ||
---|---|---|
use SL::AR;
|
||
use SL::FU;
|
||
use SL::IS;
|
||
use SL::PE;
|
||
use SL::DB::Default;
|
||
use SL::DB::Invoice;
|
||
use SL::ReportGenerator;
|
bin/mozilla/dn.pl | ||
---|---|---|
use POSIX qw(strftime);
|
||
|
||
use SL::IS;
|
||
use SL::PE;
|
||
use SL::DN;
|
||
use SL::DB::Dunning;
|
||
use SL::Helper::Flash qw(flash);
|
bin/mozilla/gl.pl | ||
---|---|---|
use SL::FU;
|
||
use SL::GL;
|
||
use SL::IS;
|
||
use SL::PE;
|
||
use SL::ReportGenerator;
|
||
use SL::DBUtils qw(selectrow_query selectall_hashref_query);
|
||
|
bin/mozilla/io.pl | ||
---|---|---|
# $locale->text('Nov')
|
||
# $locale->text('Dec')
|
||
use SL::IS;
|
||
use SL::PE;
|
||
use SL::AM;
|
||
use Data::Dumper;
|
||
|
bin/mozilla/ir.pl | ||
---|---|---|
use SL::FU;
|
||
use SL::IR;
|
||
use SL::IS;
|
||
use SL::PE;
|
||
use SL::DB::Default;
|
||
use SL::DB::PurchaseInvoice;
|
||
use List::Util qw(max sum);
|
bin/mozilla/is.pl | ||
---|---|---|
|
||
use SL::FU;
|
||
use SL::IS;
|
||
use SL::PE;
|
||
use SL::OE;
|
||
use SL::MoreCommon qw(restore_form save_form);
|
||
use Data::Dumper;
|
bin/mozilla/oe.pl | ||
---|---|---|
use SL::IR;
|
||
use SL::IS;
|
||
use SL::MoreCommon qw(ary_diff restore_form save_form);
|
||
use SL::PE;
|
||
use SL::ReportGenerator;
|
||
use List::MoreUtils qw(uniq any none);
|
||
use List::Util qw(min max reduce sum);
|
bin/mozilla/pe.pl | ||
---|---|---|
#=====================================================================
|
||
# LX-Office ERP
|
||
# Copyright (C) 2004
|
||
# Based on SQL-Ledger Version 2.1.9
|
||
# Web http://www.lx-office.org
|
||
#
|
||
#=====================================================================
|
||
# SQL-Ledger Accounting
|
||
# Copyright (c) 1998-2002
|
||
#
|
||
# Author: Dieter Simader
|
||
# Email: dsimader@sql-ledger.org
|
||
# Web: http://www.sql-ledger.org
|
||
#
|
||
#
|
||
# This program is free software; you can redistribute it and/or modify
|
||
# it under the terms of the GNU General Public License as published by
|
||
# the Free Software Foundation; either version 2 of the License, or
|
||
# (at your option) any later version.
|
||
#
|
||
# This program is distributed in the hope that it will be useful,
|
||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
# GNU General Public License for more details.
|
||
# You should have received a copy of the GNU General Public License
|
||
# along with this program; if not, write to the Free Software
|
||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||
# MA 02110-1335, USA.
|
||
#======================================================================
|
||
#
|
||
# partsgroup administration
|
||
#
|
||
#======================================================================
|
||
|
||
use SL::PE;
|
||
|
||
require "bin/mozilla/common.pl";
|
||
|
||
use strict;
|
||
|
||
1;
|
||
|
||
# end of main
|
||
|
||
sub add {
|
||
$::lxdebug->enter_sub;
|
||
$::auth->assert('config');
|
||
|
||
$::form->{title} = "Add";
|
||
$::form->{callback} ||= "$::form->{script}?action=add&type=$::form->{type}";
|
||
|
||
call_sub("form_$::form->{type}");
|
||
|
||
$::lxdebug->leave_sub;
|
||
}
|
||
|
||
sub edit {
|
||
$::lxdebug->enter_sub;
|
||
$::auth->assert('config');
|
||
|
||
$::form->{title} = "Edit";
|
||
|
||
if ($::form->{type} eq 'partsgroup') {
|
||
PE->get_partsgroup(\%::myconfig, $::form);
|
||
}
|
||
call_sub("form_$::form->{type}");
|
||
|
||
$::lxdebug->leave_sub;
|
||
}
|
||
|
||
sub search {
|
||
$::lxdebug->enter_sub;
|
||
$::auth->assert('config');
|
||
|
||
$::form->header;
|
||
print $::form->parse_html_template('pe/search', {
|
||
is_pricegroup => $::form->{type} eq 'pricegroup',
|
||
});
|
||
|
||
$::lxdebug->leave_sub;
|
||
}
|
||
|
||
sub save {
|
||
$::lxdebug->enter_sub;
|
||
$::auth->assert('config');
|
||
|
||
if ($::form->{type} eq 'partsgroup') {
|
||
$::form->isblank("partsgroup", $::locale->text('Group missing!'));
|
||
PE->save_partsgroup(\%::myconfig, $::form);
|
||
$::form->redirect($::locale->text('Group saved!'));
|
||
}
|
||
|
||
# saving the history
|
||
if(!exists $::form->{addition} && $::form->{id} ne "") {
|
||
$::form->{snumbers} = qq|projectnumber_| . $::form->{projectnumber};
|
||
$::form->{addition} = "SAVED";
|
||
$::form->save_history;
|
||
}
|
||
# /saving the history
|
||
|
||
$::lxdebug->leave_sub;
|
||
}
|
||
|
||
sub delete {
|
||
$::lxdebug->enter_sub;
|
||
$::auth->assert('config');
|
||
|
||
PE->delete_tuple(\%::myconfig, $::form);
|
||
|
||
if ($::form->{type} eq 'partsgroup') {
|
||
$::form->redirect($::locale->text('Group deleted!'));
|
||
}
|
||
$::lxdebug->leave_sub;
|
||
}
|
||
|
||
sub continue { call_sub($::form->{nextsub}); }
|
||
|
||
sub partsgroup_report {
|
||
$::lxdebug->enter_sub;
|
||
$::auth->assert('config');
|
||
|
||
$::form->{$_} = $::form->unescape($::form->{$_}) for qw(partsgroup);
|
||
PE->partsgroups(\%::myconfig, $::form);
|
||
|
||
my $callback = build_std_url("action=partsgroup_report", qw(type status));
|
||
|
||
my $option = '';
|
||
$option .= $::locale->text('All') if $::form->{status} eq 'all';
|
||
$option .= $::locale->text('Orphaned') if $::form->{status} eq 'orphaned';
|
||
|
||
if ($::form->{partsgroup}) {
|
||
$callback .= "&partsgroup=$::form->{partsgroup}";
|
||
$option .= ", " . $::locale->text('Group') . " : $::form->{partsgroup}";
|
||
}
|
||
|
||
# escape callback
|
||
$::form->{callback} = $callback;
|
||
|
||
$::form->header;
|
||
print $::form->parse_html_template('pe/partsgroup_report', {
|
||
option => $option,
|
||
callback => $callback,
|
||
editlink => build_std_url('action=edit', qw(type status callback)),
|
||
});
|
||
|
||
$::lxdebug->leave_sub;
|
||
}
|
||
|
||
sub form_partsgroup {
|
||
$::lxdebug->enter_sub;
|
||
$::auth->assert('config');
|
||
|
||
# $locale->text('Add Group')
|
||
# $locale->text('Edit Group')
|
||
$::form->{title} = $::locale->text("$::form->{title} Group");
|
||
|
||
$::form->header;
|
||
print $::form->parse_html_template('pe/partsgroup_form');
|
||
|
||
$::lxdebug->leave_sub;
|
||
}
|
bin/mozilla/rp.pl | ||
---|---|---|
use SL::DB::Default;
|
||
use SL::DB::Project;
|
||
use SL::DB::Customer;
|
||
use SL::PE;
|
||
use SL::RP;
|
||
use SL::Iconv;
|
||
use SL::ReportGenerator;
|
bin/mozilla/ustva.pl | ||
---|---|---|
use List::Util qw(first);
|
||
|
||
use SL::DB::Default;
|
||
use SL::PE;
|
||
use SL::RP;
|
||
use SL::USTVA;
|
||
use SL::User;
|
Auch abrufbar als: Unified diff
SL/PE.pm und bin/mozilla/pe.pl entfernt