home *** CD-ROM | disk | FTP | other *** search
/ PC World 2000 February / PCWorld_2000-02_cd.bin / live / usr / X11R6 / lib / X11 / cbb / contrib / trimold.pl < prev    next >
Perl Script  |  1998-10-07  |  6KB  |  180 lines

  1. #!/usr/bin/perl
  2. #  trimold.pl - move all cleared transactions to date out of account file.
  3. #
  4. #  warning:  This program is rather slow ... but hey, you only have
  5. #            to run it occasionally and it gives the impression that
  6. #            it is really working hard. :)
  7. #
  8. #  Written by Lionel Mallet (with pieces from Curtis Olson).
  9. #
  10. #  Copyright (C) 1997  Lionel Mallet  - l.mallet@gr.opengroup.org
  11. #
  12. #  This program is free software; you can redistribute it and/or modify
  13. #  it under the terms of the GNU General Public License as published by
  14. #  the Free Software Foundation; either version 2 of the License, or
  15. #  (at your option) any later version.
  16. #
  17. #  This program is distributed in the hope that it will be useful,
  18. #  but WITHOUT ANY WARRANTY; without even the implied warranty of
  19. #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  20. #  GNU General Public License for more details.
  21. #
  22. #  You should have received a copy of the GNU General Public License
  23. #  along with this program; if not, write to the Free Software
  24. #  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  25.  
  26. # $Id: trimold.pl,v 2.2 1997/07/04 14:24:42 curt Exp $
  27. # (Log is kept at end of this file)
  28.  
  29. package CBB;
  30.  
  31. use strict;
  32.  
  33. my($account, $base_account, $old_account, $olddir, %CL_TRANS);
  34. my($description, $comment, $todate, $vst_category, $running_balance);
  35. my($new_debit, $new_credit, $new_trans, $response, $result, $arg);
  36. my($key, $date, $check, $desc, $debit, $credit, $cat, $com, $cleared, $total);
  37. my($niceto, $last_date, $month, $day, $year);
  38.  
  39. # specify the installed location of the necessary pieces.
  40. $CBB::cbb_incl_dir = "/usr/X11R6/lib/X11/cbb";
  41. unshift(@INC, $CBB::cbb_incl_dir);
  42.  
  43. require "categories.pl";
  44. require "engine.pl";
  45. require "memorized.pl";
  46. require "common.pl";
  47.  
  48. (($#ARGV >= 4) && ($#ARGV <= 6)) || 
  49.     die "Usage: trimold.pl account -to mm/dd/[yy]yy -cat vst_category [ -d 
  50. old_dir ]";
  51.  
  52. $account = shift(@ARGV);
  53. $base_account = &file_basename($account);
  54. $olddir = ".";
  55. %CL_TRANS = {};
  56. $running_balance = 0.0;
  57. $description = "Balance";
  58. $comment = "Trimmed";
  59.  
  60. while ($#ARGV >= 0) {
  61.     $arg = shift(@ARGV);
  62.     if ( substr($arg, 0 , 1) eq "-" ) {
  63.     if ( $arg eq "-to" ) {
  64.         $niceto = shift(@ARGV);
  65.         
  66.         my($month, $day, $year) = split(/\//, $niceto);
  67.         $month = &pad($month);
  68.         $day = &pad($day);
  69.         if ( defined($year) ) {
  70.         $year = &pad($year);
  71.         } else {
  72.         $year = $CBB::cur_year;
  73.         }
  74.         $year = &pad($year);
  75.         if ( length($year) == 2 ) {
  76.         $year = ¢ury() . "$year";
  77.         }
  78.         $todate = "$year" . "$month" . "$day";
  79.     } elsif ( $arg eq "-d" ) {
  80.         $olddir = shift(@ARGV);
  81.     } elsif ( $arg eq "-cat" ) {
  82.         $vst_category = shift(@ARGV);
  83.     }
  84.     }
  85. }
  86.  
  87. # check arguments
  88. ( defined($todate) && defined($vst_category) ) ||
  89.     die "Usage: trimold.pl account -to mm/dd/[yy]yy -cat vst_category [ -d 
  90. old_dir ]";
  91.  
  92. $old_account = $olddir."/".&file_root($base_account)."_".
  93.     $todate.".".&file_extension($base_account);
  94.  
  95. print "Trimming up to ".&fmt_date($todate)." into $old_account.\n\n";
  96. print "This program will MOVE all cleared transactions to date from\n";
  97. print "the specified account to the specified export file. These\n";
  98. print "transactions WILL BE DELETED from the specified account.\n";
  99. print "You are strongly encouraged to make BACKUPS of all your data\n";
  100. print "before attempting to do this.\n\n";
  101. print "Do you wish to continue?  (yes/no) ";
  102.  
  103. $response = <STDIN>;
  104.  
  105. if ( $response =~ m/yes/i ) {
  106.     print "Ok, continuing...";
  107. } else {
  108.     die "Bailing out ... nothing was done to your data.\n";
  109. }
  110.  
  111.  
  112. (&load_trans($account) eq "ok") || die "\nCannot open account:  $account";
  113.  
  114. $result = &first_trans();
  115. while ( $result ne "none" ) {
  116.     my($key, $date, $check, $desc, $debit, $credit, $cat, $com, $cleared,
  117.      $total) = split(/\t/, $result);
  118.  
  119.     last if ($date > $todate);
  120.     if ( $cleared ne "x" ) {
  121.     print "\nFound uncleared transaction on ".&fmt_date($date).
  122.         ", won't go further!\n";
  123.     last;
  124.     }
  125.  
  126.     # keep some info
  127.     $running_balance = $running_balance + $credit - $debit;
  128.     $last_date = $date;
  129.  
  130.     $CL_TRANS{$key} = $CBB::TRANS{$key};
  131.     print ".";
  132.  
  133.     # these two lines should be in that order or we may miss one transaction!!!
  134.     $result = &next_trans();
  135.     &delete_trans($key);
  136. }
  137.  
  138. # create transaction to restore current balance
  139. if ($running_balance < 0) {
  140.     $new_debit = $running_balance * -1;
  141.     $new_credit  = 0.00;
  142. } else {
  143.     $new_debit = 0.00;
  144.     $new_credit = $running_balance;
  145. }
  146.  
  147. # create new transaction to restore running balance
  148. $new_trans = "$last_date\t\t$description (".&fmt_date($last_date).")\t".
  149.     sprintf("%.2f", $new_debit)."\t".sprintf("%.2f", $new_credit).
  150.     "\t$vst_category\t$comment\tx\t".sprintf("%.2f", $running_balance);
  151. &create_trans($new_trans);
  152.  
  153. (&save_trans("$account") eq "ok") || die "Cannot save account:  $account";
  154.  
  155. # now create old transaction account
  156. &init_trans;
  157. %CBB::TRANS = %CL_TRANS;
  158. (&save_trans("$old_account") eq "ok") || 
  159.     die "Cannot save account:  $old_account";
  160.  
  161. print "Done.\n";
  162.  
  163. sub fmt_date {
  164.     my($raw_date) = @_;
  165.     my($year) = substr($raw_date, 2, 2);
  166.     my($month) = substr($raw_date, 4, 2);
  167.     my($day) = substr($raw_date, 6, 2);
  168.  
  169.     return("$month/$day/$year");
  170. }
  171.     
  172. # ----------------------------------------------------------------------------
  173. # $Log: trimold.pl,v $
  174. # Revision 2.2  1997/07/04 14:24:42  curt
  175. # Lionel Mallet upgraded to run in perl's strict mode.
  176. #
  177. # Revision 2.1  1997/05/07 01:17:50  curt
  178. # Added contrib script "trimold.pl"
  179. #
  180.