X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FCT.pm;h=7ccccadcc41425e8c5f79c783ee9ec8b87d962c8;hb=7a7f33b5c1b3531ab761adba1cf19d4ad68cffcd;hp=e97905ae8c5fdb08a321f0b2b32ad213cdb7df22;hpb=d319704a66e9be64da837ccea10af6774c2b0838;p=kivitendo-erp.git diff --git a/SL/CT.pm b/SL/CT.pm index e97905ae8..7ccccadcc 100644 --- a/SL/CT.pm +++ b/SL/CT.pm @@ -37,465 +37,633 @@ package CT; +use Data::Dumper; + +use SL::Common; +use SL::CVar; +use SL::DBUtils; +use SL::FU; +use SL::Notes; + sub get_tuple { $main::lxdebug->enter_sub(); - my ($self, $myconfig, $form) = @_; + my ( $self, $myconfig, $form ) = @_; + + my $cv = $form->{db} eq "customer" ? "customer" : "vendor"; my $dbh = $form->dbconnect($myconfig); - my $query = qq|SELECT ct.*, b.id AS business, s.*, cp.* - FROM $form->{db} ct - LEFT JOIN business b on ct.business_id = b.id - LEFT JOIN shipto s on ct.id = s.trans_id - LEFT JOIN contacts cp on ct.id = cp.cp_cv_id - WHERE ct.id = $form->{id} order by cp.cp_id limit 1|; - my $sth = $dbh->prepare($query); - $sth->execute || $form->dberror($query); + my $query = + qq|SELECT ct.*, b.id AS business, cp.* | . + qq|FROM $cv ct | . + qq|LEFT JOIN business b ON (ct.business_id = b.id) | . + qq|LEFT JOIN contacts cp ON (ct.id = cp.cp_cv_id) | . + qq|WHERE (ct.id = ?) | . + qq|ORDER BY cp.cp_id LIMIT 1|; + my $sth = prepare_execute_query($form, $dbh, $query, $form->{id}); my $ref = $sth->fetchrow_hashref(NAME_lc); map { $form->{$_} = $ref->{$_} } keys %$ref; $sth->finish; - if ($form->{salesman_id}) { - my $query = qq|SELECT ct.name AS salesman - FROM $form->{db} ct - WHERE ct.id = $form->{salesman_id}|; - my $sth = $dbh->prepare($query); - $sth->execute || $form->dberror($query); - - my ($ref) = $sth->fetchrow_array(); + if ( $form->{salesman_id} ) { + my $query = + qq|SELECT ct.name AS salesman | . + qq|FROM $cv ct | . + qq|WHERE ct.id = ?|; + ($form->{salesman}) = + selectrow_query($form, $dbh, $query, $form->{salesman_id}); + } - $form->{salesman} = $ref; + my ($employee_id) = selectrow_query($form, $dbh, qq|SELECT id FROM employee WHERE login = ?|, $form->{login}); + $query = + qq|SELECT n.*, n.itime::DATE AS created_on, + e.name AS created_by_name, e.login AS created_by_login + FROM notes n + LEFT JOIN employee e ON (n.created_by = e.id) + WHERE (n.trans_id = ?) AND (n.trans_module = 'ct')|; + $form->{NOTES} = selectall_hashref_query($form, $dbh, $query, conv_i($form->{id})); - $sth->finish; + $query = + qq|SELECT fu.follow_up_date, fu.done AS follow_up_done, e.name AS created_for_name, e.name AS created_for_login + FROM follow_ups fu + LEFT JOIN employee e ON (fu.created_for_user = e.id) + WHERE (fu.note_id = ?) + AND NOT COALESCE(fu.done, FALSE) + AND ( (fu.created_by = ?) + OR (fu.created_by IN (SELECT DISTINCT what FROM follow_up_access WHERE who = ?)))|; + $sth = prepare_query($form, $dbh, $query); + + foreach my $note (@{ $form->{NOTES} }) { + do_statement($form, $sth, $query, conv_i($note->{id}), conv_i($note->{created_by}), conv_i($employee_id)); + $ref = $sth->fetchrow_hashref(); + + map { $note->{$_} = $ref->{$_} } keys %{ $ref } if ($ref); } - # check if it is orphaned - my $arap = ($form->{db} eq 'customer') ? "ar" : "ap"; - $query = qq|SELECT a.id - FROM $arap a - JOIN $form->{db} ct ON (a.$form->{db}_id = ct.id) - WHERE ct.id = $form->{id} - UNION - SELECT a.id - FROM oe a - JOIN $form->{db} ct ON (a.$form->{db}_id = ct.id) - WHERE ct.id = $form->{id}|; - $sth = $dbh->prepare($query); - $sth->execute || $form->dberror($query); - - unless ($sth->fetchrow_array) { - $form->{status} = "orphaned"; - } - $sth->finish; + $sth->finish(); - # get tax labels - $query = qq|SELECT c.accno, c.description - FROM chart c - JOIN tax t ON (t.chart_id = c.id) - WHERE c.link LIKE '%CT_tax%' - ORDER BY c.accno|; - $sth = $dbh->prepare($query); - $sth->execute || $form->dberror($query); - - while ($ref = $sth->fetchrow_hashref(NAME_lc)) { - $form->{taxaccounts} .= "$ref->{accno} "; - $form->{tax}{ $ref->{accno} }{description} = $ref->{description}; - } - $sth->finish; - chop $form->{taxaccounts}; - - # get taxes for customer/vendor - $query = qq|SELECT c.accno - FROM chart c - JOIN $form->{db}tax t ON (t.chart_id = c.id) - WHERE t.$form->{db}_id = $form->{id}|; - $sth = $dbh->prepare($query); - $sth->execute || $form->dberror($query); - - while ($ref = $sth->fetchrow_hashref(NAME_lc)) { - $form->{tax}{ $ref->{accno} }{taxable} = 1; + if ($form->{edit_note_id}) { + $query = + qq|SELECT n.id AS NOTE_id, n.subject AS NOTE_subject, n.body AS NOTE_body, + fu.id AS FU_id, fu.follow_up_date AS FU_date, fu.done AS FU_done, fu.created_for_user AS FU_created_for_user + FROM notes n + LEFT JOIN follow_ups fu ON ((n.id = fu.note_id) AND NOT COALESCE(fu.done, FALSE)) + WHERE n.id = ?|; + $ref = selectfirst_hashref_query($form, $dbh, $query, conv_i($form->{edit_note_id})); + + if ($ref) { + foreach my $key (keys %{ $ref }) { + my $new_key = $key; + $new_key =~ s/^([^_]+)/\U\1\E/; + $form->{$new_key} = $ref->{$key}; + } + } } - $sth->finish; - # get business types - $query = qq|SELECT id, description - FROM business - ORDER BY 1|; - $sth = $dbh->prepare($query); - $sth->execute || $form->dberror($query); - - while ($ref = $sth->fetchrow_hashref(NAME_lc)) { - push @{ $form->{all_business} }, $ref; - } - $sth->finish; + # check if it is orphaned + my $arap = ( $form->{db} eq 'customer' ) ? "ar" : "ap"; + $query = + qq|SELECT a.id | . + qq|FROM $arap a | . + qq|JOIN $cv ct ON (a.${cv}_id = ct.id) | . + qq|WHERE ct.id = ? | . + qq|UNION | . + qq|SELECT a.id | . + qq|FROM oe a | . + qq|JOIN $cv ct ON (a.${cv}_id = ct.id) | . + qq|WHERE ct.id = ?|; + my ($dummy) = selectrow_query($form, $dbh, $query, $form->{id}, $form->{id}); + $form->{status} = "orphaned" unless ($dummy); $dbh->disconnect; $main::lxdebug->leave_sub(); } -## LINET -sub query_titles_and_greetings { +sub populate_drop_down_boxes { $main::lxdebug->enter_sub(); - my ($self, $myconfig, $form) = @_; - my (%tmp, $ref); + my ($self, $myconfig, $form, $provided_dbh) = @_; - my $dbh = $form->dbconnect($myconfig); + my $dbh = $provided_dbh ? $provided_dbh : $form->dbconnect($myconfig); + + # get business types + $query = qq|SELECT id, description FROM business ORDER BY id|; + $form->{all_business} = selectall_hashref_query($form, $dbh, $query); + # get shipto address $query = - "SELECT DISTINCT(c.cp_greeting) FROM contacts c WHERE c.cp_greeting LIKE '%'"; - $sth = $dbh->prepare($query); - $sth->execute() || $form->dberror($query); - while ($ref = $sth->fetchrow_hashref(NAME_lc)) { - next unless ($ref->{cp_greeting} =~ /[a-zA-Z]/); - $tmp{ $ref->{cp_greeting} } = 1; - } - $sth->finish(); + qq|SELECT shipto_id, shiptoname, shiptodepartment_1 | . + qq|FROM shipto WHERE (trans_id = ?) AND (module = 'CT')|; + $form->{SHIPTO} = selectall_hashref_query($form, $dbh, $query, $form->{id}); - @{ $form->{GREETINGS} } = sort(keys(%tmp)); + # get contacts + $query = qq|SELECT cp_id, cp_name FROM contacts WHERE cp_cv_id = ?|; + $form->{CONTACTS} = selectall_hashref_query($form, $dbh, $query, $form->{id}); - %tmp = (); + # get languages + $query = qq|SELECT id, description FROM language ORDER BY id|; + $form->{languages} = selectall_hashref_query($form, $dbh, $query); - $query = - "SELECT DISTINCT(c.cp_title) FROM contacts c WHERE c.cp_title LIKE '%'"; - $sth = $dbh->prepare($query); - $sth->execute() || $form->dberror($query); - while ($ref = $sth->fetchrow_hashref(NAME_lc)) { - next unless ($ref->{cp_title} =~ /[a-zA-Z]/); - $tmp{ $ref->{cp_title} } = 1; - } - $sth->finish(); + # get payment terms + $query = qq|SELECT id, description FROM payment_terms ORDER BY sortkey|; + $form->{payment_terms} = selectall_hashref_query($form, $dbh, $query); - @{ $form->{TITLES} } = sort(keys(%tmp)); + $dbh->disconnect() unless ($provided_dbh); - $dbh->disconnect(); $main::lxdebug->leave_sub(); } -## /LINET -sub taxaccounts { +sub query_titles_and_greetings { $main::lxdebug->enter_sub(); - my ($self, $myconfig, $form) = @_; + my ( $self, $myconfig, $form ) = @_; + my ( %tmp, $ref ); my $dbh = $form->dbconnect($myconfig); - # get tax labels - my $query = qq|SELECT accno, description - FROM chart c, tax t - WHERE c.link LIKE '%CT_tax%' - AND c.id = t.chart_id - ORDER BY accno|; - $sth = $dbh->prepare($query); - $sth->execute || $form->dberror($query); - - my $ref = (); - while ($ref = $sth->fetchrow_hashref(NAME_lc)) { - $form->{taxaccounts} .= "$ref->{accno} "; - $form->{tax}{ $ref->{accno} }{description} = $ref->{description}; - } - $sth->finish; - chop $form->{taxaccounts}; + $query = + qq|SELECT DISTINCT(cp_greeting) | . + qq|FROM contacts | . + qq|WHERE cp_greeting ~ '[a-zA-Z]' | . + qq|ORDER BY cp_greeting|; + $form->{GREETINGS} = [ selectall_array_query($form, $dbh, $query) ]; - # this is just for the selection for type of business - $query = qq|SELECT id, description - FROM business|; - $sth = $dbh->prepare($query); - $sth->execute || $form->dberror($query); + $query = + qq|SELECT DISTINCT(greeting) | . + qq|FROM customer | . + qq|WHERE greeting ~ '[a-zA-Z]' | . + qq|UNION | . + qq|SELECT DISTINCT(greeting) | . + qq|FROM vendor | . + qq|WHERE greeting ~ '[a-zA-Z]' | . + qq|ORDER BY greeting|; + my %tmp; + map({ $tmp{$_} = 1; } selectall_array_query($form, $dbh, $query)); + $form->{COMPANY_GREETINGS} = [ sort(keys(%tmp)) ]; - while ($ref = $sth->fetchrow_hashref(NAME_lc)) { - push @{ $form->{all_business} }, $ref; - } - $sth->finish; + $query = + qq|SELECT DISTINCT(cp_title) | . + qq|FROM contacts | . + qq|WHERE cp_title ~ '[a-zA-Z]'|; + $form->{TITLES} = [ selectall_array_query($form, $dbh, $query) ]; - $dbh->disconnect; + $query = + qq|SELECT DISTINCT(cp_abteilung) | . + qq|FROM contacts | . + qq|WHERE cp_abteilung ~ '[a-zA-Z]'|; + $form->{DEPARTMENT} = [ selectall_array_query($form, $dbh, $query) ]; + $dbh->disconnect(); $main::lxdebug->leave_sub(); } sub save_customer { $main::lxdebug->enter_sub(); - my ($self, $myconfig, $form) = @_; + my ( $self, $myconfig, $form ) = @_; + + # set pricegroup to default + $form->{klass} = 0 unless ($form->{klass}); # connect to database - my $dbh = $form->dbconnect($myconfig); -##LINET - map({ $form->{"cp_${_}"} = $form->{"selected_cp_${_}"} - if ($form->{"selected_cp_${_}"}); - } qw(title greeting)); - - # escape ' - map { $form->{$_} =~ s/\'/\'\'/g } - qw(customernumber name street zipcode city country homepage contact notes cp_title cp_greeting language); -##/LINET + my $dbh = $form->dbconnect_noauto($myconfig); + + map( { + $form->{"cp_${_}"} = $form->{"selected_cp_${_}"} + if ( $form->{"selected_cp_${_}"} ); + } qw(title greeting abteilung) ); + $form->{"greeting"} = $form->{"selected_company_greeting"} + if ( $form->{"selected_company_greeting"} ); + # assign value discount, terms, creditlimit - $form->{discount} = $form->parse_amount($myconfig, $form->{discount}); + $form->{discount} = $form->parse_amount( $myconfig, $form->{discount} ); $form->{discount} /= 100; - $form->{terms} *= 1; - $form->{taxincluded} *= 1; - $form->{obsolete} *= 1; - $form->{business} *= 1; - $form->{salesman_id} *= 1; - $form->{creditlimit} = $form->parse_amount($myconfig, $form->{creditlimit}); - - my ($query, $sth); - - if ($form->{id}) { - $query = qq|DELETE FROM customertax - WHERE customer_id = $form->{id}|; - $dbh->do($query) || $form->dberror($query); - - $query = qq|DELETE FROM shipto - WHERE trans_id = $form->{id}|; - $dbh->do($query) || $form->dberror($query); - } else { - my $uid = rand() . time; - - $uid .= $form->{login}; + $form->{creditlimit} = $form->parse_amount( $myconfig, $form->{creditlimit} ); - $uid = substr($uid, 2, 75); + my ( $query, $sth, $f_id ); - $query = qq|INSERT INTO customer (name) - VALUES ('$uid')|; - $dbh->do($query) || $form->dberror($query); + if ( $form->{id} ) { + $query = qq|SELECT id FROM customer WHERE customernumber = ?|; + ($f_id) = selectrow_query($form, $dbh, $query, $form->{customernumber}); - $query = qq|SELECT c.id FROM customer c - WHERE c.name = '$uid'|; - $sth = $dbh->prepare($query); - $sth->execute || $form->dberror($query); + if (($f_id ne $form->{id}) && ($f_id ne "")) { + $main::lxdebug->leave_sub(); + return 3; + } - ($form->{id}) = $sth->fetchrow_array; - $sth->finish; + } else { if (!$form->{customernumber} && $form->{business}) { $form->{customernumber} = - $form->update_business($myconfig, $form->{business}); + $form->update_business($myconfig, $form->{business}, $dbh); } if (!$form->{customernumber}) { $form->{customernumber} = - $form->update_defaults($myconfig, "customernumber"); + $form->update_defaults($myconfig, "customernumber", $dbh); } + $query = qq|SELECT c.id FROM customer c WHERE c.customernumber = ?|; + ($f_id) = selectrow_query($form, $dbh, $query, $form->{customernumber}); + if ($f_id ne "") { + $main::lxdebug->leave_sub(); + return 3; + } + + $query = qq|SELECT nextval('id')|; + ($form->{id}) = selectrow_query($form, $dbh, $query); + + $query = qq|INSERT INTO customer (id, name) VALUES (?, '')|; + do_query($form, $dbh, $query, $form->{id}); } - $query = qq|UPDATE customer SET - customernumber = '$form->{customernumber}', - name = '$form->{name}', - department_1 = '$form->{department_1}', - department_2 = '$form->{department_2}', - street = '$form->{street}', - zipcode = '$form->{zipcode}', - city = '$form->{city}', - country = '$form->{country}', - homepage = '$form->{homepage}', - contact = '$form->{contact}', - phone = '$form->{phone}', - fax = '$form->{fax}', - email = '$form->{email}', - cc = '$form->{cc}', - bcc = '$form->{bcc}', - notes = '$form->{notes}', - discount = $form->{discount}, - creditlimit = $form->{creditlimit}, - terms = $form->{terms}, - taxincluded = '$form->{taxincluded}', - business_id = $form->{business}, - taxnumber = '$form->{taxnumber}', - sic_code = '$form->{sic}', - language = '$form->{language}', - account_number = '$form->{account_number}', - bank_code = '$form->{bank_code}', - bank = '$form->{bank}', - obsolete = '$form->{obsolete}', - ustid = '$form->{ustid}', - username = '$form->{username}', - salesman_id = '$form->{salesman_id}', - user_password = '$form->{user_password}', - c_vendor_id = '$form->{c_vendor_id}' - WHERE id = $form->{id}|; - $dbh->do($query) || $form->dberror($query); - - if ($form->{cp_id}) { - $query = qq|UPDATE contacts SET - cp_greeting = '$form->{cp_greeting}', - cp_title = '$form->{cp_title}', - cp_givenname = '$form->{cp_givenname}', - cp_name = '$form->{cp_name}', - cp_email = '$form->{cp_email}', - cp_phone1 = '$form->{cp_phone1}', - cp_phone2 = '$form->{cp_phone2}' - WHERE cp_id = $form->{cp_id}|; - } elsif ($form->{cp_name} || $form->{cp_givenname}) { + $query = qq|UPDATE customer SET | . + qq|customernumber = ?, | . + qq|name = ?, | . + qq|greeting = ?, | . + qq|department_1 = ?, | . + qq|department_2 = ?, | . + qq|street = ?, | . + qq|zipcode = ?, | . + qq|city = ?, | . + qq|country = ?, | . + qq|homepage = ?, | . + qq|contact = ?, | . + qq|phone = ?, | . + qq|fax = ?, | . + qq|email = ?, | . + qq|cc = ?, | . + qq|bcc = ?, | . + qq|notes = ?, | . + qq|discount = ?, | . + qq|creditlimit = ?, | . + qq|terms = ?, | . + qq|business_id = ?, | . + qq|taxnumber = ?, | . + qq|sic_code = ?, | . + qq|language = ?, | . + qq|account_number = ?, | . + qq|bank_code = ?, | . + qq|bank = ?, | . + qq|obsolete = ?, | . + qq|ustid = ?, | . + qq|username = ?, | . + qq|salesman_id = ?, | . + qq|language_id = ?, | . + qq|payment_id = ?, | . + qq|taxzone_id = ?, | . + qq|user_password = ?, | . + qq|c_vendor_id = ?, | . + qq|klass = ? | . + qq|WHERE id = ?|; + my @values = ( + $form->{customernumber}, + $form->{name}, + $form->{greeting}, + $form->{department_1}, + $form->{department_2}, + $form->{street}, + $form->{zipcode}, + $form->{city}, + $form->{country}, + $form->{homepage}, + $form->{contact}, + $form->{phone}, + $form->{fax}, + $form->{email}, + $form->{cc}, + $form->{bcc}, + $form->{notes}, + $form->{discount}, + $form->{creditlimit}, + conv_i($form->{terms}), + conv_i($form->{business}), + $form->{taxnumber}, + $form->{sic}, + $form->{language}, + $form->{account_number}, + $form->{bank_code}, + $form->{bank}, + $form->{obsolete} ? 't' : 'f', + $form->{ustid}, + $form->{username}, + conv_i($form->{salesman_id}), + conv_i($form->{language_id}), + conv_i($form->{payment_id}), + conv_i($form->{taxzone_id}, 0), + $form->{user_password}, + $form->{c_vendor_id}, + conv_i($form->{klass}), + $form->{id} + ); + do_query( $form, $dbh, $query, @values ); + + $query = undef; + if ( $form->{cp_id} ) { + $query = qq|UPDATE contacts SET | . + qq|cp_greeting = ?, | . + qq|cp_title = ?, | . + qq|cp_givenname = ?, | . + qq|cp_name = ?, | . + qq|cp_email = ?, | . + qq|cp_phone1 = ?, | . + qq|cp_phone2 = ?, | . + qq|cp_abteilung = ?, | . + qq|cp_fax = ?, | . + qq|cp_mobile1 = ?, | . + qq|cp_mobile2 = ?, | . + qq|cp_satphone = ?, | . + qq|cp_satfax = ?, | . + qq|cp_project = ?, | . + qq|cp_privatphone = ?, | . + qq|cp_privatemail = ?, | . + qq|cp_birthday = ? | . + qq|WHERE cp_id = ?|; + @values = ( + $form->{cp_greeting}, + $form->{cp_title}, + $form->{cp_givenname}, + $form->{cp_name}, + $form->{cp_email}, + $form->{cp_phone1}, + $form->{cp_phone2}, + $form->{cp_abteilung}, + $form->{cp_fax}, + $form->{cp_mobile1}, + $form->{cp_mobile2}, + $form->{cp_satphone}, + $form->{cp_satfax}, + $form->{cp_project}, + $form->{cp_privatphone}, + $form->{cp_privatemail}, + $form->{cp_birthday}, + $form->{cp_id} + ); + } elsif ( $form->{cp_name} || $form->{cp_givenname} ) { $query = - qq|INSERT INTO contacts ( cp_cv_id, cp_greeting, cp_title, cp_givenname, cp_name, cp_email, cp_phone1, cp_phone2) - VALUES ($form->{id}, '$form->{cp_greeting}','$form->{cp_title}','$form->{cp_givenname}','$form->{cp_name}','$form->{cp_email}','$form->{cp_phone1}','$form->{cp_phone2}')|; - } - $dbh->do($query) || $form->dberror($query); - - # save taxes - foreach $item (split / /, $form->{taxaccounts}) { - if ($form->{"tax_$item"}) { - $query = qq|INSERT INTO customertax (customer_id, chart_id) - VALUES ($form->{id}, (SELECT c.id - FROM chart c - WHERE c.accno = '$item'))|; - $dbh->do($query) || $form->dberror($query); - } + qq|INSERT INTO contacts ( cp_cv_id, cp_greeting, cp_title, cp_givenname, | . + qq| cp_name, cp_email, cp_phone1, cp_phone2, cp_abteilung, cp_fax, cp_mobile1, | . + qq| cp_mobile2, cp_satphone, cp_satfax, cp_project, cp_privatphone, cp_privatemail, | . + qq| cp_birthday) | . + qq|VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)|; + @values = ( + $form->{id}, + $form->{cp_greeting}, + $form->{cp_title}, + $form->{cp_givenname}, + $form->{cp_name}, + $form->{cp_email}, + $form->{cp_phone1}, + $form->{cp_phone2}, + $form->{cp_abteilung}, + $form->{cp_fax}, + $form->{cp_mobile1}, + $form->{cp_mobile2}, + $form->{cp_satphone}, + $form->{cp_satfax}, + $form->{cp_project}, + $form->{cp_privatphone}, + $form->{cp_privatemail}, + $form->{cp_birthday} + ); } + do_query( $form, $dbh, $query, @values ) if ($query); # add shipto - $form->add_shipto($dbh, $form->{id}); + $form->add_shipto( $dbh, $form->{id}, "CT" ); - $dbh->disconnect; + $self->_save_note('dbh' => $dbh); + $self->_delete_selected_notes('dbh' => $dbh); + + CVar->save_custom_variables('dbh' => $dbh, + 'module' => 'CT', + 'trans_id' => $form->{id}, + 'variables' => $form); + + $rc = $dbh->commit(); + $dbh->disconnect(); $main::lxdebug->leave_sub(); + return $rc; } sub save_vendor { $main::lxdebug->enter_sub(); - my ($self, $myconfig, $form) = @_; + my ( $self, $myconfig, $form ) = @_; + $form->{taxzone_id} *= 1; # connect to database - my $dbh = $form->dbconnect($myconfig); -##LINET - map({ $form->{"cp_${_}"} = $form->{"selected_cp_${_}"} - if ($form->{"selected_cp_${_}"}); - } qw(title greeting)); - - # escape ' - map { $form->{$_} =~ s/\'/\'\'/g } - qw(vendornumber name street zipcode city country homepage contact notes cp_title cp_greeting language); -##/LINET - $form->{discount} = $form->parse_amount($myconfig, $form->{discount}); + my $dbh = $form->dbconnect_noauto($myconfig); + + map( { + $form->{"cp_${_}"} = $form->{"selected_cp_${_}"} + if ( $form->{"selected_cp_${_}"} ); + } qw(title greeting abteilung) ); + $form->{"greeting"} = $form->{"selected_company_greeting"} + if ( $form->{"selected_company_greeting"} ); + + $form->{discount} = $form->parse_amount( $myconfig, $form->{discount} ); $form->{discount} /= 100; - $form->{terms} *= 1; - $form->{taxincluded} *= 1; - $form->{obsolete} *= 1; - $form->{business} *= 1; - $form->{creditlimit} = $form->parse_amount($myconfig, $form->{creditlimit}); + $form->{creditlimit} = $form->parse_amount( $myconfig, $form->{creditlimit} ); my $query; - if ($form->{id}) { - $query = qq|DELETE FROM vendortax - WHERE vendor_id = $form->{id}|; - $dbh->do($query) || $form->dberror($query); + if ( $form->{id} ) { + $query = qq|DELETE FROM shipto WHERE (trans_id = ?) AND (module = 'CT')|; + do_query($form, $dbh, $query, $form->{id}); - $query = qq|DELETE FROM shipto - WHERE trans_id = $form->{id}|; - $dbh->do($query) || $form->dberror($query); } else { - my $uid = time; - $uid .= $form->{login}; - - $query = qq|INSERT INTO vendor (name) - VALUES ('$uid')|; - $dbh->do($query) || $form->dberror($query); - - $query = qq|SELECT v.id FROM vendor v - WHERE v.name = '$uid'|; - $sth = $dbh->prepare($query); - $sth->execute || $form->dberror($query); - - ($form->{id}) = $sth->fetchrow_array; - $sth->finish; - if (!$form->{vendornumber}) { - $form->{vendornumber} = - $form->update_defaults($myconfig, "vendornumber"); - } + $query = qq|SELECT nextval('id')|; + ($form->{id}) = selectrow_query($form, $dbh, $query); + $query = qq|INSERT INTO vendor (id, name) VALUES (?, '')|; + do_query($form, $dbh, $query, $form->{id}); + + if ( !$form->{vendornumber} ) { + $form->{vendornumber} = $form->update_defaults( $myconfig, "vendornumber", $dbh ); + } } -##LINET - $query = qq|UPDATE vendor SET - vendornumber = '$form->{vendornumber}', - name = '$form->{name}', - department_1 = '$form->{department_1}', - department_2 = '$form->{department_2}', - street = '$form->{street}', - zipcode = '$form->{zipcode}', - city = '$form->{city}', - country = '$form->{country}', - homepage = '$form->{homepage}', - contact = '$form->{contact}', - phone = '$form->{phone}', - fax = '$form->{fax}', - email = '$form->{email}', - cc = '$form->{cc}', - bcc = '$form->{bcc}', - notes = '$form->{notes}', - terms = $form->{terms}, - discount = $form->{discount}, - creditlimit = $form->{creditlimit}, - taxincluded = '$form->{taxincluded}', - gifi_accno = '$form->{gifi_accno}', - business_id = $form->{business}, - taxnumber = '$form->{taxnumber}', - sic_code = '$form->{sic}', - language = '$form->{language}', - account_number = '$form->{account_number}', - bank_code = '$form->{bank_code}', - bank = '$form->{bank}', - obsolete = '$form->{obsolete}', - ustid = '$form->{ustid}', - username = '$form->{username}', - user_password = '$form->{user_password}', - v_customer_id = '$form->{v_customer_id}' - WHERE id = $form->{id}|; - $dbh->do($query) || $form->dberror($query); - - if ($form->{cp_id}) { - $query = qq|UPDATE contacts SET - cp_greeting = '$form->{cp_greeting}', - cp_title = '$form->{cp_title}', - cp_givenname = '$form->{cp_givenname}', - cp_name = '$form->{cp_name}', - cp_email = '$form->{cp_email}', - cp_phone1 = '$form->{cp_phone1}', - cp_phone2 = '$form->{cp_phone2}' - WHERE cp_id = $form->{cp_id}|; - } elsif ($form->{cp_name} || $form->{cp_givenname}) { + $query = + qq|UPDATE vendor SET | . + qq| vendornumber = ?, | . + qq| name = ?, | . + qq| greeting = ?, | . + qq| department_1 = ?, | . + qq| department_2 = ?, | . + qq| street = ?, | . + qq| zipcode = ?, | . + qq| city = ?, | . + qq| country = ?, | . + qq| homepage = ?, | . + qq| contact = ?, | . + qq| phone = ?, | . + qq| fax = ?, | . + qq| email = ?, | . + qq| cc = ?, | . + qq| bcc = ?, | . + qq| notes = ?, | . + qq| terms = ?, | . + qq| discount = ?, | . + qq| creditlimit = ?, | . + qq| business_id = ?, | . + qq| taxnumber = ?, | . + qq| sic_code = ?, | . + qq| language = ?, | . + qq| account_number = ?, | . + qq| bank_code = ?, | . + qq| bank = ?, | . + qq| obsolete = ?, | . + qq| ustid = ?, | . + qq| payment_id = ?, | . + qq| taxzone_id = ?, | . + qq| language_id = ?, | . + qq| username = ?, | . + qq| user_password = ?, | . + qq| v_customer_id = ? | . + qq|WHERE id = ?|; + @values = ( + $form->{vendornumber}, + $form->{name}, + $form->{greeting}, + $form->{department_1}, + $form->{department_2}, + $form->{street}, + $form->{zipcode}, + $form->{city}, + $form->{country}, + $form->{homepage}, + $form->{contact}, + $form->{phone}, + $form->{fax}, + $form->{email}, + $form->{cc}, + $form->{bcc}, + $form->{notes}, + conv_i($form->{terms}), + $form->{discount}, + $form->{creditlimit}, + conv_i($form->{business}), + $form->{taxnumber}, + $form->{sic}, + $form->{language}, + $form->{account_number}, + $form->{bank_code}, + $form->{bank}, + $form->{obsolete} ? 't' : 'f', + $form->{ustid}, + conv_i($form->{payment_id}), + conv_i($form->{taxzone_id}, 0), + conv_i( $form->{language_id}), + $form->{username}, + $form->{user_password}, + $form->{v_customer_id}, + $form->{id} + ); + do_query($form, $dbh, $query, @values); + + $query = undef; + if ( $form->{cp_id} ) { + $query = qq|UPDATE contacts SET | . + qq|cp_greeting = ?, | . + qq|cp_title = ?, | . + qq|cp_givenname = ?, | . + qq|cp_name = ?, | . + qq|cp_email = ?, | . + qq|cp_phone1 = ?, | . + qq|cp_phone2 = ?, | . + qq|cp_abteilung = ?, | . + qq|cp_fax = ?, | . + qq|cp_mobile1 = ?, | . + qq|cp_mobile2 = ?, | . + qq|cp_satphone = ?, | . + qq|cp_satfax = ?, | . + qq|cp_project = ?, | . + qq|cp_privatphone = ?, | . + qq|cp_privatemail = ?, | . + qq|cp_birthday = ? | . + qq|WHERE cp_id = ?|; + @values = ( + $form->{cp_greeting}, + $form->{cp_title}, + $form->{cp_givenname}, + $form->{cp_name}, + $form->{cp_email}, + $form->{cp_phone1}, + $form->{cp_phone2}, + $form->{cp_abteilung}, + $form->{cp_fax}, + $form->{cp_mobile1}, + $form->{cp_mobile2}, + $form->{cp_satphone}, + $form->{cp_satfax}, + $form->{cp_project}, + $form->{cp_privatphone}, + $form->{cp_privatemail}, + $form->{cp_birthday}, + $form->{cp_id} + ); + } elsif ( $form->{cp_name} || $form->{cp_givenname} ) { $query = - qq|INSERT INTO contacts ( cp_cv_id, cp_greeting, cp_title, cp_givenname, cp_name, cp_email, cp_phone1, cp_phone2) - VALUES ($form->{id}, '$form->{cp_greeting}','$form->{cp_title}','$form->{cp_givenname}','$form->{cp_name}','$form->{cp_email}','$form->{cp_phone1}','$form->{cp_phone2}')|; - } - $dbh->do($query) || $form->dberror($query); - - # save taxes - foreach $item (split / /, $form->{taxaccounts}) { - if ($form->{"tax_$item"}) { - $query = qq|INSERT INTO vendortax (vendor_id, chart_id) - VALUES ($form->{id}, (SELECT c.id - FROM chart c - WHERE c.accno = '$item'))|; - $dbh->do($query) || $form->dberror($query); - } + qq|INSERT INTO contacts ( cp_cv_id, cp_greeting, cp_title, cp_givenname, | . + qq| cp_name, cp_email, cp_phone1, cp_phone2, cp_abteilung, cp_fax, cp_mobile1, | . + qq| cp_mobile2, cp_satphone, cp_satfax, cp_project, cp_privatphone, cp_privatemail, | . + qq| cp_birthday) | . + qq|VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)|; + @values = ( + $form->{id}, + $form->{cp_greeting}, + $form->{cp_title}, + $form->{cp_givenname}, + $form->{cp_name}, + $form->{cp_email}, + $form->{cp_phone1}, + $form->{cp_phone2}, + $form->{cp_abteilung}, + $form->{cp_fax}, + $form->{cp_mobile1}, + $form->{cp_mobile2}, + $form->{cp_satphone}, + $form->{cp_satfax}, + $form->{cp_project}, + $form->{cp_privatphone}, + $form->{cp_privatemail}, + $form->{cp_birthday} + ); } + do_query($form, $dbh, $query, @values) if ($query); # add shipto - $form->add_shipto($dbh, $form->{id}); + $form->add_shipto( $dbh, $form->{id}, "CT" ); - $dbh->disconnect; + $self->_save_note('dbh' => $dbh); + $self->_delete_selected_notes('dbh' => $dbh); + + CVar->save_custom_variables('dbh' => $dbh, + 'module' => 'CT', + 'trans_id' => $form->{id}, + 'variables' => $form); + + $rc = $dbh->commit(); + $dbh->disconnect(); $main::lxdebug->leave_sub(); + return $rc; } sub delete { $main::lxdebug->enter_sub(); - my ($self, $myconfig, $form) = @_; - + my ( $self, $myconfig, $form ) = @_; # connect to database my $dbh = $form->dbconnect($myconfig); # delete vendor - my $query = qq|DELETE FROM $form->{db} - WHERE id = $form->{id}|; - $dbh->do($query) || $form->dberror($query); + my $cv = $form->{db} eq "customer" ? "customer" : "vendor"; + my $query = qq|DELETE FROM $cv WHERE id = ?|; + do_query($form, $dbh, $query, $form->{id}); $dbh->disconnect; @@ -505,126 +673,310 @@ sub delete { sub search { $main::lxdebug->enter_sub(); - my ($self, $myconfig, $form) = @_; + my ( $self, $myconfig, $form ) = @_; # connect to database my $dbh = $form->dbconnect($myconfig); - my $where = "1 = 1"; - $form->{sort} = "name" unless ($form->{sort}); + my $cv = $form->{db} eq "customer" ? "customer" : "vendor"; - if ($form->{"$form->{db}number"}) { - my $companynumber = $form->like(lc $form->{"$form->{db}number"}); - $where .= " AND lower(ct.$form->{db}number) LIKE '$companynumber'"; - } - if ($form->{name}) { - my $name = $form->like(lc $form->{name}); - $where .= " AND lower(ct.name) LIKE '$name'"; - } - if ($form->{contact}) { - my $contact = $form->like(lc $form->{contact}); - $where .= " AND lower(ct.contact) LIKE '$contact'"; + my $where = "1 = 1"; + my @values; + + my %allowed_sort_columns = + map({ $_, 1 } qw(id customernumber name address contact phone fax email + taxnumber sic_code business invnumber ordnumber quonumber)); + $sortorder = + $form->{sort} && $allowed_sort_columns{$form->{sort}} ? + $form->{sort} : "name"; + $form->{sort} = $sortorder; + $sortorder = "country,city,street" if ($sortorder eq "address"); + + if ($form->{"${cv}number"}) { + $where .= " AND ct.${cv}number ILIKE ?"; + push(@values, '%' . $form->{"${cv}number"} . '%'); } - if ($form->{email}) { - my $email = $form->like(lc $form->{email}); - $where .= " AND lower(ct.email) LIKE '$email'"; + + foreach my $key (qw(name contact email)) { + if ($form->{$key}) { + $where .= " AND ct.$key ILIKE ?"; + push(@values, '%' . $form->{$key} . '%'); + } } - if ($form->{status} eq 'orphaned') { - $where .= qq| AND ct.id NOT IN (SELECT o.$form->{db}_id - FROM oe o, $form->{db} cv - WHERE cv.id = o.$form->{db}_id)|; - if ($form->{db} eq 'customer') { - $where .= qq| AND ct.id NOT IN (SELECT a.customer_id - FROM ar a, customer cv - WHERE cv.id = a.customer_id)|; + if ( $form->{status} eq 'orphaned' ) { + $where .= + qq| AND ct.id NOT IN | . + qq| (SELECT o.${cv}_id FROM oe o, $cv cv WHERE cv.id = o.${cv}_id)|; + if ($cv eq 'customer') { + $where .= + qq| AND ct.id NOT IN | . + qq| (SELECT a.customer_id FROM ar a, customer cv | . + qq| WHERE cv.id = a.customer_id)|; } - if ($form->{db} eq 'vendor') { - $where .= qq| AND ct.id NOT IN (SELECT a.vendor_id - FROM ap a, vendor cv - WHERE cv.id = a.vendor_id)|; + if ($cv eq 'vendor') { + $where .= + qq| AND ct.id NOT IN | . + qq| (SELECT a.vendor_id FROM ap a, vendor cv | . + qq| WHERE cv.id = a.vendor_id)|; } $form->{l_invnumber} = $form->{l_ordnumber} = $form->{l_quonumber} = ""; } - my $query = qq|SELECT ct.*, b.description AS business - FROM $form->{db} ct - LEFT JOIN business b ON (ct.business_id = b.id) - WHERE $where|; + if ($form->{obsolete} eq "Y") { + $where .= qq| AND obsolete|; + } elsif ($form->{obsolete} eq "N") { + $where .= qq| AND NOT obsolete|; + } + + if ($form->{business_id}) { + $where .= qq| AND (business_id = ?)|; + push(@values, conv_i($form->{business_id})); + } + + my ($cvar_where, @cvar_values) = CVar->build_filter_query('module' => 'CT', + 'trans_id_field' => 'ct.id', + 'filter' => $form); + + if ($cvar_where) { + $where .= qq| AND ($cvar_where)|; + push @values, @cvar_values; + } + + my $query = + qq|SELECT ct.*, b.description AS business | . + qq|FROM $cv ct | . + qq|LEFT JOIN business b ON (ct.business_id = b.id) | . + qq|WHERE $where|; + my @saved_values = @values; # redo for invoices, orders and quotations if ($form->{l_invnumber} || $form->{l_ordnumber} || $form->{l_quonumber}) { - my ($ar, $union, $module); $query = ""; if ($form->{l_invnumber}) { - $ar = ($form->{db} eq 'customer') ? 'ar' : 'ap'; - $module = ($ar eq 'ar') ? 'is' : 'ir'; - - $query = qq|SELECT ct.*, b.description AS business, - a.invnumber, a.ordnumber, a.quonumber, a.id AS invid, - '$module' AS module, 'invoice' AS formtype, - (a.amount = a.paid) AS closed - FROM $form->{db} ct - JOIN $ar a ON (a.$form->{db}_id = ct.id) - LEFT JOIN business b ON (ct.business_id = b.id) - WHERE $where - AND a.invoice = '1'|; - - $union = qq| - UNION|; - + my $ar = $cv eq 'customer' ? 'ar' : 'ap'; + my $module = $ar eq 'ar' ? 'is' : 'ir'; + + $query = + qq|SELECT ct.*, b.description AS business, | . + qq| a.invnumber, a.ordnumber, a.quonumber, a.id AS invid, | . + qq| '$module' AS module, 'invoice' AS formtype, | . + qq| (a.amount = a.paid) AS closed | . + qq|FROM $cv ct | . + qq|JOIN $ar a ON (a.${cv}_id = ct.id) | . + qq|LEFT JOIN business b ON (ct.business_id = b.id) | . + qq|WHERE $where AND (a.invoice = '1')|; + + $union = qq|UNION|; } - if ($form->{l_ordnumber}) { - $query .= qq|$union - SELECT ct.*, b.description AS business, - ' ' AS invnumber, o.ordnumber, o.quonumber, o.id AS invid, - 'oe' AS module, 'order' AS formtype, - o.closed - FROM $form->{db} ct - JOIN oe o ON (o.$form->{db}_id = ct.id) - LEFT JOIN business b ON (ct.business_id = b.id) - WHERE $where - AND o.quotation = '0'|; - - $union = qq| - UNION|; + if ( $form->{l_ordnumber} ) { + if ($union eq "UNION") { + push(@values, @saved_values); + } + $query .= + qq| $union | . + qq|SELECT ct.*, b.description AS business,| . + qq| ' ' AS invnumber, o.ordnumber, o.quonumber, o.id AS invid, | . + qq| 'oe' AS module, 'order' AS formtype, o.closed | . + qq|FROM $cv ct | . + qq|JOIN oe o ON (o.${cv}_id = ct.id) | . + qq|LEFT JOIN business b ON (ct.business_id = b.id) | . + qq|WHERE $where AND (o.quotation = '0')|; + + $union = qq|UNION|; } - if ($form->{l_quonumber}) { - $query .= qq|$union - SELECT ct.*, b.description AS business, - ' ' AS invnumber, o.ordnumber, o.quonumber, o.id AS invid, - 'oe' AS module, 'quotation' AS formtype, - o.closed - FROM $form->{db} ct - JOIN oe o ON (o.$form->{db}_id = ct.id) - LEFT JOIN business b ON (ct.business_id = b.id) - WHERE $where - AND o.quotation = '1'|; - + if ( $form->{l_quonumber} ) { + if ($union eq "UNION") { + push(@values, @saved_values); + } + $query .= + qq| $union | . + qq|SELECT ct.*, b.description AS business, | . + qq| ' ' AS invnumber, o.ordnumber, o.quonumber, o.id AS invid, | . + qq| 'oe' AS module, 'quotation' AS formtype, o.closed | . + qq|FROM $cv ct | . + qq|JOIN oe o ON (o.${cv}_id = ct.id) | . + qq|LEFT JOIN business b ON (ct.business_id = b.id) | . + qq|WHERE $where AND (o.quotation = '1')|; } } - $query .= qq| - ORDER BY $form->{sort}|; + $query .= qq| ORDER BY $sortorder|; + + $form->{CT} = selectall_hashref_query($form, $dbh, $query, @values); + map({ my $ref = $_; $ref->{address} = join(" ", map({ $ref->{$_} } qw(street zipcode city country))); } + @{ $form->{CT} }); + + $main::lxdebug->leave_sub(); +} + +sub get_contact { + $main::lxdebug->enter_sub(); + + my ( $self, $myconfig, $form ) = @_; + my $dbh = $form->dbconnect($myconfig); + my $query = + qq|SELECT * FROM contacts c | . + qq|WHERE cp_id = ? ORDER BY cp_id limit 1|; + my $sth = prepare_execute_query($form, $dbh, $query, $form->{cp_id}); + my $ref = $sth->fetchrow_hashref(NAME_lc); + + map { $form->{$_} = $ref->{$_} } keys %$ref; - my $sth = $dbh->prepare($query); - $sth->execute || $form->dberror($query); -##LINET - while (my $ref = $sth->fetchrow_hashref(NAME_lc)) { - $ref->{address} = ""; - map { $ref->{address} .= "$ref->{$_} "; } qw(street zipcode city country); - push @{ $form->{CT} }, $ref; - } -##/LINET $sth->finish; $dbh->disconnect; $main::lxdebug->leave_sub(); } -1; +sub get_shipto { + $main::lxdebug->enter_sub(); + + my ( $self, $myconfig, $form ) = @_; + my $dbh = $form->dbconnect($myconfig); + my $query = qq|SELECT * FROM shipto WHERE shipto_id = ?|; + my $sth = prepare_execute_query($form, $dbh, $query, $form->{shipto_id}); + + my $ref = $sth->fetchrow_hashref(NAME_lc); + + map { $form->{$_} = $ref->{$_} } keys %$ref; + + $sth->finish; + $dbh->disconnect; + + $main::lxdebug->leave_sub(); +} + +sub get_delivery { + $main::lxdebug->enter_sub(); + + my ( $self, $myconfig, $form ) = @_; + my $dbh = $form->dbconnect($myconfig); + + my $arap = $form->{db} eq "vendor" ? "ap" : "ar"; + my $db = $form->{db} eq "customer" ? "customer" : "vendor"; + + my $where = " WHERE 1=1 "; + my @values; + + if ($form->{shipto_id} && ($arap eq "ar")) { + $where .= "AND ${arap}.shipto_id = ?"; + push(@values, $form->{shipto_id}); + } else { + $where .= "AND ${arap}.${db}_id = ?"; + push(@values, $form->{id}); + } + + if ($form->{from}) { + $where .= "AND ${arap}.transdate >= ?"; + push(@values, conv_date($form->{from})); + } + if ($form->{to}) { + $where .= "AND ${arap}.transdate <= ?"; + push(@values, conv_date($form->{to})); + } + my $query = + qq|SELECT s.shiptoname, i.qty, | . + qq| ${arap}.transdate, ${arap}.invnumber, ${arap}.ordnumber, | . + qq| i.description, i.unit, i.sellprice | . + qq|FROM $arap | . + qq|LEFT JOIN shipto s ON | . + ($arap eq "ar" + ? qq|(ar.shipto_id = s.shipto_id) | + : qq|(ap.id = s.trans_id) |) . + qq|LEFT JOIN invoice i ON (${arap}.id = i.trans_id) | . + qq|LEFT join parts p ON (p.id = i.parts_id) | . + $where . + qq|ORDER BY ${arap}.transdate DESC LIMIT 15|; + + $form->{DELIVERY} = selectall_hashref_query($form, $dbh, $query, @values); + + $dbh->disconnect; + + $main::lxdebug->leave_sub(); +} + +sub _save_note { + $main::lxdebug->enter_sub(); + + my $self = shift; + my %params = @_; + + my $form = $main::form; + Common::check_params(\%params, 'dbh'); + + if (!$form->{NOTE_subject}) { + $main::lxdebug->leave_sub(); + return; + } + + my $dbh = $params{dbh}; + + my %follow_up; + my %note = ( + 'id' => $form->{NOTE_id}, + 'subject' => $form->{NOTE_subject}, + 'body' => $form->{NOTE_body}, + 'trans_id' => $form->{id}, + 'trans_module' => 'ct', + ); + + $note{id} = Notes->save(%note); + + if ($form->{FU_date}) { + %follow_up = ( + 'id' => $form->{FU_id}, + 'note_id' => $note{id}, + 'follow_up_date' => $form->{FU_date}, + 'created_for_user' => $form->{FU_created_for_user}, + 'done' => $form->{FU_done} ? 1 : 0, + 'subject' => $form->{NOTE_subject}, + 'body' => $form->{NOTE_body}, + 'LINKS' => [ + { + 'trans_id' => $form->{id}, + 'trans_type' => $form->{db} eq 'customer' ? 'customer' : 'vendor', + 'trans_info' => $form->{name}, + }, + ], + ); + + $follow_up{id} = FU->save(%follow_up); + + } elsif ($form->{FU_id}) { + do_query($form, $dbh, qq|DELETE FROM follow_up_links WHERE follow_up_id = ?|, conv_i($form->{FU_id})); + do_query($form, $dbh, qq|DELETE FROM follow_ups WHERE id = ?|, conv_i($form->{FU_id})); + } + + delete @{$form}{grep { /^NOTE_|^FU_/ } keys %{ $form }}; + + $main::lxdebug->leave_sub(); +} + +sub _delete_selected_notes { + $main::lxdebug->enter_sub(); + + my $self = shift; + my %params = @_; + + Common::check_params(\%params, 'dbh'); + + my $form = $main::form; + my $dbh = $params{dbh}; + + foreach my $i (1 .. $form->{NOTES_rowcount}) { + next unless ($form->{"NOTE_delete_$i"} && $form->{"NOTE_id_$i"}); + + Notes->delete('dbh' => $params{dbh}, + 'id' => $form->{"NOTE_id_$i"}); + } + + $main::lxdebug->leave_sub(); +} + +1;