+sub save_printer {
+ $lxdebug->enter_sub();
+
+ $form->isblank("printer_description", $locale->text('Description missing!'));
+ $form->isblank("printer_command", $locale->text('Printer Command missing!'));
+ AM->save_printer(\%myconfig, \%$form);
+ $form->redirect($locale->text('Printer saved!'));
+
+ $lxdebug->leave_sub();
+}
+
+sub delete_printer {
+ $lxdebug->enter_sub();
+
+ AM->delete_printer(\%myconfig, \%$form);
+ $form->redirect($locale->text('Printer deleted!'));
+
+ $lxdebug->leave_sub();
+}
+
+sub add_payment {
+ $lxdebug->enter_sub();
+
+ $form->{title} = "Add";
+
+ $form->{callback} =
+ "$form->{script}?action=add_payment&path=$form->{path}&login=$form->{login}&password=$form->{password}"
+ unless $form->{callback};
+
+ $form->{terms_netto} = 0;
+ $form->{terms_skonto} = 0;
+ $form->{percent_skonto} = 0;
+ my @languages = AM->language(\%myconfig, $form, 1);
+ map({ $_->{"language"} = $_->{"description"};
+ $_->{"language_id"} = $_->{"id"}; } @languages);
+ $form->{"TRANSLATION"} = \@languages;
+ &payment_header;
+ &form_footer;
+
+ $lxdebug->leave_sub();
+}
+
+sub edit_payment {
+ $lxdebug->enter_sub();
+
+ $form->{title} = "Edit";
+
+ AM->get_payment(\%myconfig, $form);
+ $form->{percent_skonto} =
+ $form->format_amount(\%myconfig, $form->{percent_skonto} * 100);
+
+ &payment_header;
+
+ $form->{orphaned} = 1;
+ &form_footer;
+
+ $lxdebug->leave_sub();
+}
+
+sub list_payment {
+ $lxdebug->enter_sub();
+
+ AM->payment(\%myconfig, \%$form);
+
+ $form->{callback} = build_std_url("action=list_payment");
+
+ $callback = $form->escape($form->{callback});
+
+ $form->{title} = $locale->text('Payment Terms');
+
+ @column_index = qw(up down description description_long terms_netto
+ terms_skonto percent_skonto);
+
+ $column_header{up} =
+ qq|<th class="listheading" align="center" valign="center" width="16">|
+ . qq|<img src="image/up.png" alt="| . $locale->text("up") . qq|">|
+ . qq|</th>|;
+ $column_header{down} =
+ qq|<th class="listheading" align="center" valign="center" width="16">|
+ . qq|<img src="image/down.png" alt="| . $locale->text("down") . qq|">|
+ . qq|</th>|;
+ $column_header{description} =
+ qq|<th class=listheading>|
+ . $locale->text('Description')
+ . qq|</th>|;
+ $column_header{description_long} =
+ qq|<th class=listheading>|
+ . $locale->text('Long Description')
+ . qq|</th>|;
+ $column_header{terms_netto} =
+ qq|<th class=listheading>|
+ . $locale->text('Netto Terms')
+ . qq|</th>|;
+ $column_header{terms_skonto} =
+ qq|<th class=listheading>|
+ . $locale->text('Skonto Terms')
+ . qq|</th>|;
+ $column_header{percent_skonto} =
+ qq|<th class=listheading>|
+ . $locale->text('Skonto')
+ . qq| %</th>|;
+
+ $form->header;
+
+ print qq|
+<body>
+
+<table width=100%>
+ <tr>
+ <th class=listtop>$form->{title}</th>
+ </tr>
+ <tr height="5"></tr>
+ <tr>
+ <td>
+ <table width=100%>
+ <tr class=listheading>
+|;
+
+ map { print "$column_header{$_}\n" } @column_index;
+
+ print qq|
+ </tr>
+|;
+
+ my $swap_link = build_std_url("action=swap_payment_terms");
+
+ my $row = 0;
+ foreach $ref (@{ $form->{ALL} }) {
+
+ $i++;
+ $i %= 2;
+
+ print qq|
+ <tr valign=top class=listrow$i>
+|;
+
+ if ($row) {
+ my $pref = $form->{ALL}->[$row - 1];
+ $column_data{up} =
+ qq|<td align="center" valign="center" width="16">| .
+ qq|<a href="${swap_link}&id1=$ref->{id}&id2=$pref->{id}">| .
+ qq|<img border="0" src="image/up.png" alt="| . $locale->text("up") . qq|">| .
+ qq|</a></td>|;
+ } else {
+ $column_data{up} = qq|<td width="16"> </td>|;
+ }
+
+ if ($row == (scalar(@{ $form->{ALL} }) - 1)) {
+ $column_data{down} = qq|<td width="16"> </td>|;
+ } else {
+ my $nref = $form->{ALL}->[$row + 1];
+ $column_data{down} =
+ qq|<td align="center" valign="center" width="16">| .
+ qq|<a href="${swap_link}&id1=$ref->{id}&id2=$nref->{id}">| .
+ qq|<img border="0" src="image/down.png" alt="| . $locale->text("down") . qq|">| .
+ qq|</a></td>|;
+ }
+
+ $column_data{description} =
+ qq|<td><a href="| .
+ build_std_url("action=edit_payment", "id=$ref->{id}", "callback=$callback") .
+ qq|">| . H($ref->{description}) . qq|</a></td>|;
+ $column_data{description_long} =
+ qq|<td>| . H($ref->{description_long}) . qq|</td>|;
+ $column_data{terms_netto} =
+ qq|<td align=right>$ref->{terms_netto}</td>|;
+ $column_data{terms_skonto} =
+ qq|<td align=right>$ref->{terms_skonto}</td>|;
+ $column_data{percent_skonto} =
+ qq|<td align=right>| .
+ $form->format_amount(\%myconfig, $ref->{percent_skonto} * 100) .
+ qq|%</td>|;
+ map { print "$column_data{$_}\n" } @column_index;
+
+ print qq|
+ </tr>
+|;
+ $row++;
+ }
+
+ print qq|
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td><hr size=3 noshade></td>
+ </tr>
+</table>
+
+<br>
+<form method=post action=$form->{script}>
+
+<input name=callback type=hidden value="$form->{callback}">
+
+<input type=hidden name=type value=payment>
+
+<input type=hidden name=path value=$form->{path}>
+<input type=hidden name=login value=$form->{login}>
+<input type=hidden name=password value=$form->{password}>
+
+<input class=submit type=submit name=action value="|
+ . $locale->text('Add') . qq|">
+
+ </form>
+
+ </body>
+ </html>
+|;
+
+ $lxdebug->leave_sub();
+}
+
+sub payment_header {
+ $lxdebug->enter_sub();
+
+ $form->{title} = $locale->text("$form->{title} Payment Terms");
+
+ # $locale->text('Add Payment Terms')
+ # $locale->text('Edit Payment Terms')
+
+ $form->{description} =~ s/\"/"/g;
+
+
+
+ $form->header;
+
+ print qq|
+<body>
+
+<form method=post action=$form->{script}>
+
+<input type=hidden name=id value=$form->{id}>
+<input type=hidden name=type value=payment>
+
+<table width=100%>
+ <tr>
+ <th class=listtop colspan=2>$form->{title}</th>
+ </tr>
+ <tr height="5"></tr>
+ <tr>
+ <th align=right>| . $locale->text('Description') . qq|</th>
+ <td><input name=description size=30 value="$form->{description}"></td>
+ <tr>
+ <tr>
+ <th align=right>| . $locale->text('Long Description') . qq|</th>
+ <td><input name=description_long size=50 value="$form->{description_long}"></td>
+ </tr>
+|;
+
+ foreach my $language (@{ $form->{"TRANSLATION"} }) {
+ print qq|
+ <tr>
+ <th align="right">| .
+ sprintf($locale->text('Translation (%s)'),
+ $language->{"language"})
+ . qq|</th>
+ <td><input name="description_long_$language->{language_id}" size="50"
+ value="| . Q($language->{"description_long"}) . qq|"></td>
+ </tr>
+|;
+ }
+
+ print qq|
+ <tr>
+ <th align=right>| . $locale->text('Netto Terms') . qq|</th>
+ <td><input name=terms_netto size=10 value="$form->{terms_netto}"></td>
+ </tr>
+ <tr>
+ <th align=right>| . $locale->text('Skonto Terms') . qq|</th>
+ <td><input name=terms_skonto size=10 value="$form->{terms_skonto}"></td>
+ </tr>
+ <tr>
+ <th align=right>| . $locale->text('Skonto') . qq| %</th>
+ <td><input name=percent_skonto size=10 value="$form->{percent_skonto}"></td>
+ </tr>
+ <td colspan=2><hr size=3 noshade></td>
+ </tr>
+</table>
+
+<p>| . $locale->text("You can use the following strings in the long " .
+ "description and all translations. They will be " .
+ "replaced by their actual values by Lx-Office " .
+ "before they're output.")
+. qq|</p>
+
+<ul>
+ <li>| . $locale->text("<%netto_date%> -- Date the payment is due in " .
+ "full")
+. qq|</li>
+ <li>| . $locale->text("<%skonto_date%> -- Date the payment is due " .
+ "with discount")
+. qq|</li>
+ <li>| . $locale->text("<%skonto_amount%> -- The deductible amount")
+. qq|</li>
+ <li>| . $locale->text("<%total%> -- Amount payable")
+. qq|</li>
+ <li>| . $locale->text("<%invtotal%> -- Invoice total")
+. qq|</li>
+ <li>| . $locale->text("<%currency%> -- The selected currency")
+. qq|</li>
+ <li>| . $locale->text("<%terms_netto%> -- The number of days for " .
+ "full payment")
+. qq|</li>
+ <li>| . $locale->text("<%account_number%> -- Your account number")
+. qq|</li>
+ <li>| . $locale->text("<%bank%> -- Your bank")
+. qq|</li>
+ <li>| . $locale->text("<%bank_code%> -- Your bank code")
+. qq|</li>
+</ul>|;
+
+ $lxdebug->leave_sub();
+}
+
+sub save_payment {
+ $lxdebug->enter_sub();
+
+ $form->isblank("description", $locale->text('Description missing!'));
+ $form->{"percent_skonto"} =
+ $form->parse_amount(\%myconfig, $form->{percent_skonto}) / 100;
+ AM->save_payment(\%myconfig, \%$form);
+ $form->redirect($locale->text('Payment Terms saved!'));
+
+ $lxdebug->leave_sub();
+}
+
+sub delete_payment {
+ $lxdebug->enter_sub();
+
+ AM->delete_payment(\%myconfig, \%$form);
+ $form->redirect($locale->text('Payment terms deleted!'));
+
+ $lxdebug->leave_sub();
+}
+
+sub swap_payment_terms {
+ $lxdebug->enter_sub();
+
+ AM->swap_sortkeys(\%myconfig, $form, "payment_terms");
+ list_payment();
+
+ $lxdebug->leave_sub();
+}
+
+sub display_template {
+ $lxdebug->enter_sub();
+
+ $form->{edit} = 0;
+ display_template_form();
+
+ $lxdebug->leave_sub();
+}
+
+sub edit_template {
+ $lxdebug->enter_sub();
+
+ $form->{edit} = 1;
+ display_template_form();
+
+ $lxdebug->leave_sub();
+}
+
+sub save_template {
+ $lxdebug->enter_sub();
+
+ $form->isblank("formname", $locale->text("You're not editing a file.")) unless ($form->{type} eq "stylesheet");
+
+ my ($filename) = AM->prepare_template_filename(\%myconfig, $form);
+ if (my $error = AM->save_template($filename, $form->{content})) {
+ $form->error(sprintf($locale->text("Saving the file '%s' failed. OS error message: %s"), $filename, $error));
+ }
+
+ $form->{edit} = 0;
+ display_template_form();
+
+ $lxdebug->leave_sub();
+}
+
+sub display_template_form {
+ $lxdebug->enter_sub();
+
+ $form->{formname} =~ s|.*/||;
+ my $format = $form->{format} eq "html" ? "html" : "tex";
+
+ my $title = $form->{type} eq "stylesheet" ? $locale->text("Edit the stylesheet") : $locale->text("Edit templates");
+ $form->{title} = $title;
+
+ my $edit_options;
+
+ my @hidden = qw(login path password type format);
+
+ if (($form->{type} ne "stylesheet") && !$form->{edit}) {
+ $edit_options = "<p>";
+
+ my %formname_setup =
+ (
+ "balance_sheet" => { "translation" => $locale->text('Balance Sheet'), "html" => 1 },
+ "bin_list" => $locale->text('Bin List'),
+ "bwa" => { "translation" => $locale->text('BWA'), "html" => 1 },
+ "check" => { "translation" => $locale->text('Check'), "html" => 1 },
+ "credit_note" => $locale->text('Credit Note'),
+ "income_statement" => { "translation" => $locale->text('Income Statement'), "html" => 1 },
+ "invoice" => $locale->text('Invoice'),
+ "packing_list" => $locale->text('Packing List'),
+ "pick_list" => $locale->text('Pick List'),
+ "proforma" => $locale->text('Proforma Invoice'),
+ "purchase_order" => $locale->text('Purchase Order'),
+ "receipt" => { "translation" => $locale->text('Receipt'), "tex" => 1 },
+ "request_quotation" => $locale->text('RFQ'),
+ "sales_order" => $locale->text('Confirmation'),
+ "sales_quotation" => $locale->text('Quotation'),
+ "statement" => $locale->text('Statement'),
+ "storno_invoice" => $locale->text('Storno Invoice'),
+ "storno_packing_list" => $locale->text('Storno Packing List'),
+ "ustva-2004" => { "translation" => $locale->text("USTVA 2004"), "tex" => 1 },
+ "ustva-2005" => { "translation" => $locale->text("USTVA 2005"), "tex" => 1 },
+ "ustva-2006" => { "translation" => $locale->text("USTVA 2006"), "tex" => 1 },
+ "ustva-2007" => { "translation" => $locale->text("USTVA 2007"), "tex" => 1 },
+ "ustva" => $locale->text("USTVA"),
+ "zahlungserinnerung" => $locale->text('Payment Reminder'),
+ );
+
+ my (@values, %labels, $file, $setup);
+
+ while (($file, $setup) = each(%formname_setup)) {
+ next unless (!ref($setup) || $setup->{$format});
+
+ push(@values, $file);
+ $labels{$file} = ref($setup) ? $setup->{translation} : $setup;
+ }
+ @values = sort({ $labels{$a} cmp $labels{$b} } @values);
+
+ $edit_options .=
+ $locale->text("Template") . " " .
+ NTI($cgi->popup_menu("-name" => "formname", "-default" => $form->{formname},
+ "-values" => \@values, "-labels" => \%labels));
+
+ $form->get_lists("printers" => "ALL_PRINTERS",
+ "languages" => "ALL_LANGUAGES");
+
+ @values = ("");
+ %labels = ();
+
+ foreach my $item (@{ $form->{ALL_LANGUAGES} }) {
+ next unless ($item->{template_code});
+ my $key = "$item->{id}--$item->{template_code}";
+ push(@values, $key);
+ $labels{$key} = $item->{description};
+ }
+
+ if (1 != scalar(@values)) {
+ $edit_options .=
+ " " . $locale->text("Language") . " " .
+ NTI($cgi->popup_menu("-name" => "language", "-default" => $form->{language},
+ "-values" => \@values, "-labels" => \%labels));
+ }
+
+ @values = ("");
+ %labels = ();
+
+ foreach my $item (@{ $form->{ALL_PRINTERS} }) {
+ next unless ($item->{template_code});
+ my $key = "$item->{id}--$item->{template_code}";
+ push(@values, $key);
+ $labels{$key} = $item->{printer_description};
+ }
+
+ if (1 != scalar(@values)) {
+ $edit_options .=
+ " " . $locale->text("Printer") . " " .
+ NTI($cgi->popup_menu("-name" => "printer", "-default" => $form->{printer},
+ "-values" => \@values, "-labels" => \%labels));
+ }
+
+ $edit_options .= qq|
+
+ <input type="hidden" name="display_nextsub" value="display_template">
+
+ <input name="action" type="submit" class="submit" value="|
+ . $locale->text('Display') . qq|">
+
+ </p>
+
+ <hr>
+|;
+
+ } else {
+ push(@hidden, qw(formname language printer));
+ }
+
+ if ($form->{formname} || ($form->{type} eq "stylesheet")) {
+ my ($filename, $display_filename) = AM->prepare_template_filename(\%myconfig, $form);
+ my ($content, $lines) = AM->load_template($filename);
+
+ $body = qq|
+|;
+
+ if ($form->{edit}) {
+ $form->{fokus} = "Form.content";
+ $body = qq|\n<p><div class="listtop">| . $locale->text('Edit file') . " '" . H($display_filename) . qq|'</div></p>\n<p>|
+ . NTI($cgi->textarea("-name" => "content",
+ "-id" => "content",
+ "-default" => $content,
+ "-columns" => 100,
+ "-rows" => 25))
+ . qq|</p>
+
+ <p>
+ <input type="hidden" name="save_nextsub" value="save_template">
+
+ <input type="submit" name="action" value="| . $locale->text('Save') . qq|">
+ </p>