Rev 331 | Rev 333 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 331 | Rev 332 | ||
|---|---|---|---|
| Line 1... | Line 1... | ||
| 1 | #!/usr/bin/perl -w
|
1 | #!/usr/bin/perl -w
|
| 2 | use strict; |
2 | use strict; |
| 3 | # $Id: inventory.pl 331 2008-12-29 20:05:13Z agaran $
|
3 | # $Id: inventory.pl 332 2008-12-29 20:40: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 36... | Line 36... | ||
| 36 | # ==================================================
|
36 | # ==================================================
|
| 37 | 37 | ||
| 38 | my %Inv_By_PartNo; |
38 | my %Inv_By_PartNo; |
| 39 | my @Inv; |
39 | my @Inv; |
| 40 | my %BomData; |
40 | my %BomData; |
| - | 41 | my %Files; |
|
| 41 | 42 | ||
| 42 | sub err_printf($@) { |
43 | sub err_printf($@) { |
| 43 | my ($format, @args) = @_; |
44 | my ($format, @args) = @_; |
| 44 | 45 | ||
| 45 | printf STDERR "-E- ".$format."\n", @args; |
46 | printf STDERR "-E- ".$format."\n", @args; |
| Line 287... | Line 288... | ||
| 287 | 288 | ||
| 288 | sub parse_bom ($) { |
289 | sub parse_bom ($) { |
| 289 | my ($filepath) = @_; |
290 | my ($filepath) = @_; |
| 290 | 291 | ||
| 291 | open(IN, $filepath) or return 1; |
292 | open(IN, $filepath) or return 1; |
| - | 293 | my $fkey = substr(basename($filepath),0,length(basename($filepath))-4); |
|
| 292 | 294 | ||
| 293 | #wrn_printf("GotARg: %s", shortdir($filepath));
|
295 | #wrn_printf("GotARg: %s", shortdir($filepath));
|
| 294 | 296 | ||
| 295 | my @Fields; |
297 | my @Fields; |
| 296 | 298 | ||
| Line 370... | Line 372... | ||
| 370 | err_printf("Different footprints for same device between sheets, script cannot ". |
372 | err_printf("Different footprints for same device between sheets, script cannot ". |
| 371 | "work around this, will use first one, but expect that output file might ". |
373 | "work around this, will use first one, but expect that output file might ". |
| 372 | "have errors."); |
374 | "have errors."); |
| 373 | }
|
375 | }
|
| 374 | }
|
376 | }
|
| 375 | push @{$BomData{$id}{Files}}, substr(basename($filepath),0,length(basename($filepath))-4); |
377 | push @{$BomData{$id}{Files}}, $fkey; |
| - | 378 | push @{$Files{$fkey}{$id}{RefDes}}, @{$data{$id}{RefDes}}; |
|
| 376 | 379 | ||
| 377 | # printf "%-20s %.4f %s\n", $Inv[$id]{Manufacturer_Partno}, $cnt, $icost, join (', ', @{$data{$id}{RefDes}});
|
380 | # printf "%-20s %.4f %s\n", $Inv[$id]{Manufacturer_Partno}, $cnt, $icost, join (', ', @{$data{$id}{RefDes}});
|
| 378 | # %BomData{ById}{$id}{RefDes}
|
381 | # %BomData{ById}{$id}{RefDes}
|
| 379 | }
|
382 | }
|
| 380 | }
|
383 | }
|
| Line 542... | Line 545... | ||
| 542 | # $bomtable->add(' '.$n.' ', $Inv[$id]{Description}.' ', $Inv[$id]{Manufacturer_Partno}.' ', $Inv[$id]{Manufacturer}.' ',
|
545 | # $bomtable->add(' '.$n.' ', $Inv[$id]{Description}.' ', $Inv[$id]{Manufacturer_Partno}.' ', $Inv[$id]{Manufacturer}.' ',
|
| 543 | # $Inv[$id]{Ordercode}.' ', ' '.$quant.' ', sprintf("%.3f ",$Inv[$id]{Price}), sprintf("%.3f ",$icost));
|
546 | # $Inv[$id]{Ordercode}.' ', ' '.$quant.' ', sprintf("%.3f ",$Inv[$id]{Price}), sprintf("%.3f ",$icost));
|
| 544 | $bomtable->add($bn++, $Inv[$id]{Description}, $Inv[$id]{Manufacturer_Partno}, $Inv[$id]{Manufacturer}, |
547 | $bomtable->add($bn++, $Inv[$id]{Description}, $Inv[$id]{Manufacturer_Partno}, $Inv[$id]{Manufacturer}, |
| 545 | $Inv[$id]{Ordercode},$quant, sprintf("%.3f",$Inv[$id]{Price}), sprintf("%.3f",$icost)); |
548 | $Inv[$id]{Ordercode},$quant, sprintf("%.3f",$Inv[$id]{Price}), sprintf("%.3f",$icost)); |
| 546 | 549 | ||
| 547 | $parttable->add($pn++, $Inv[$id]{Description}, $Inv[$id]{Manufacturer_Partno}, $BomData{$id}{Footprint}, |
550 | # $parttable->add($pn++, $Inv[$id]{Description}, $Inv[$id]{Manufacturer_Partno}, $BomData{$id}{Footprint},
|
| 548 | strbreak(join (', ', sort @{$BomData{$id}{RefDes}}),43), join("\n",@{$BomData{$id}{Files}})); |
551 | # strbreak(join (', ', sort @{$BomData{$id}{RefDes}}),43), join("\n",@{$BomData{$id}{Files}}));
|
| 549 | }
|
552 | }
|
| 550 | 553 | ||
| - | 554 | ||
| 551 | printf $out "file generated at %s\n\n", scalar localtime(time()); |
555 | printf $out "file generated at %s\n\n", scalar localtime(time()); |
| 552 | 556 | ||
| 553 | print $out $bomtable->rule('-','+'); |
557 | print $out $bomtable->rule('-','+'); |
| 554 | print $out $bomtable->title(); |
558 | print $out $bomtable->title(); |
| 555 | print $out $bomtable->rule('-','+'); |
559 | print $out $bomtable->rule('-','+'); |
| 556 | print $out $bomtable->body(); |
560 | print $out $bomtable->body(); |
| 557 | print $out $bomtable->rule('-','+'); |
561 | print $out $bomtable->rule('-','+'); |
| 558 | 562 | ||
| 559 | printf $out "\nTotal cost: %.3f\n\n\n", $cost; |
563 | printf $out "\nTotal cost: %.3f\n\n\n", $cost; |
| 560 | 564 | ||
| - | 565 | ||
| - | 566 | foreach my $fkey (sort keys %Files) { |
|
| - | 567 | my $rowblock = 0; |
|
| - | 568 | $pn = 1; |
|
| - | 569 | foreach my $id ( sort {my $p = $Inv[$a]{Manufacturer} cmp $Inv[$b]{Manufacturer}; if ($p == 0) { |
|
| - | 570 | return $Inv[$a]{Description} cmp $Inv[$b]{Description}}; return $p; } keys %{$Files{$fkey}}) { |
|
| - | 571 | ||
| - | 572 | $parttable->add($pn++, $Inv[$id]{Description}, $Inv[$id]{Manufacturer_Partno}, $BomData{$id}{Footprint}, |
|
| - | 573 | strbreak(join (', ', sort @{$Files{$fkey}{$id}{RefDes}}),43), $fkey); |
|
| - | 574 | ||
| - | 575 | ||
| - | 576 | }
|
|
| - | 577 | $parttable->add('--','=========','==========','==========','==========','=========='); |
|
| - | 578 | }
|
|
| - | 579 | ||
| 561 | print $out $parttable->rule('-','+'); |
580 | print $out $parttable->rule('-','+'); |
| 562 | print $out $parttable->title(); |
581 | print $out $parttable->title(); |
| 563 | print $out $parttable->rule('-','+'); |
582 | print $out $parttable->rule('-','+'); |
| 564 | print $out $parttable->body(); |
583 | print $out $parttable->body(); |
| 565 | print $out $parttable->rule('-','+'); |
584 | print $out $parttable->rule('-','+'); |