Ted, Eberhard - Eberhard Lisse wrote:
>Ted, > >I am loath to modify the source code, since it will not survive any >upgrades. Is there a way of creating a separate perl script that does >this, perhaps? > >el > > You should do these things with a "custom_rp.pl" script. See http://www.sql-ledger.org/misc/api.html Just put your modified aging function in that file and copy into /bin/mozilla. You may have to tweak the aging function in your custom script if the aging function changes significantly, but I believe it's designed that the custom things will pretty much work as they had been. So you may lose some new features, etc. until you can update, but you can always rename the custom scripts and return to stock behavior in a couple of minutes. I've got a custom_rp.pl that dumps the trial balance to a csv file, and I haven't touched it since Dieter added the API. It has saved me a lot of time on upgrades. Good luck, Steve > >In message <[EMAIL PROTECTED]>, Ted Petit writes: > > >>David Everly wrote: >> >> >> >>>On the web example: http://abacus.sql-ledger.org/sql-ledger/login.pl >>> >>>If I go to AR | Reports | AR Aging, I get something that is a little >>>what I'm looking for. >>> >>>However, what I want to do is print all customers in one batch, one >>>sheet of paper (or more) per customer, stuff into envelopes, and mail. >>> >>> >>> >>I have a routine written which I refer to as an "Outstanding Invoice >>Summary". Essentially, this is an add-on to the Accounts Receivable >>Aging report. If you check the 'Print Reports' box prior to clicking >>'Generate AR Aging', a report is generated for each customer in the same >>format as the aging screen. >> >>The instructions and the tex file are attached. >> >> >>-- Attached file included as plaintext by Ecartis -- >>-- File: aging.tex >> >>\documentclass[twoside]{scrartcl} >>\usepackage[frame]{xy} >>\usepackage{tabularx} >>\setlength{\voffset}{0.5cm} >>\setlength{\hoffset}{-2.0cm} >>\setlength{\topmargin}{0cm} >>\setlength{\headheight}{0.5cm} >>\setlength{\headsep}{1cm} >>\setlength{\topskip}{0pt} >>\setlength{\oddsidemargin}{1.0cm} >>\setlength{\evensidemargin}{1.0cm} >>\setlength{\textwidth}{19.2cm} >>\setlength{\textheight}{24.5cm} >>\setlength{\footskip}{1cm} >>\setlength{\parindent}{0pt} >>\renewcommand{\baselinestretch}{1} >>\begin{document} >> >>\newlength{\descrwidth}\setlength{\descrwidth}{10cm} >> >>\newsavebox{\hdr} >>\sbox{\hdr}{ >> \fontfamily{cmss}\fontsize{10pt}{12pt}\selectfont >> >> \parbox{\textwidth}{ >> \parbox[b]{12cm}{ >> <%company%> >> >> <%address%>}\hfill >> \begin{tabular}[b]{rrr@{}} >> Telephone & <%tel%>\\ >> Facsimile & <%fax%> >> \end{tabular} >> >> \rule[1.5ex]{\textwidth}{0.5pt} >> } >>} >> >>\fontfamily{cmss}\fontshape{n}\selectfont >> >>\markboth{<%company%>\hfill <%ordnumber%>}{\usebox{\hdr}} >> >>\pagestyle{myheadings} >>%\thispagestyle{empty} use this with letterhead paper >> >><%pagebreak 90 27 48%> >>\end{tabular*} >> >> \rule{\textwidth}{2pt} >> >> \hfill >> \begin{tabularx}{7cm}{Xr@{}} >> \textbf{Subtotal} & \textbf{<%sumcarriedforward%>} \\ >> \end{tabularx} >> >>\newpage >> >>\markright{<%company%>\hfill <%ordnumber%>} >> >>\vspace*{-12pt} >> >>\begin{tabular*}{\textwidth}{@{}lp{\descrwidth}@{\extracolsep\fill}rlrrr@{}} >> \textbf{Number} & \textbf{Description} & \textbf{Qty} & >> \textbf{Unit} & \textbf{Price} & \textbf{Disc} & \textbf{Amount} \\ >> & carried forward from <%lastpage%> & & & & & <%sumcarriedforward%> \\ >><%end pagebreak%> >> >> >>\fontfamily{cmss}\fontsize{10pt}{12pt}\selectfont >> >>\vspace*{2cm} >> >><%name%> >> >><%addr1%> >> >><%addr2%>, <%addr3%> <%addr4%> >> >>\vspace{3.5cm} >> >>\textbf{OUTSTANDING INVOICE SUMMARY} >>\hfill >>\begin{tabular}[t]{l@{\hspace{0.3cm}}l} >> \textbf{Date} & <%checkdate%> \\ >>\end{tabular} >> >>\vspace{1cm} >> >>\begin{tabular*}{\textwidth}{lcccrrrr} >> \textbf{PO Number} & \textbf{Invoice Number} & \textbf{Invoice Date} & >> \textbf{Due Date} & \textbf{0-30} & \textbf{31-60} & \textbf{61-90} & \te >>xtbf{90+}\\ >><%foreach ainvnumber%> >> <%aponumber%> & <%ainvnumber%> & <%ainvdate%> & <%aduedate%> & <%ac0%> & <% >>ac30%> & <%ac60%> & <%ac90%> \\ >><%end ainvnumber%> >>\textbf{Subtotal} & & & & <%c0subtotal%> & <%c30subtotal%> & <%c60subtotal%> >> & <%c90subtotal%> >>\end{tabular*} >>\rule{\textwidth}{1pt} >>\parbox{\textwidth}{ >> >> >>\vspace{0.2cm} >> >>\hfill >>\vspace{0.3cm} >> >>\hfill >>All prices in \textbf{US} funds. >> >>\vspace{12pt} >> >><%if notes%> >> <%notes%> >><%end if%> >> >>} >> >> >>\renewcommand{\thefootnote}{\fnsymbol{footnote}} >> >>\footnotetext[1]{\tiny >>A 10\% order cancellation fee will be applied for any special order products >>or >>products that have been customized, enhanced or upgraded at customers request >>. >>Items which are non-returnable are indicated above. >>} >> >>\end{document} >> >> >> >>-- Attached file included as plaintext by Ecartis -- >>-- File: Outstanding Invoice Summary Procedure >> >>Changes needed to print Outstanding Invoice Summaries. >>v1.8.7) >> >>Step 1: This puts a check box on the AR aging screen to enable printing of su >>mmaries >>***************************************************************************** >>**** >>** PUT IN rp.pl sub aging (line 359) AFTER: >> ** >>** >> ** >>**<tr> >> ** >>** >> ** >>** <th align=right>|.$locale->text('To').qq| ($myconfig{dateformat})</t >>h>** >>** <td colspan=3><input name=todate size=11></td> >> ** >>** >> ** >>**</tr> >> ** >>***************************************************************************** >>**** >><tr> >> >> <th align=right>|.$locale->text('Print Reports').qq| </th> >> <td colspan=3><input name=print_report class=checkbox type=checkbox value >>=Y></td> >> >></tr> >> >> >> >> >>Step 2: This captures and prints the last customer: >>***************************************************************************** >>***** >>** PUT IN rp.pl sub aging (line 836) AFTER: >> ** >>** >> ** >>** $column_data{c90} = qq|<td align=right>$ref->{c90}</td>|; >> ** >>** >> ** >>** >> ** >>** $i++; $i %= 2; >> ** >>** print qq|<tr class=listrow$i>|; >> ** >>** >> ** >>** map { print "$column_data{$_}\n" } @column_index; >> ** >>** >> ** >>** print qq| >> ** >>**</tr>|; >> ** >>** >> ** >>** $ctid = $ref->{id}; >> ** >>** } >> ** >>***************************************************************************** >>***** >> >>if ($form->{print_report}) { >> >> # get last report >> $form->{c0subtotal} = $form->format_amount(\%myconfig, $c0subtotal, 2); >> $form->{c30subtotal} = $form->format_amount(\%myconfig, $c30subtotal, 2); >> $form->{c60subtotal} = $form->format_amount(\%myconfig, $c60subtotal, 2); >> $form->{c90subtotal} = $form->format_amount(\%myconfig, $c90subtotal, 2); >> &print_aging; >> >> $msg = 'Invoice Aging Summaries printed'; >> >>} >> >> >> >>Step 3: This captures all summary data for print and initiates >> print when the customer id changes >>***************************************************************************** >>**** >>** PUT IN rp.pl sub aging (line 757) AFTER: >> ** >>** >> ** >>** foreach $ref (@{ $form->{AG} }) { >> ** >>** >> ** >>***************************************************************************** >>**** >> >> $form->{c0subtotal} = $form->format_amount(\%myconfig, $c0subtotal, 2); >> $form->{c30subtotal} = $form->format_amount(\%myconfig, $c30subtotal, 2); >> $form->{c60subtotal} = $form->format_amount(\%myconfig, $c60subtotal, 2); >> $form->{c90subtotal} = $form->format_amount(\%myconfig, $c90subtotal, 2); >> >>if ($form->{print_report}) { >> if ($subtotal && $ctid != $ref->{id}) { >> >> # print aging report >> &print_aging; >> >> @{ $form->{ainvnumber} } = (); >> @{ $form->{aponumber} } = (); >> @{ $form->{ainvdate} } = (); >> @{ $form->{aduedate} } = (); >> @{ $form->{ac0} } = (); >> @{ $form->{ac30} } = (); >> @{ $form->{ac60} } = (); >> @{ $form->{ac90} } = (); >> $form->{c0subtotal} = ""; >> $form->{c30subtotal} = ""; >> $form->{c60subtotal} = ""; >> $form->{c90subtotal} = ""; >> >> } >> push(@{ $form->{ainvnumber} }, $ref->{invnumber}); >> push(@{ $form->{aponumber} }, $ref->{ponumber}); >> push(@{ $form->{ainvdate} }, $ref->{transdate}); >> push(@{ $form->{aduedate} }, $ref->{duedate}); >> push(@{ $form->{ac0} }, $form->format_amount(\%myconfig, $ref->{c0}, 2)); >> push(@{ $form->{ac30} },$form->format_amount(\%myconfig, $ref->{c30}, 2)) >>; >> push(@{ $form->{ac60} },$form->format_amount(\%myconfig, $ref->{c60}, 2)) >>; >> push(@{ $form->{ac90} },$form->format_amount(\%myconfig, $ref->{c90}, 2)) >>; >>} >> >> >>Step 4: This is the sub that preps and initiates printing: >>***************************************************************************** >>*** >>** PUT AT THE END OF rp.pl >> ** >>***************************************************************************** >>*** >> >>sub print_aging { >> >> # get customer >> $form->{customer_id} = $ctid; >> IS->customer_details(\%myconfig, \%$form); >> >> $form->{company}=$myconfig{company}; >> $form->{address}=$myconfig{address}; >> $form->{tel}=$myconfig{tel}; >> $form->{fax}=$myconfig{fax}; >> $form->{type}="aging"; >> $form->{templates} = "$myconfig{templates}"; >> $form->{IN} = "$form->{type}.tex"; >> $form->{contenttype} = ""; >> $form->{format}="postscript"; >> $form->{media}="printer"; >> $form->{printer} = "lpr" unless $form->{printer}; >> $form->{OUT} = "|$form->{printer}"; >> $form->{checkdate} = $form->check_date; >> >> $form->parse_template(\%myconfig, $userspath); >> >>} >> >> >> >> >> >> > > > >

