X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FIC.pm;h=f6ceaceb105b6f545116af8d969b5ec7ba538608;hb=b8ee6b6ed46e55095b955ee1800b8a4b8d8ccc3f;hp=0b8924ba30ea46b8ceb79d88b93504442051a005;hpb=82c4717d48bbdb8d30c9671e71ecb0d6d8eac963;p=kivitendo-erp.git diff --git a/SL/IC.pm b/SL/IC.pm index 0b8924ba3..f6ceaceb1 100644 --- a/SL/IC.pm +++ b/SL/IC.pm @@ -40,6 +40,7 @@ use YAML; use SL::CVar; use SL::DBUtils; +use SL::HTML::Restrict; use SL::TransNumber; use strict; @@ -50,7 +51,7 @@ sub get_part { my ($self, $myconfig, $form) = @_; # connect to db - my $dbh = $form->dbconnect($myconfig); + my $dbh = $form->get_standard_dbh; my $sth; @@ -146,15 +147,10 @@ SQL } # get translations - $form->{language_values} = ""; $query = qq|SELECT language_id, translation, longdescription FROM translation WHERE parts_id = ?|; - my $trq = prepare_execute_query($form, $dbh, $query, conv_i($form->{id})); - while (my $tr = $trq->fetchrow_hashref("NAME_lc")) { - $form->{language_values} .= "---+++---" . join('--++--', @{$tr}{qw(language_id translation longdescription)}); - } - $trq->finish; + $form->{translations} = selectall_hashref_query($form, $dbh, $query, conv_i($form->{id})); # is it an orphan my @referencing_tables = qw(invoice orderitems inventory); @@ -176,7 +172,7 @@ SQL $form->{"unit_changeable"} = $form->{orphaned}; - $dbh->disconnect; + Common::webdav_folder($form) if $::lx_office_conf{features}{webdav}; $main::lxdebug->leave_sub(); } @@ -186,7 +182,7 @@ sub get_pricegroups { my ($self, $myconfig, $form) = @_; - my $dbh = $form->dbconnect($myconfig); + my $dbh = $form->get_standard_dbh; # get pricegroups my $query = qq|SELECT id, pricegroup FROM pricegroup ORDER BY lower(pricegroup)|; @@ -204,8 +200,6 @@ sub get_pricegroups { #correct rows $form->{price_rows} = $i - 1; - $dbh->disconnect; - $main::lxdebug->leave_sub(); return $pricegroups; @@ -218,7 +212,7 @@ sub retrieve_buchungsgruppen { my ($query, $sth); - my $dbh = $form->dbconnect($myconfig); + my $dbh = $form->get_standard_dbh; # get buchungsgruppen $query = qq|SELECT id, description FROM buchungsgruppen ORDER BY sortkey|; @@ -234,6 +228,7 @@ sub save { my @values; # connect to database, turn off AutoCommit my $dbh = $form->get_standard_dbh; + my $restricter = SL::HTML::Restrict->create; # save the part # make up a unique handle and store in partnumber field @@ -248,7 +243,7 @@ sub save { map { $form->{$_} = $form->parse_amount($myconfig, $form->{$_}) } qw(rop weight listprice sellprice gv lastcost); - my $makemodel = (($form->{make_1}) || ($form->{model_1})) ? 1 : 0; + my $makemodel = ($form->{make_1} || $form->{model_1} || ($form->{makemodel_rows} > 1)) ? 1 : 0; $form->{assembly} = ($form->{item} eq 'assembly') ? 1 : 0; @@ -324,13 +319,15 @@ sub save { if ($form->{"item"} ne "assembly") { $subq_expense = - qq|(SELECT bg.expense_accno_id_0 - FROM buchungsgruppen bg - WHERE bg.id = | . conv_i($form->{"buchungsgruppen_id"}, 'NULL') . qq|)|; + qq|(SELECT tc.expense_accno_id + FROM taxzone_charts tc + WHERE tc.buchungsgruppen_id = | . conv_i($form->{"buchungsgruppen_id"}, 'NULL') . qq| and tc.taxzone_id = 0)|; } else { $subq_expense = "NULL"; } + normalize_text_blocks(); + $query = qq|UPDATE parts SET partnumber = ?, @@ -351,7 +348,7 @@ sub save { buchungsgruppen_id = ?, payment_id = ?, inventory_accno_id = $subq_inventory, - income_accno_id = (SELECT bg.income_accno_id_0 FROM buchungsgruppen bg WHERE bg.id = ?), + income_accno_id = (SELECT tc.income_accno_id FROM taxzone_charts tc WHERE tc.taxzone_id = 0 and tc.buchungsgruppen_id = ?), expense_accno_id = $subq_expense, obsolete = ?, image = ?, @@ -376,7 +373,7 @@ sub save { $form->{lastcost}, $form->{weight}, $form->{unit}, - $form->{notes}, + $restricter->process($form->{notes}), $form->{formel}, $form->{rop}, conv_i($form->{warehouse_id}), @@ -403,16 +400,17 @@ sub save { # delete translation records do_query($form, $dbh, qq|DELETE FROM translation WHERE parts_id = ?|, conv_i($form->{id})); - if ($form->{language_values} ne "") { - foreach my $item (split(/---\+\+\+---/, $form->{language_values})) { - my ($language_id, $translation, $longdescription) = split(/--\+\+--/, $item); - if ($translation ne "") { - $query = qq|INSERT into translation (parts_id, language_id, translation, longdescription) - VALUES ( ?, ?, ?, ? )|; - @values = (conv_i($form->{id}), conv_i($language_id), $translation, $longdescription); - do_query($form, $dbh, $query, @values); - } + my @translations = grep { $_->{language_id} && $_->{translation} } @{ $form->{translations} || [] }; + if (@translations) { + $query = qq|INSERT into translation (parts_id, language_id, translation, longdescription) + VALUES ( ?, ?, ?, ? )|; + $sth = $dbh->prepare($query); + + foreach my $translation (@translations) { + do_statement($form, $sth, $query, conv_i($form->{id}), conv_i($translation->{language_id}), $translation->{translation}, $restricter->process($translation->{longdescription})); } + + $sth->finish(); } # delete price records @@ -459,6 +457,22 @@ sub save { # add assembly records if ($form->{item} eq 'assembly') { + # check additional assembly row + my $i = $form->{assembly_rows}; + # if last row is not empty add them + if ($form->{"partnumber_$i"} ne "") { + $query = qq|SELECT id FROM parts WHERE partnumber = ?|; + my ($partid) = selectrow_query($form, $dbh, $query,$form->{"partnumber_$i"} ); + if ( $partid ) { + $form->{"qty_$i"} = 1 unless ($form->{"qty_$i"}); + $form->{"id_$i"} = $partid; + $form->{"bom_$i"} = 0; + $form->{assembly_rows}++; + } + else { + $::form->error($::locale->text("uncorrect partnumber ").$form->{"partnumber_$i"}); + } + } for my $i (1 .. $form->{assembly_rows}) { $form->{"qty_$i"} = $form->parse_amount($myconfig, $form->{"qty_$i"}); @@ -471,7 +485,6 @@ sub save { do_query($form, $dbh, $query, @values); } } - my @a = localtime; $a[5] += 1900; $a[4]++; @@ -551,7 +564,7 @@ sub retrieve_assemblies { my ($self, $myconfig, $form) = @_; # connect to database - my $dbh = $form->dbconnect($myconfig); + my $dbh = $form->get_standard_dbh; my $where = qq|NOT p.obsolete|; my @values; @@ -578,8 +591,6 @@ sub retrieve_assemblies { $form->{assembly_items} = selectall_hashref_query($form, $dbh, $query, @values); - $dbh->disconnect; - $main::lxdebug->leave_sub(); } @@ -589,7 +600,7 @@ sub delete { my ($self, $myconfig, $form) = @_; my @values = (conv_i($form->{id})); # connect to database, turn off AutoCommit - my $dbh = $form->dbconnect_noauto($myconfig); + my $dbh = $form->get_standard_dbh; my %columns = ( "assembly" => "id", "parts" => "id" ); @@ -600,7 +611,6 @@ sub delete { # commit my $rc = $dbh->commit; - $dbh->disconnect; $main::lxdebug->leave_sub(); @@ -643,7 +653,7 @@ sub assembly_item { } # connect to database - my $dbh = $form->dbconnect($myconfig); + my $dbh = $form->get_standard_dbh; my $query = qq|SELECT p.id, p.partnumber, p.description, p.sellprice, @@ -655,8 +665,6 @@ sub assembly_item { WHERE $where|; $form->{item_list} = selectall_hashref_query($form, $dbh, $query, @values); - $dbh->disconnect; - $main::lxdebug->leave_sub(); } @@ -1203,7 +1211,7 @@ sub update_prices { my $num_updated = 0; # connect to database - my $dbh = $form->dbconnect_noauto($myconfig); + my $dbh = $form->get_standard_dbh; for my $column (qw(sellprice listprice)) { next if ($form->{$column} eq ""); @@ -1264,7 +1272,6 @@ sub update_prices { $sth_multiply->finish(); my $rc= $dbh->commit; - $dbh->disconnect; $main::lxdebug->leave_sub(); @@ -1277,7 +1284,7 @@ sub create_links { my ($self, $module, $myconfig, $form) = @_; # connect to database - my $dbh = $form->dbconnect($myconfig); + my $dbh = $form->get_standard_dbh; my @values = ('%' . $module . '%'); my $query; @@ -1333,7 +1340,6 @@ sub create_links { ($form->{priceupdate}) = selectrow_query($form, $dbh, qq|SELECT current_date|); } - $dbh->disconnect; $main::lxdebug->leave_sub(); } @@ -1342,7 +1348,7 @@ sub get_parts { $main::lxdebug->enter_sub(); my ($self, $myconfig, $form, $sortorder) = @_; - my $dbh = $form->dbconnect($myconfig); + my $dbh = $form->get_standard_dbh; my $order = qq| p.partnumber|; my $where = qq|1 = 1|; my @values; @@ -1385,7 +1391,6 @@ sub get_parts { } #while $form->{rows} = $j; $sth->finish; - $dbh->disconnect; $main::lxdebug->leave_sub(); @@ -1413,7 +1418,7 @@ sub retrieve_languages { my ($self, $myconfig, $form) = @_; # connect to database - my $dbh = $form->dbconnect($myconfig); + my $dbh = $form->get_standard_dbh; my @values; my $where; @@ -1435,8 +1440,6 @@ sub retrieve_languages { my $languages = selectall_hashref_query($form, $dbh, $query, @values); - $dbh->disconnect; - $main::lxdebug->leave_sub(); return $languages; @@ -1538,17 +1541,21 @@ sub retrieve_accounts { SELECT p.id, p.inventory_accno_id AS is_part, bg.inventory_accno_id, - bg.income_accno_id_$form->{taxzone_id} AS income_accno_id, - bg.expense_accno_id_$form->{taxzone_id} AS expense_accno_id, + tc.income_accno_id AS income_accno_id, + tc.expense_accno_id AS expense_accno_id, c1.accno AS inventory_accno, c2.accno AS income_accno, c3.accno AS expense_accno FROM parts p LEFT JOIN buchungsgruppen bg ON p.buchungsgruppen_id = bg.id + LEFT JOIN taxzone_charts tc on bg.id = tc.buchungsgruppen_id LEFT JOIN chart c1 ON bg.inventory_accno_id = c1.id - LEFT JOIN chart c2 ON bg.income_accno_id_$form->{taxzone_id} = c2.id - LEFT JOIN chart c3 ON bg.expense_accno_id_$form->{taxzone_id} = c3.id - WHERE p.id IN ($in) + LEFT JOIN chart c2 ON tc.income_accno_id = c2.id + LEFT JOIN chart c3 ON tc.expense_accno_id = c3.id + WHERE + tc.taxzone_id = '$form->{taxzone_id}' + and + p.id IN ($in) SQL my $sth_tax = prepare_query($::form, $dbh, <get_all(query => [ id => \@part_ids ]); + my %parts_by_id = map { $_->id => $_ } @$parts; + + for my $i (1..$rowcount) { + my $id = $form->{"${prefix}${i}"}; + next unless $id; + + push @{ $form->{TEMPLATE_ARRAYS}{part_type} }, $parts_by_id{$id}->type; + } + $main::lxdebug->leave_sub(); } +sub normalize_text_blocks { + $main::lxdebug->enter_sub(); + + my $self = shift; + my %params = @_; + + my $form = $params{form} || $main::form; + + # check if feature is enabled (select normalize_part_descriptions from defaults) + return unless ($::instance_conf->get_normalize_part_descriptions); + + foreach (qw(description notes)) { + $form->{$_} =~ s/\s+$//s; + $form->{$_} =~ s/^\s+//s; + $form->{$_} =~ s/ {2,}/ /g; + } + $main::lxdebug->leave_sub(); +} + 1;