chiark / gitweb /
implement ordering bom
authorian <ian>
Mon, 19 Apr 2004 00:04:17 +0000 (00:04 +0000)
committerian <ian>
Mon, 19 Apr 2004 00:04:17 +0000 (00:04 +0000)
farnell/farnell-find

index 1ab15dfb86f8107d58a81c11e3a9506a6dc3fee4..5c87495debd3636748290fc45e8bc7b564a80b9f 100755 (executable)
@@ -11,6 +11,8 @@
 #        then will prompt and read a line from tty.
 #   ./farnell-find [<options>] bom <file> ...
 #       Processes input files and produces BOM parts list.
+#   ./farnell-find [<options>] order-bom <file> ...
+#       Processes input files and adds BOM parts to cart.
 #
 # Options:
 #   -S<sort>
@@ -224,6 +226,7 @@ sub cart_add (@) {
     my ($i, $url, $item, $qty, @submit, $request, $response);
     my ($page_output);
     local ($_);
+    need_jsessionid();
     $url= "$urlbase/jsp/op/shoppingbasket.jsp;jsessionid=$jsessionid";
     get_useragent();
     $response= $useragent->get($url);
@@ -399,11 +402,12 @@ sub iteminstanceprint ($) {
                   $ii->{Use});
 }    
 
-sub analyse_spec () {
+sub analyse_spec ($) {
+    my ($op) = @_;
     my ($part,$pd,$try,@rhs,$sp,$circuit,$iteratable,$count,$pe,$use);
     my ($item,$totalqty,$ii,$bi,$toorder,$price,$total,$notechar,$desc);
     my ($avail,%avail,$desclen,$why,$suppress,%suppress,$pi);
-    my ($iteminstance);
+    my ($iteminstance,@orderlist);
     $desclen= 42;
     foreach $part (sort keys %partdef) {
        $item= $partdef{$part};
@@ -492,6 +496,7 @@ sub analyse_spec () {
        $show{$item}{Info}= '';
        $total += $price;
        $show{$item}{Price}= $price;
+       $show{$item}{ToOrder}= $toorder;
        foreach $desc (@{ $itemdesc{$item} }) {
            $show{$item}{Info} .=
                sprintf("%*s %s\n",
@@ -502,10 +507,21 @@ sub analyse_spec () {
            $show{$item}{Info} .= iteminstanceprint($ii);
        }
     }
+    if ($op eq 'order-bom') {
+       dump_warnerrs();
+    }
     foreach $item (sort { itemsortmap($a) cmp itemsortmap($b); }
                   keys %show) {
-       print $show{$item}{Head}, $show{$item}{Info}, "\n"
-           or die $!;
+       if ($op eq 'order-bom') {
+           push @orderlist, $item, $show{$item}{ToOrder};
+       } else {
+           print $show{$item}{Head}, $show{$item}{Info}, "\n"
+               or die $!;
+       }
+    }
+    if ($op eq 'order-bom') {
+       cart_add(@orderlist);
+       die;
     }
     printf("%*s %11s %-*s %6.2f\n",
           (5+1), 'TOTAL',
@@ -631,6 +647,20 @@ sub is_jsessionid ($) {
     return $1;
 }
 
+sub need_jsessionid () {
+    local ($_);
+    my ($newjsid);
+    return if defined $jsessionid;
+    open TTY, "+< /dev/tty" or die $!;
+    select((select(TTY), $|=1)[0]);
+    print TTY "URL or jsessionid: " or die $!;
+    $_= <TTY>; TTY->error and die $!;
+    length or die;
+    $newjsid= is_jsessionid($_);
+    defined $newjsid or die;
+    $jsessionid= $newjsid;
+}
+
 sub main () {
     my ($op);
     my ($item, $a);
@@ -673,23 +703,13 @@ sub main () {
            }
            die $! if STDIN->error;
        }
-       if (!defined $jsessionid) {
-           open TTY, "+< /dev/tty" or die $!;
-           select((select(TTY), $|=1)[0]);
-           print TTY "URL or jsessionid: " or die $!;
-           $_= <TTY>; TTY->error and die $!;
-           length or die;
-           $newjsid= is_jsessionid($_);
-           defined $newjsid or die;
-           $jsessionid= $newjsid;
-       }
        cart_add(@orderlist);
-    } elsif ($op eq 'bom') {
+    } elsif ($op eq 'bom' || $op eq 'order-bom') {
        my ($filename);
        foreach $filename (@ARGV) {
            read_spec($filename);
        }
-       analyse_spec();
+       analyse_spec($op);
        exit !!@fault;
     } else {
        die;