diff options
-rw-r--r-- | UI/io-email.html | 125 | ||||
-rw-r--r-- | bin/io.pl | 337 |
2 files changed, 315 insertions, 147 deletions
diff --git a/UI/io-email.html b/UI/io-email.html new file mode 100644 index 00000000..96b61e19 --- /dev/null +++ b/UI/io-email.html @@ -0,0 +1,125 @@ +<?lsmb INCLUDE 'ui-header.html' ?> +<?lsmb PROCESS elements.html ?> +<body> +<form method="post" action="<?lsmb form.script ?>"> +<table width="100%"> + <tr class="listtop"> + <th class="listtop"><?lsmb text('E-mail [_1]', form.${form.vc}.remove('--.*')) ?></th> + </tr> + <tr> + <td> </td> + </tr> + <tr> + <td> + <table width="100%"> + <tr> + <th align="right"><?lsmb text('E-mail') ?></th> + <td><?lsmb PROCESS input element_data={name => 'email', size => 30, value => form.email} ?></td> + <th align="right"><?lsmb text('Cc') ?></th> + <td><?lsmb PROCESS input element_data={name => 'cc', size => 30, value => form.cc} ?></td> + </tr> + <tr> + <th align="right"><?lsmb text('Subject') ?></th> + <td><?lsmb PROCESS input element_data={name => 'subject', size => 30, value => form.subject} ?></td> +<?lsmb IF user.role == 'admin' OR user.role == 'manager' ?> + <th align="right"><?lsmb text('Bcc') ?></th> + <td><?lsmb PROCESS input element_data={name => 'bcc', size => 30, value => form.bcc} ?></td> +<?lsmb ELSE ?> + <td colspan="2"> </td> +<?lsmb END ?> + </tr> + </table> + </td> + </tr> + <tr> + <td> + <table width="100%"> + <tr> + <th align="left"><?lsmb text('Message') ?></th> + </tr> + <tr> + <td><?lsmb PROCESS textarea element_data={name => 'message', rows => 15, cols => 60, text => form.message} ?></td> + </tr> + </table> + </td> + </tr> + <tr> + <td> + <table width="100%"> + <tr> + <td><?lsmb PROCESS select element_data=print.formname ?></td> + <td><?lsmb IF print.lang.defined; + PROCESS select element_data=print.lang; END ?> + </td> + <td><?lsmb PROCESS select element_data=print.format ?></td> + <td><?lsmb PROCESS select element_data=print.media ?></td> +<?lsmb IF print.copies ?> + <td> + <?lsmb PROCESS input element_data={name => 'copies', size => '2', value => form.copies, label => text('Copies') } ?> + </td> +<?lsmb ELSE ?> + <td> </td> +<?lsmb END ?> + <td><div style="width: 15em"><?lsmb +PROCESS input element_data={ + name => 'read_receipt', + type => 'checkbox', + label => text('Request read receipt'), + } + ?></div></td> + <td align="right" width="90%"> +<?lsmb FOREACH formname IN ['printed', 'emailed', 'queued', 'recurring']; + IF form.$formname.match(form.formname); + text(print.status.$formname); '<br />'; + END; +END ?> + </td> + </tr> + <tr> + <td colspan="7"><?lsmb text('Group by') ?> -> <?lsmb + PROCESS input element_data={name => 'groupprojectnumber', + type => 'checkbox', label => text('Project'), + value => 'groupprojectnumber', + ${print.groupby.groupprojectnumber} = print.groupby.groupprojectnumber}; + PROCESS input element_data={name => 'grouppartsgroup', + type => 'checkbox', label => text('Group'), + value => 'grouppartsgroup', + ${print.groupby.grouppartsgroup} = print.groupby.grouppartsgroup}; + ?> + </td> + </tr> + <tr> + <td colspan="7"><?lsmb text('Sort by') ?> -> <?lsmb + PROCESS input element_data={name => 'sortby', type => 'radio', + label => text('Item'), value => 'runningnumber', + ${print.sortby.runningnumber} = print.sortby.runningnumber}; + PROCESS input element_data={name => 'sortby', type => 'radio', + label => text('Number'), value => 'partnumber', + ${print.sortby.partnumber} = print.sortby.partnumber}; + PROCESS input element_data={name => 'sortby', type => 'radio', + label => text('Description'), value => 'description', + ${print.sortby.description} = print.sortby.description}; + PROCESS input element_data={name => 'sortby', type => 'radio', + label => text('Bin'), value => 'bin', + ${print.sortby.bin} = print.sortby.bin}; + ?> + </td> + </tr> + </table> + </td> + </tr> + <tr> + <td><hr size="3" noshade="noshade" /></td> + </tr> +</table> +<br /> +<?lsmb FOREACH hidden IN hiddens.keys; + PROCESS input element_data={ + type => 'hidden', + name => hidden, + value => hiddens.item(hidden) + }; END ?> +<?lsmb FOREACH button IN buttons; PROCESS button element_data=button; END ?> +</form> +</body> +</html> @@ -1156,72 +1156,20 @@ sub create_form { sub e_mail { - $bcc = qq|<input type=hidden name=bcc value="$form->{bcc}">|; - if ( $myconfig{role} =~ /(admin|manager)/ ) { - $bcc = qq| - <th align=right nowrap=true>| . $locale->text('Bcc') . qq|</th> - <td><input name=bcc size=30 value="$form->{bcc}"></td> -|; + my %hiddens; + if ( $myconfig{role} !~ /(admin|manager)/ ) { + $hiddens{bcc} = $form->{bcc}; } if ( $form->{formname} =~ /(pick|packing|bin)_list/ ) { $form->{email} = $form->{shiptoemail} if $form->{shiptoemail}; } - $name = $form->{ $form->{vc} }; - $name =~ s/--.*//g; - $title = $locale->text('E-mail') . " $name"; - - $form->header; - - print qq| -<body> - -<form method=post action="$form->{script}"> - -<table width=100%> - <tr class=listtop> - <th class=listtop>$title</th> - </tr> - <tr height="5"></tr> - <tr> - <td> - <table width=100%> - <tr> - <th align=right nowrap>| . $locale->text('E-mail') . qq|</th> - <td><input name=email size=30 value="$form->{email}"></td> - <th align=right nowrap>| . $locale->text('Cc') . qq|</th> - <td><input name=cc size=30 value="$form->{cc}"></td> - </tr> - <tr> - <th align=right nowrap>| . $locale->text('Subject') . qq|</th> - <td><input name=subject size=30 value="$form->{subject}"></td> - $bcc - </tr> - </table> - </td> - </tr> - <tr> - <td> - <table width=100%> - <tr> - <th align=left nowrap>| . $locale->text('Message') . qq|</th> - </tr> - <tr> - <td><textarea name=message rows=15 cols=60 wrap=soft>$form->{message}</textarea></td> - </tr> - </table> - </td> - </tr> - <tr> - <td> -|; - $form->{oldmedia} = $form->{media}; $form->{media} = "email"; $form->{format} = "pdf"; - &print_options; + my $print_options = &print_options(\%hiddens); for ( qw(email cc bcc subject message formname sendmode format language_code action nextsub) @@ -1230,28 +1178,25 @@ sub e_mail { delete $form->{$_}; } - $form->hide_form; - - print qq| - </td> - </tr> - <tr> - <td><hr size=3 noshade></td> - </tr> -</table> - -<input type="hidden" name="nextsub" value="send_email"> - -<br> -<button name="action" class="submit" type="submit" value="continue">| - . $locale->text('Continue') - . qq|</button> -</form> - -</body> -</html> -|; + $hiddens{$_} = $form->{$_} for keys %$form; + $hiddens{nextsub} = 'send_email'; + my @buttons = ({ + name => 'action', + value => 'send_email', + text => $locale->text('Continue'), + }); + my %template = LedgerSMB::Template->new_UI( + user => \%myconfig, + locale => $locale, + template => 'io-email', + ); + $template->render({ + form => $form, + print => $print_options, + hiddens => \%hiddens, + buttons => \@buttons, + }); } sub send_email { @@ -1267,33 +1212,156 @@ sub send_email { sub print_options { + my $hiddens = shift; + my %options; $form->{sendmode} = "attachment"; $form->{copies} = 1 unless $form->{copies}; $form->{SM}{ $form->{sendmode} } = "selected"; - if ( $form->{selectlanguage} ) { - $form->{"selectlanguage"} = - $form->unescape( $form->{"selectlanguage"} ); - $form->{"selectlanguage"} =~ s/ selected//; - $form->{"selectlanguage"} =~ - s/(<option value="\Q$form->{language_code}\E")/$1 selected/; + delete $form->{all_language}; + $form->all_languages; + if ( ref $form->{all_language} eq 'ARRAY') { + $options{lang} = { + name => 'language_code', + default_values => $form->{oldlanguage_code}, + options => [{text => ' ', value => ''}], + }; + for my $lang (@{$form->{all_language}}) { + push @{$options{lang}{options}}, { + text => $lang->{description}, + value => $lang->{code}, + }; + }; + $hiddens->{oldlanguage_code} = $form->{oldlanguage_code}; + } + + $options{formname} = { + name => 'formname', + default_values => $form->{formname}, + options => [], + }; + + # SC: Option values extracted from other bin/ scripts + if ($form->{type} eq 'sales_quotation') { + push @{$options{formname}{options}}, { + text => $locale->text('Quotation'), + value => 'sales_quotation', + }; + } elsif ($form->{type} eq 'request_quotation') { + push @{$options{formname}{options}}, { + text => $locale->text('RFQ'), + value => 'request_quotation', + }; + } elsif ($form->{type} eq 'sales_order') { + push @{$options{formname}{options}}, { + text => $locale->text('Sales Order'), + value => 'sales_order', + }; + push @{$options{formname}{options}}, { + text => $locale->text('Work Order'), + value => 'work_order', + }; + push @{$options{formname}{options}}, { + text => $locale->text('Pick List'), + value => 'pick_list', + }; + push @{$options{formname}{options}}, { + text => $locale->text('Packing List'), + value => 'packing_list', + }; + } elsif ($form->{type} eq 'purchase_order') { + push @{$options{formname}{options}}, { + text => $locale->text('Purchase Order'), + value => 'purchase_order', + }; + push @{$options{formname}{options}}, { + text => $locale->text('Bin List'), + value => 'bin_list', + }; + } elsif ($form->{type} eq 'ship_order') { + push @{$options{formname}{options}}, { + text => $locale->text('Pick List'), + value => 'pick_list', + }; + push @{$options{formname}{options}}, { + text => $locale->text('Packing List'), + value => 'packing_list', + }; + } elsif ($form->{type} eq 'receive_order') { + push @{$options{formname}{options}}, { + text => $locale->text('Bin List'), + value => 'bin_list', + }; + } - $lang = qq|<select name=language_code>$form->{selectlanguage}</select> - <input type=hidden name=oldlanguage_code value=$form->{oldlanguage_code}> - <input type=hidden name=selectlanguage value="| - . $form->escape( $form->{selectlanguage}, 1 ) . qq|">|; + if ( $form->{media} eq 'email' ) { + $options{media} = { + name => 'sendmode', + options => [{ + text => $locale->text('Attachment'), + value => 'attachment'}, { + text => $locale->text('In-line'), + value => 'inline'} + ]}; + $options{media}{default_values} = 'attachment' if $form->{SM}{attachment}; + $options{media}{default_values} = 'inline' if $form->{SM}{inline}; + } else { + $options{media} = { + name => 'media', + default_values => $form->{media}, + options => [{ + text => $locale->text('Screen'), + value => 'screen'} + ]}; + if ( %{LedgerSMB::Sysconfig::printer} + && ${LedgerSMB::Sysconfig::latex} ) + { + for ( sort keys %{LedgerSMB::Sysconfig::printer} ) { + push @{$options{media}{options}}, {text => $_, value => $_}; + } + } + if ( ${LedgerSMB::Sysconfig::latex} ) + { + push @{$options{media}{options}}, {text => $locale->text('Queue'), + value => 'queue'}; + } } - $form->{selectformname} = $form->unescape( $form->{selectformname} ); - $form->{selectformname} =~ s/ selected//; - $form->{selectformname} =~ - s/(<option value="\Q$form->{formname}\E")/$1 selected/; + $options{format} = { + name => 'format', + default_values => $form->{selectformat}, + options => [{text => 'HTML', value => 'html'}], + } + if ( ${LedgerSMB::Sysconfig::latex} ) { + push @{$options{media}{options}}, { + text => $locale->text('Postscript'), + value => 'postscript', + }; + push @{$options{media}{options}}, { + text => $locale->text('PDF'), + value => 'pdf', + }; + } - $type = qq|<select name=formname>$form->{selectformname}</select> - <input type=hidden name=selectformname value="| - . $form->escape( $form->{selectformname}, 1 ) . qq|">|; + if ( %{LedgerSMB::Sysconfig::printer} + && ${LedgerSMB::Sysconfig::latex} + && $form->{media} ne 'email' ) + { + $options{copies} = 1; + } + # $locale->text('Printed') + # $locale->text('E-mailed') + # $locale->text('Queued') + # $locale->text('Scheduled') + + $options{status} = ( + printed => 'Printed', + emailed => 'E-mailed', + queued => 'Queued', + recurring => 'Scheduled', + ); if ( $form->{media} eq 'email' ) { $media = qq|<select name=sendmode> <option value=attachment $form->{SM}{attachment}>| @@ -1372,52 +1440,16 @@ sub print_options { recurring => 'Scheduled' ); - print qq|<td align=right width=90%>|; - - for (qw(printed emailed queued recurring)) { - if ( $form->{$_} =~ /$form->{formname}/ ) { - print $locale->text( $status{$_} ) . qq|<br>|; - } - } - - print qq| - </td> - </tr> -|; - - $form->{groupprojectnumber} = "checked" if $form->{groupprojectnumber}; - $form->{grouppartsgroup} = "checked" if $form->{grouppartsgroup}; + $options{groupby} = {}; + $options{groupby}{groupprojectnumber} = "checked" if $form->{groupprojectnumber}; + $options{groupby}{grouppartsgroup} = "checked" if $form->{grouppartsgroup}; + $options{sortby} = {}; for (qw(runningnumber partnumber description bin)) { - $sortby{$_} = "checked" if $form->{sortby} eq $_; + $options{sortby}{$_} = "checked" if $form->sortby eq $_; } - print qq| - <tr> - <td colspan=6>| . $locale->text('Group by') . qq| -> - <input name=groupprojectnumber type=checkbox class=checkbox $form->{groupprojectnumber}> - | . $locale->text('Project') . qq| - <input name=grouppartsgroup type=checkbox class=checkbox $form->{grouppartsgroup}> - | . $locale->text('Group') . qq| - </td> - </tr> - - <tr> - <td colspan=6>| . $locale->text('Sort by') . qq| -> - <input name=sortby type=radio class=radio value=runningnumber $sortby{runningnumber}> - | . $locale->text('Item') . qq| - <input name=sortby type=radio class=radio value=partnumber $sortby{partnumber}> - | . $locale->text('Number') . qq| - <input name=sortby type=radio class=radio value=description $sortby{description}> - | . $locale->text('Description') . qq| - <input name=sortby type=radio class=radio value=bin $sortby{bin}> - | . $locale->text('Bin') . qq| - </td> - - </tr> -</table> -|; - + \%options; } sub print { @@ -1438,12 +1470,12 @@ sub print { sub print_form { my ($old_form) = @_; - $inv = "inv"; - $due = "due"; + my $inv = "inv"; + my $due = "due"; - $numberfld = "sinumber"; + my $numberfld = "sinumber"; - $display_form = + my $display_form = ( $form->{display_form} ) ? $form->{display_form} : "display_form"; if ( $form->{formname} eq "invoice" ) { @@ -1566,13 +1598,13 @@ sub print_form { "unit_$i", "notes_$i" ); } - for ( split / /, $form->{taxaccounts} ) { push @a, "${_}_description" } + for ( split / /, $form->{taxaccounts} ) { push @vars, "${_}_description" } $ARAP = ( $form->{vc} eq 'customer' ) ? "AR" : "AP"; push @vars, $ARAP; # format payment dates - for $i ( 1 .. $form->{paidaccounts} - 1 ) { + for my $i ( 1 .. $form->{paidaccounts} - 1 ) { if ( exists $form->{longformat} ) { $form->{"datepaid_$i"} = $locale->date( \%myconfig, $form->{"datepaid_$i"}, @@ -1671,6 +1703,7 @@ sub print_form { $form->{pre} = "<body bgcolor=#ffffff>\n<pre>" if $form->{format} eq 'txt'; + my %output_options; if ( $form->{media} !~ /(screen|queue|email)/ ) { # printing $form->{OUT} = ${LedgerSMB::Sysconfig::printer}{ $form->{media} }; $form->{printmode} = '|-'; @@ -1704,8 +1737,6 @@ sub print_form { unless $form->{subject}; $form->{plainpaper} = 1; - $form->{OUT} = "${LedgerSMB::Sysconfig::sendmail}"; - $form->{printmode} = '|-'; if ( $form->{emailed} !~ /$form->{formname}/ ) { $form->{emailed} .= " $form->{formname}"; @@ -1720,6 +1751,14 @@ sub print_form { $bcc = $locale->text( 'Bcc: [_1]', $form->{bcc} ) . qq|\n| if $form->{bcc}; + $output_options{subject} = $form->{subject}; + $output_options{to} = $form->{email}; + $output_options{cc} = $form->{cc}; + $output_options{bcc} = $form->{bcc}; + ##SC: XXX the from address needs fixing + $output_options{from} = $myconfig{email}; + $output_options{notify} = 1 if $form->{read_receipt}; + if ( defined %$old_form ) { $old_form->{intnotes} = qq|$old_form->{intnotes}\n\n| if $old_form->{intnotes}; @@ -1797,11 +1836,15 @@ sub print_form { $form->{fileid} = $form->{"${inv}number"}; $form->{fileid} =~ s/(\s|\W)+//g; - my $template = LedgerSMB::Template->new( user => \%myconfig, - template => $form->{'formname'}, format => uc $form->{format} ); + my $template = LedgerSMB::Template->new( + user => \%myconfig, + template => $form->{'formname'}, + format => uc $form->{format}, + method => $form->{media}, + output_options => \%output_options, + ); try { $template->render($form); - $template->output(%{$form}); } catch Error::Simple with { my $E = shift; |