64
64
* @param {string } resError Response error (if any)
65
65
*/
66
66
67
- const VERSION_NO = 6.0 ; //Current version
67
+ const VERSION_NO = 7.0 ; //Current version
68
+
69
+ let orders = [ ] ; //Orders received from background script
68
70
69
71
/*
70
72
Data format to send to PrinterPi (NOTE: item descs and skus MUST NOT CONTAIN ~ and NO EXTRA SPACES ARE ALLOWED before/after parameters):
@@ -88,9 +90,11 @@ const VERSION_NO = 6.0; //Current version
88
90
* @param {onFinish } onFinish On finish callback
89
91
*/
90
92
let readStorageData = ( onFinish ) => {
91
- chrome . storage . local . get ( [ "data" ] , ( res ) => {
92
- if ( res . data ) {
93
- setData ( res . data ) ;
93
+ chrome . storage . local . get ( [ "orders" ] , ( res ) => {
94
+ if ( res . orders ) {
95
+ orders = res . orders ;
96
+ showOrders ( ) ;
97
+ selectOrder ( 0 ) ;
94
98
document . getElementById ( "more-info" ) . innerHTML = "Data read from storage" ;
95
99
} else {
96
100
document . getElementById ( "more-info" ) . innerHTML = "No data in storage" ;
@@ -109,7 +113,7 @@ let readStorageData = (onFinish) => {
109
113
*/
110
114
let setStorageData = ( ) => {
111
115
if ( validateInputs ( ) ) {
112
- chrome . storage . local . set ( { data : getData ( ) } , ( ) => {
116
+ chrome . storage . local . set ( { orders : orders } , ( ) => {
113
117
document . getElementById ( "more-info" ) . innerHTML = "Data saved" ;
114
118
} ) ;
115
119
}
@@ -329,6 +333,46 @@ let getData = () => { //Read the data from the HTML page
329
333
return data ;
330
334
}
331
335
336
+ /**
337
+ * Show a (global) order based on it's index
338
+ *
339
+ * @param {number } orderIndex
340
+ */
341
+ let selectOrder = ( orderIndex ) => {
342
+ console . log ( orders ) ;
343
+ setData ( {
344
+ to : orders [ orderIndex ] ?. to || "" ,
345
+ shipping : orders [ orderIndex ] ?. shipping || "0" ,
346
+ tax : orders [ orderIndex ] ?. tax || "0" ,
347
+ subtotal : orders [ orderIndex ] ?. subtotal || "0" ,
348
+ items : orders [ orderIndex ] ?. items || [ ] ,
349
+ } ) ;
350
+ validateInputs ( ) ;
351
+ }
352
+
353
+ /**
354
+ * Remove the current order (from global orders)
355
+ */
356
+ const removeCurrentOrder = ( ) => {
357
+ orders . splice ( document . getElementById ( "order-select" ) . value , 1 ) ;
358
+ showOrders ( ) ;
359
+ selectOrder ( 0 ) ;
360
+ }
361
+
362
+ /**
363
+ * Show the (global) orders in the select
364
+ */
365
+ const showOrders = ( ) => {
366
+ document . getElementById ( 'order-select' ) . innerHTML = "" ;
367
+ orders . forEach ( ( _ , i ) => {
368
+ let opt = document . createElement ( "OPTION" ) ;
369
+ opt . value = i ;
370
+ opt . innerHTML = `Order ${ i + 1 } ` ;
371
+ opt . selected = i == 0 ;
372
+ document . getElementById ( 'order-select' ) . appendChild ( opt ) ;
373
+ } ) ;
374
+ }
375
+
332
376
/**
333
377
* Get the complete data Packet
334
378
*
@@ -456,12 +500,14 @@ let validateInputs = () => {
456
500
457
501
if ( err_msg ) { //Display any errors and disable the submit button
458
502
document . getElementById ( "print-button" ) . disabled = true ;
503
+ document . getElementById ( "print-all-button" ) . disabled = true ;
459
504
let done_msg = document . getElementById ( "done-msg" ) ;
460
505
done_msg . innerHTML = err_msg ;
461
506
done_msg . classList = "text-danger" ;
462
507
return false ;
463
508
} else { //No errors - remove any lock on the submit button
464
509
document . getElementById ( "print-button" ) . disabled = false ;
510
+ document . getElementById ( "print-all-button" ) . disabled = false ;
465
511
let done_msg = document . getElementById ( "done-msg" ) ;
466
512
done_msg . innerHTML = "Not connected" ;
467
513
done_msg . classList = "text-info" ;
@@ -552,14 +598,16 @@ let parseFile = (ev) => {
552
598
if ( data . version >= 6.0 ) { //Tax support added in version 6.0
553
599
tax = data . tax
554
600
}
555
- setData ( { //Set the data packet
601
+ orders = [ ] ;
602
+ orders . push ( { //Set the data packet
556
603
to : data . to ,
557
604
shipping : data . shipping ,
558
605
tax : tax ,
559
606
subtotal : data . subtotal ,
560
607
items : data . items ,
561
608
} ) ;
562
- validateInputs ( ) ;
609
+ showOrders ( ) ;
610
+ selectOrder ( 0 ) ;
563
611
document . getElementById ( "more-info" ) . innerHTML = "Data loaded from file" ; //Show the error message
564
612
}
565
613
reader . readAsText ( files [ 0 ] ) ;
@@ -574,6 +622,13 @@ window.onload = () => { //Add event listeners, etc.
574
622
let pkt = getPacket ( settings ) ;
575
623
if ( pkt ) sendData ( pkt ) ;
576
624
} ) ;
625
+ document . getElementById ( 'print-all-button' ) . addEventListener ( 'click' , ( ) => { //Get the data packet and send it
626
+ for ( let orderIndex in orders ) {
627
+ selectOrder ( orderIndex ) ;
628
+ let pkt = getPacket ( settings ) ;
629
+ if ( pkt ) sendData ( pkt ) ;
630
+ }
631
+ } ) ;
577
632
document . getElementById ( 'envelope-button' ) . addEventListener ( 'click' , ( ) => { //Get the data packet and print it
578
633
let pkt = getPacket ( settings ) ;
579
634
if ( pkt ) printEnvelope ( pkt ) ;
@@ -590,6 +645,8 @@ window.onload = () => { //Add event listeners, etc.
590
645
done_msg . innerHTML = "Please configure the printer settings in the Setting page (via the button PrinterPi Settings below)" ;
591
646
done_msg . classList = "text-danger" ;
592
647
} ) ;
648
+ document . getElementById ( 'order-select' ) . addEventListener ( "change" , ( e ) => selectOrder ( e . target . value ) ) ;
649
+ document . getElementById ( 'remove-button' ) . addEventListener ( "click" , removeCurrentOrder ) ;
593
650
document . getElementById ( 'save-button' ) . addEventListener ( 'click' , setStorageData ) ;
594
651
document . getElementById ( 'parse-button' ) . addEventListener ( 'click' , parsePage ) ; //Execute the background parsing script
595
652
document . getElementById ( 'file-button' ) . addEventListener ( 'click' , ( ) => document . getElementById ( 'file-dialog' ) . click ( ) ) ; //Parse a file for the receipt
@@ -611,14 +668,18 @@ chrome.runtime.onMessage.addListener((msg) => { //Listen for messages and set th
611
668
document . getElementById ( "more-info" ) . innerHTML += ". Not a valid page to parse." ; //Show the error message
612
669
} ) ;
613
670
document . getElementById ( 'parse-button' ) . disabled = true ;
614
- } else {
615
- setData ( { //Set the data packet
616
- to : msg . to ,
617
- shipping : msg . shipping ,
618
- tax : msg . tax ,
619
- subtotal : msg . subtotal ,
620
- items : msg . items ,
621
- } ) ;
622
- validateInputs ( ) ;
671
+ } else if ( msg . orders ) {
672
+ if ( msg . orders . length >= 1 ) {
673
+ setData ( { //Set the data packet
674
+ to : msg . orders [ 0 ] . to ,
675
+ shipping : msg . orders [ 0 ] . shipping ,
676
+ tax : msg . orders [ 0 ] . tax ,
677
+ subtotal : msg . orders [ 0 ] . subtotal ,
678
+ items : msg . orders [ 0 ] . items ,
679
+ } ) ;
680
+ orders = msg . orders ;
681
+ showOrders ( ) ;
682
+ validateInputs ( ) ;
683
+ }
623
684
}
624
- } ) ;
685
+ } ) ;
0 commit comments