+ print qq|
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td><hr size=3 noshade></td>
+ </tr>
+</table>
+
+<br>
+<form method=post action=am.pl>
+
+<input name=callback type=hidden value="$form->{callback}">
+
+<input type=hidden name=type value=printer>
+
+<input class=submit type=submit name=action value="|
+ . $locale->text('Add') . qq|">
+
+ </form>
+
+ </body>
+ </html>
+|;
+
+ $lxdebug->leave_sub();
+}
+
+sub printer_header {
+ $lxdebug->enter_sub();
+
+ $auth->assert('config');
+
+ $form->{title} = $locale->text("$form->{title} Printer");
+
+ # $locale->text('Add Printer')
+ # $locale->text('Edit Printer')
+
+ $form->{printer_description} =~ s/\"/"/g;
+ $form->{template_code} =~ s/\"/"/g;
+ $form->{printer_command} =~ s/\"/"/g;
+
+
+ $form->header;
+
+ print qq|
+<body>
+
+<form method=post action=am.pl>
+
+<input type=hidden name=id value=$form->{id}>
+<input type=hidden name=type value=printer>
+
+<table width=100%>
+ <tr>
+ <th class=listtop colspan=2>$form->{title}</th>
+ </tr>
+ <tr height="5"></tr>
+ <tr>
+ <th align=right>| . $locale->text('Printer') . qq|</th>
+ <td><input name=printer_description size=30 value="$form->{printer_description}"></td>
+ <tr>
+ <tr>
+ <th align=right>| . $locale->text('Printer Command') . qq|</th>
+ <td><input name=printer_command size=30 value="$form->{printer_command}"></td>
+ </tr>
+ <tr>
+ <th align=right>| . $locale->text('Template Code') . qq|</th>
+ <td><input name=template_code size=5 value="$form->{template_code}"></td>
+ </tr>
+ <td colspan=2><hr size=3 noshade></td>
+ </tr>
+</table>
+|;
+
+ $lxdebug->leave_sub();
+}
+
+sub save_printer {
+ $lxdebug->enter_sub();
+
+ $auth->assert('config');
+
+ $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();
+
+ $auth->assert('config');
+
+ AM->delete_printer(\%myconfig, \%$form);
+ $form->redirect($locale->text('Printer deleted!'));
+
+ $lxdebug->leave_sub();
+}
+
+sub add_payment {
+ $lxdebug->enter_sub();
+
+ $auth->assert('config');
+
+ $form->{title} = "Add";
+
+ $form->{callback} = "am.pl?action=add_payment" 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();
+
+ $auth->assert('config');
+
+ $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();
+
+ $auth->assert('config');
+
+ 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=am.pl>
+
+<input name=callback type=hidden value="$form->{callback}">
+
+<input type=hidden name=type value=payment>
+
+<input class=submit type=submit name=action value="|
+ . $locale->text('Add') . qq|">
+
+ </form>
+
+ </body>
+ </html>
+|;
+
+ $lxdebug->leave_sub();
+}
+
+sub payment_header {
+ $lxdebug->enter_sub();
+
+ $auth->assert('config');
+
+ $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=am.pl>
+
+<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("<%total_wo_skonto%> -- Amount payable less discount")
+. qq|</li>
+ <li>| . $locale->text("<%invtotal%> -- Invoice total")
+. qq|</li>
+ <li>| . $locale->text("<%invtotal_wo_skonto%> -- Invoice total less discount")
+. 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();
+
+ $auth->assert('config');
+
+ $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();