Subversion Repositories OpenARM Single-board Computer

Rev

Rev 313 | Rev 319 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 313 Rev 318
Line 1... Line 1...
1
#!/usr/bin/perl -w
1
#!/usr/bin/perl -w
2
use strict;
2
use strict;
3
# $Id: inventory.pl 313 2008-12-28 23:03:20Z agaran $
3
# $Id: inventory.pl 318 2008-12-29 10:58:58Z agaran $
4
# Thu, 13 Nov 2008 21:06:23 +0100
4
# Thu, 13 Nov 2008 21:06:23 +0100
5
# Maciej 'agaran' Pijanka <agaran@pld-linux.org>
5
# Maciej 'agaran' Pijanka <agaran@pld-linux.org>
6
# for OpenARM SBC Project
6
# for OpenARM SBC Project
7
# license: gpl v3
7
# license: gpl v3
8
8
Line 114... Line 114...
114
# this subroutine is used as callback function
114
# this subroutine is used as callback function
115
# executed by file_lookup
115
# executed by file_lookup
116
sub parse_ifile($) {
116
sub parse_ifile($) {
117
        my ($filepath) = @_;
117
        my ($filepath) = @_;
118
118
-
 
119
119
        open(IN, $filepath) or return 1;
120
        open(IN, $filepath) or return 1;
120
121
121
        my %data;
122
        my %data;
122
123
123
        while (not eof IN) {
124
        while (not eof IN) {
Line 310... Line 311...
310
                inf_printf("Skipping file %s because contain no data for me",
311
                inf_printf("Skipping file %s because contain no data for me",
311
                        shortdir($filepath));
312
                        shortdir($filepath));
312
                return;
313
                return;
313
        }
314
        }
314
315
315
        my $cost = 0;
-
 
316
        foreach my $id (keys %data) {
316
        foreach my $id (keys %data) {
317
                my %tmp;
317
                my %tmp;
318
                map { $tmp{$_} = 1 } @{$data{$id}{RefDes}};
318
                map { $tmp{$_} = 1 } @{$data{$id}{RefDes}};
319
                @{$data{$id}{RefDes}} = keys %tmp;
319
                @{$data{$id}{RefDes}} = keys %tmp;
320
                my $cnt = scalar @{$data{$id}{RefDes}};
320
                my $cnt = scalar @{$data{$id}{RefDes}};
321
                if (!defined $Inv[$id]{Price}) {
321
                if (!defined $Inv[$id]{Price}) {
322
                        wrn_printf("%s has no price, setting to 0.0", $Inv[$id]{Manufacturer_Partno});
322
                        wrn_printf("%s has no price, setting to 0.0", $Inv[$id]{Manufacturer_Partno});
323
                        $Inv[$id]{Price} = 0;
323
                        $Inv[$id]{Price} = 0;
324
                }
324
                }
325
                my $icost = $Inv[$id]{Price} * $cnt;
325
                push @{$BomData{$id}{RefDes}}, @{$data{$id}{RefDes}};
-
 
326
               
326
#               printf "%-20s %.4f %s\n", $Inv[$id]{Manufacturer_Partno}, $cnt, $icost, join (', ', @{$data{$id}{RefDes}});
327
#               printf "%-20s %.4f %s\n", $Inv[$id]{Manufacturer_Partno}, $cnt, $icost, join (', ', @{$data{$id}{RefDes}});
327
                $cost += $icost;
-
 
328
#               %BomData{ById}{$id}{RefDes}
328
#               %BomData{ById}{$id}{RefDes}
329
        }
329
        }
330
        printf "Total (%s): %.4f\n", shortdir($filepath), $cost;
-
 
331
}
330
}
332
331
333
sub file_lookup ($$$$) ;
332
sub file_lookup ($$$$) ;
334
sub file_lookup ($$$$) {
333
sub file_lookup ($$$$) {
335
        my ($dir, $depth, $regexp, $callback) = @_;
334
        my ($dir, $depth, $regexp, $callback) = @_;
Line 402... Line 401...
402
file_lookup($Config{docdir}, 0, qr/\/information.txt$/, \&parse_ifile);
401
file_lookup($Config{docdir}, 0, qr/\/information.txt$/, \&parse_ifile);
403
402
404
# process BOM files
403
# process BOM files
405
file_lookup($Config{bomdir}, 0, qr/\.bom$/, \&parse_bom);
404
file_lookup($Config{bomdir}, 0, qr/\.bom$/, \&parse_bom);
406
405
-
 
406
my $n = 0;
-
 
407
my $cost = 0.0;
-
 
408
-
 
409
sub shortstring($$) {
-
 
410
        my ($str,$lim) = @_;
-
 
411
        return substr($str,0,$lim-4).'(..)' if (length ($str) > $lim);
-
 
412
        return $str;
-
 
413
}
-
 
414
-
 
415
-
 
416
-
 
417
open (BOMOUT, '>output.bom') || die 'cant open output.bom: $!';
-
 
418
open (PARTMAP, '>output.map') || die 'cant open output.map: $!';
-
 
419
-
 
420
printf BOMOUT "|    |  %-33s|  %-20s|  %-18s|  %-11s|%-5s|%-6s|%-6s|\n|----+-----------------------------------+".
-
 
421
        "----------------------+--------------------+-------------+------+------+------|\n",
-
 
422
        'description','manufact. partno','manufacturer','order code','quant.','price','cost';
-
 
423
printf PARTMAP "%-35s| refdes\n\n", 'part';
-
 
424
-
 
425
-
 
426
foreach my $id (keys %BomData) {
-
 
427
        my %tmp;
-
 
428
        map { $tmp{$_} = 1 } @{$BomData{$id}{RefDes}};
-
 
429
        @{$BomData{$id}{RefDes}} = keys %tmp;
-
 
430
        my $cnt = scalar @{$BomData{$id}{RefDes}};
-
 
431
        if (!defined $Inv[$id]{Price}) {
-
 
432
                wrn_printf("%s has no price, setting to 0.0", $Inv[$id]{Manufacturer_Partno});
-
 
433
                $Inv[$id]{Price} = 0;
-
 
434
        }
-
 
435
        my $icost = $cnt * $Inv[$id]{Price};
-
 
436
               
-
 
437
        printf BOMOUT "|%4d|%-35s|%-22s|%-20s|%-13s|%6d|%6.3f|%6.3f|\n", $n, shortstring($Inv[$id]{Description},35),
-
 
438
                shortstring($Inv[$id]{Manufacturer_Partno},22), shortstring($Inv[$id]{Manufacturer},20),
-
 
439
                shortstring($Inv[$id]{Ordercode}, 13), $cnt, $Inv[$id]{Price}, $icost;
-
 
440
-
 
441
        printf PARTMAP "%-35s|%s\n", shortstring($Inv[$id]{Description},35), join (', ', @{$BomData{$id}{RefDes}});
-
 
442
        $cost += $icost;
-
 
443
#       %BomData{ById}{$id}{RefDes}
-
 
444
        $n ++;
-
 
445
}
-
 
446
printf BOMOUT "|%s|\n| %-118s|\n|%s|\n", ("-" x 119), sprintf ("Total cost: %.3f", $cost), ("-" x 119);
-
 
447
-
 
448
close BOMOUT;
-
 
449
close PARTMAP;