From 3690cc06cb984431a8a8e5518c1ca47ba1ef9ea1 Mon Sep 17 00:00:00 2001 From: Taka Date: Mon, 25 Feb 2019 06:03:39 +0000 Subject: [PATCH] Added the Free French nationality. --- .../tools/make_chapter_h_placeholders.py | 2 +- .../default-template-pack/nationalities.json | 4 + .../webapp/data/ordnance/free-french.json | 107 ++++++++ .../webapp/data/vehicles/free-french.json | 258 ++++++++++++++++++ .../data/vehicles/russian.lend-lease.json | 10 +- .../static/images/flags/free-french.png | Bin 0 -> 9942 bytes vasl_templates/webapp/static/main.js | 3 +- vasl_templates/webapp/static/snippets.js | 4 +- .../webapp/templates/vo-report.html | 3 +- .../webapp/tests/fixtures/vasl-pieces.txt | 3 + .../vo-reports/ordnance/free-french/1940.txt | 26 ++ .../vo-reports/ordnance/free-french/1941.txt | 26 ++ .../vo-reports/ordnance/free-french/1942.txt | 26 ++ .../vo-reports/ordnance/free-french/1943.txt | 26 ++ .../vo-reports/ordnance/free-french/1944.txt | 26 ++ .../vo-reports/ordnance/free-french/1945.txt | 26 ++ .../vo-reports/vehicles/free-french/1940.txt | 56 ++++ .../vo-reports/vehicles/free-french/1941.txt | 56 ++++ .../vo-reports/vehicles/free-french/1942.txt | 56 ++++ .../vo-reports/vehicles/free-french/1943.txt | 56 ++++ .../vo-reports/vehicles/free-french/1944.txt | 56 ++++ .../vo-reports/vehicles/free-french/1945.txt | 56 ++++ .../vo-reports/vehicles/russian/1940.txt | 10 +- .../vo-reports/vehicles/russian/1941.txt | 10 +- .../vo-reports/vehicles/russian/1942.txt | 10 +- .../vo-reports/vehicles/russian/1943.txt | 10 +- .../vo-reports/vehicles/russian/1944.txt | 10 +- .../vo-reports/vehicles/russian/1945.txt | 10 +- vasl_templates/webapp/vo.py | 39 ++- 29 files changed, 932 insertions(+), 53 deletions(-) create mode 100644 vasl_templates/webapp/data/ordnance/free-french.json create mode 100644 vasl_templates/webapp/data/vehicles/free-french.json create mode 100644 vasl_templates/webapp/static/images/flags/free-french.png create mode 100644 vasl_templates/webapp/tests/fixtures/vo-reports/ordnance/free-french/1940.txt create mode 100644 vasl_templates/webapp/tests/fixtures/vo-reports/ordnance/free-french/1941.txt create mode 100644 vasl_templates/webapp/tests/fixtures/vo-reports/ordnance/free-french/1942.txt create mode 100644 vasl_templates/webapp/tests/fixtures/vo-reports/ordnance/free-french/1943.txt create mode 100644 vasl_templates/webapp/tests/fixtures/vo-reports/ordnance/free-french/1944.txt create mode 100644 vasl_templates/webapp/tests/fixtures/vo-reports/ordnance/free-french/1945.txt create mode 100644 vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/free-french/1940.txt create mode 100644 vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/free-french/1941.txt create mode 100644 vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/free-french/1942.txt create mode 100644 vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/free-french/1943.txt create mode 100644 vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/free-french/1944.txt create mode 100644 vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/free-french/1945.txt diff --git a/vasl_templates/tools/make_chapter_h_placeholders.py b/vasl_templates/tools/make_chapter_h_placeholders.py index 789cccd..429399f 100755 --- a/vasl_templates/tools/make_chapter_h_placeholders.py +++ b/vasl_templates/tools/make_chapter_h_placeholders.py @@ -59,7 +59,7 @@ def make_chapter_h_placeholders( output_fname, log=None \ nat = os.path.splitext( fname2 )[0] if nat == "common": nat = os.path.split( dname2 )[1] - if nat in ("british-commonwealth-forces-korea","cvpa","kpa","us-rok-ounc","un-forces"): + if nat in ("free-french","british-commonwealth-forces-korea","cvpa","kpa","us-rok-ounc","un-forces"): continue notes, ma_notes = load_vo_data( fname, nat ) if nat not in results: diff --git a/vasl_templates/webapp/data/default-template-pack/nationalities.json b/vasl_templates/webapp/data/default-template-pack/nationalities.json index d2ed6ff..d49025a 100644 --- a/vasl_templates/webapp/data/default-template-pack/nationalities.json +++ b/vasl_templates/webapp/data/default-template-pack/nationalities.json @@ -24,6 +24,10 @@ "display_name": "French", "ob_colors": [ "#a2ddff","#41a5ff", "#41a5ff" ] }, +"free-french": { + "display_name": "Free French", + "ob_colors": [ "#a2ddff","#41a5ff", "#41a5ff" ] +}, "italian": { "display_name": "Italian", diff --git a/vasl_templates/webapp/data/ordnance/free-french.json b/vasl_templates/webapp/data/ordnance/free-french.json new file mode 100644 index 0000000..c4c807c --- /dev/null +++ b/vasl_templates/webapp/data/ordnance/free-french.json @@ -0,0 +1,107 @@ +[ + +{ "id": "ff/o:000", + "copy_from": "fr/o:000" +}, +{ "id": "ff/o:001", + "copy_from": "br/o:000", + "note_number": "Fr 22\u20201", + "notes": [ "Fr W\u2020" ] +}, +{ "id": "ff/o:002", + "copy_from": "fr/o:001", + "name": "Mortier de 60 mle 35(f)" +}, +{ "id": "ff/o:003", + "copy_from": "am/o:000", + "note_number": "Fr 22", + "notes": [ "Fr W\u2020" ] +}, +{ "id": "ff/o:004", + "copy_from": "br/o:002", + "note_number": "Fr 22\u20201", + "notes": [ "Fr W\u2020" ] +}, +{ "id": "ff/o:005", + "copy_from": "fr/o:002", + "name": "Mortier de 81 mle 27/31(f)" +}, +{ "id": "ff/o:006", + "copy_from": "am/o:002", + "note_number": "Fr 22", + "notes": [ "Fr D", "Fr Y\u2020" ] +}, +{ "id": "ff/o:007", + "copy_from": "fr/o:003", + "name": "Boys ATR" +}, +{ "id": "ff/o:008", + "copy_from": "br/o:004", + "note_number": "Fr 23\u20201", + "notes": [ "Fr V", "Fr W\u2020" ] +}, +{ "id": "ff/o:009", + "copy_from": "fr/o:005", + "name": "Canon AC de 47 SA 37 APX(f)" +}, +{ "id": "ff/o:010", + "copy_from": "br/o:006", + "note_number": "Fr 24", + "notes": [ "Fr W\u2020" ] +}, +{ "id": "ff/o:011", + "copy_from": "am/o:006", + "note_number": "Fr 24", + "notes": [ "Fr Y\u2020" ] +}, +{ "id": "ff/o:012", + "copy_from": "br/o:010", + "note_number": "Fr 25\u20201", + "notes": [ "Fr V", "Fr W\u2020" ] +}, +{ "id": "ff/o:013", + "copy_from": "br/o:013", + "note_number": "Fr 26\u20201", + "notes": [ "Fr W\u2020" ] +}, +{ "id": "ff/o:014", + "copy_from": "am/o:013", + "note_number": "Fr 27", + "notes": [ "Fr Y\u2020" ] +}, +{ "id": "ff/o:015", + "copy_from": "am/o:014", + "note_number": "Fr 27", + "notes": [ "Fr Y\u2020" ] +}, +{ "id": "ff/o:016", + "copy_from": "br/o:017", + "note_number": "Fr 28\u20201", + "notes": [ "Fr W\u2020" ] +}, +{ "id": "ff/o:017", + "copy_from": "am/o:017", + "note_number": "Fr 29", + "notes": [ "Fr Y\u2020" ] +}, +{ "id": "ff/o:018", + "copy_from": "am/o:018", + "note_number": "Fr 29", + "notes": [ "Fr Y\u2020" ] +}, +{ "id": "ff/o:019", + "copy_from": "fr/o:017", + "name": "Mitrailleuse de 13.2 CAJ" +}, +{ "id": "ff/o:020", + "copy_from": "br/o:022", + "note_number": "Fr 30", + "notes": [ "Fr W\u2020" ] +}, +{ "id": "ff/o:021", + "copy_from": "am/o:023", + "note_number": "Fr 30", + "notes": [ "Fr Y\u2020" ] +} + +] diff --git a/vasl_templates/webapp/data/vehicles/free-french.json b/vasl_templates/webapp/data/vehicles/free-french.json new file mode 100644 index 0000000..e1801df --- /dev/null +++ b/vasl_templates/webapp/data/vehicles/free-french.json @@ -0,0 +1,258 @@ +[ + +{ "id": "ff/v:000", + "name": "H39(f)", + "copy_from": "fr/v:009" +}, +{ "id": "ff/v:002", + "copy_from": "am/v:004", + "note_number": "Fr 37\u20201", + "notes": [ "Fr Y\u2020" ] +}, +{ "id": "ff/v:003", + "copy_from": "fr/v:010", + "name": "H39(L)(f)" +}, +{ "id": "ff/v:004", + "copy_from": "fr/v:012", + "name": "R35(L)(f)" +}, +{ "id": "ff/v:005", + "copy_from": "br/v:017", + "note_number": "Fr 38", + "notes": [ "Fr W\u2020" ] +}, +{ "id": "ff/v:006", + "copy_from": "br/v:019", + "note_number": "Fr 38", + "notes": [ "Fr W\u2020" ] +}, +{ "id": "ff/v:007", + "copy_from": "am/v:007", + "note_number": "Fr 39", + "notes": [ "Fr Y\u2020" ] +}, +{ "id": "ff/v:008", + "copy_from": "am/v:008", + "note_number": "Fr 39\u2020", + "notes": [ "Fr Y\u2020" ] +}, +{ "id": "ff/v:009", + "copy_from": "am/v:009", + "note_number": "Fr 39\u20201", + "notes": [ "Fr Y\u2020" ] +}, +{ "id": "ff/v:010", + "copy_from": "am/v:012", + "note_number": "Fr 40", + "notes": [ "Fr Y\u2020" ] +}, +{ "id": "ff/v:011", + "copy_from": "am/v:016", + "note_number": "Fr 40", + "notes": [ "Fr Y\u2020" ] +}, +{ "id": "ff/v:012", + "copy_from": "am/v:018", + "note_number": "Fr 40", + "notes": [ "Fr Y\u2020" ] +}, +{ "id": "ff/v:013", + "copy_from": "am/v:019", + "note_number": "Fr 40", + "notes": [ "Fr Y\u2020" ] +}, +{ "id": "ff/v:014", + "copy_from": "fr/v:017", + "name": "S35(f)" +}, +{ "id": "ff/v:015", + "copy_from": "fr/v:018", + "name": "B1-bis(f)" +}, +{ "id": "ff/v:016", + "copy_from": "am/v:024", + "note_number": "Fr 41", + "notes": [ "Fr Y\u2020" ] +}, +{ "id": "ff/v:017", + "copy_from": "br/v:059", + "note_number": "Fr 42\u20201", + "notes": [ "Fr W\u2020" ] +}, +{ "id": "ff/v:018", + "copy_from": "fr/v:020" +}, +{ "id": "ff/v:019", + "copy_from": "am/v:041", + "note_number": "Fr 43\u20201", + "notes": [ "Fr Y\u2020" ] +}, +{ "id": "ff/v:020", + "copy_from": "am/v:042", + "note_number": "Fr 43\u20201", + "notes": [ "Fr Y\u2020" ] +}, +{ "id": "ff/v:021", + "copy_from": "br/v:070", + "note_number": "Fr 44", + "notes": [ "Fr W\u2020" ] +}, +{ "id": "ff/v:022", + "copy_from": "br/v:071", + "note_number": "Fr 44", + "notes": [ "Fr W\u2020" ] +}, +{ "id": "ff/v:023", + "copy_from": "br/v:072", + "note_number": "Fr 45", + "notes": [ "Fr W\u2020" ] +}, +{ "id": "ff/v:024", + "copy_from": "am/v:044", + "note_number": "Fr 43", + "notes": [ "Fr Y\u2020" ] +}, +{ "id": "ff/v:025", + "copy_from": "am/v:045", + "note_number": "Fr 46", + "notes": [ "Fr Y\u2020" ] +}, +{ "id": "ff/v:026", + "copy_from": "am/v:046", + "note_number": "Fr 46", + "notes": [ "Fr Y\u2020" ] +}, +{ "id": "ff/v:027", + "copy_from": "am/v:037", + "note_number": "Fr 47", + "notes": [ "Fr Y\u2020" ] +}, +{ "id": "ff/v:028", + "copy_from": "am/v:028", + "note_number": "Fr 47", + "notes": [ "Fr Y\u2020" ] +}, +{ "id": "ff/v:029", + "copy_from": "am/v:029", + "note_number": "Fr 47", + "notes": [ "Fr Y\u2020" ] +}, +{ "id": "ff/v:030", + "copy_from": "br/v:090", + "name": "M5", + "note_number": "Fr 47\u2020", + "notes": [ "Fr U" ], + "gpid": [ 1895 ] +}, +{ "id": "ff/v:031", + "copy_from": "br/v:092", + "name": "M5A1", + "note_number": "Fr 47\u2020", + "notes": [ "Fr U" ], + "gpid": [ 1897 ] +}, +{ "id": "ff/v:032", + "copy_from": "br/v:091", + "name": "M9", + "note_number": "Fr 47\u2020", + "notes": [ "Fr U" ], + "gpid": [ 1903 ] +}, +{ "id": "ff/v:036", + "copy_from": "br/v:094", + "note_number": "Fr 48\u20201", + "notes": [ "Fr W\u2020" ] +}, +{ "id": "ff/v:037", + "copy_from": "br/v:095", + "note_number": "Fr 48\u20201", + "notes": [ "Fr W\u2020" ] +}, +{ "id": "ff/v:038", + "copy_from": "br/v:096", + "note_number": "Fr 48\u20201", + "notes": [ "Fr W\u2020" ] +}, +{ "id": "ff/v:039", + "copy_from": "br/v:097", + "note_number": "Fr 48\u20201", + "notes": [ "Fr W\u2020" ] +}, +{ "id": "ff/v:040", + "copy_from": "fr/v:042" +}, +{ "id": "ff/v:041", + "copy_from": "fr/v:031", + "name": "Ac de 25 CA(f)" +}, +{ "id": "ff/v:042", + "copy_from": "fr/v:026" +}, +{ "id": "ff/v:043", + "copy_from": "fr/v:032" +}, +{ "id": "ff/v:044", + "copy_from": "fr/v:033", + "name": "Ac de 75 mle 13/34(f)" +}, +{ "id": "ff/v:045", + "copy_from": "br/v:118", + "note_number": "Fr 49", + "notes": [ "Fr W\u2020" ] +}, +{ "id": "ff/v:046", + "copy_from": "br/v:122", + "name": "Jeep(a)", + "note_number": "Fr 50\u20201", + "notes": [ "Fr W\u2020" ] +}, +{ "id": "ff/v:047", + "copy_from": "br/v:119", + "note_number": "Fr 50", + "notes": [ "Fr W\u2020" ] +}, +{ "id": "ff/v:048", + "copy_from": "br/v:120", + "note_number": "Fr 50", + "notes": [ "Fr W\u2020" ] +}, +{ "id": "ff/v:049", + "copy_from": "br/v:121", + "note_number": "Fr 50", + "notes": [ "Fr W\u2020" ] +}, +{ "id": "ff/v:050", + "copy_from": "am/v:058", + "name": "Jeep", + "note_number": "Fr 51", + "notes": [ "Fr Y\u2020" ] +}, +{ "id": "ff/v:051", + "copy_from": "am/v:057", + "name": "Jeep GPA", + "note_number": "Fr 51", + "notes": [ "Fr Y\u2020" ] +}, +{ "id": "ff/v:052", + "copy_from": "am/v:059", + "note_number": "Fr 51", + "notes": [ "Fr Y\u2020" ] +}, +{ "id": "ff/v:053", + "copy_from": "am/v:060", + "note_number": "Fr 51", + "notes": [ "Fr Y\u2020" ] +}, +{ "id": "ff/v:054", + "copy_from": "am/v:061", + "note_number": "Fr 51", + "notes": [ "Fr Y\u2020" ] +}, +{ "id": "ff/v:055", + "copy_from": "am/v:062", + "note_number": "Fr 51", + "notes": [ "Fr Y\u2020" ] +} + +] diff --git a/vasl_templates/webapp/data/vehicles/russian.lend-lease.json b/vasl_templates/webapp/data/vehicles/russian.lend-lease.json index 958b36a..3e7f0ac 100644 --- a/vasl_templates/webapp/data/vehicles/russian.lend-lease.json +++ b/vasl_templates/webapp/data/vehicles/russian.lend-lease.json @@ -138,27 +138,27 @@ }, { "id": "ru/v:094", "copy_from": "br/v:123", - "note_number": "Br 85", + "note_number": null, "extra_notes": [ "LL" ] }, { "id": "ru/v:095", "copy_from": "br/v:124", - "note_number": "Br 85", + "note_number": null, "extra_notes": [ "LL" ] }, { "id": "ru/v:096", "copy_from": "br/v:125", - "note_number": "Br 85", + "note_number": null, "extra_notes": [ "LL" ] }, { "id": "ru/v:097", "copy_from": "br/v:126", - "note_number": "Br 85", + "note_number": null, "extra_notes": [ "LL" ] }, { "id": "ru/v:084", "copy_from": "am/v:056", - "note_number": "US 52\u2020", + "note_number": null, "extra_notes": [ "LL" ], "gpid": 7120 } diff --git a/vasl_templates/webapp/static/images/flags/free-french.png b/vasl_templates/webapp/static/images/flags/free-french.png new file mode 100644 index 0000000000000000000000000000000000000000..72e5b6774cf5f550145d0c5875c6ffaa9063b416 GIT binary patch literal 9942 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 NRp}MDO3~`w{{WfJ|Cj&( literal 0 HcmV?d00001 diff --git a/vasl_templates/webapp/static/main.js b/vasl_templates/webapp/static/main.js index 368efef..6dda418 100644 --- a/vasl_templates/webapp/static/main.js +++ b/vasl_templates/webapp/static/main.js @@ -657,7 +657,8 @@ function on_player_change( player_no ) // show/hide the vehicle/ordnance multi-applicable notes controls function update_ma_notes_controls( vo_type ) { var show = ( gVehicleOrdnanceNotes[vo_type] && gVehicleOrdnanceNotes[vo_type][player_nat] ) || - ["allied-minor","axis-minor"].indexOf( gTemplatePack.nationalities[ player_nat ].type ) !== -1 ; + ["allied-minor","axis-minor"].indexOf( gTemplatePack.nationalities[ player_nat ].type ) !== -1 || + player_nat === "free-french" ; var $fieldset = $( "#tabs-ob" + player_no + " fieldset[name='ob_" + vo_type + "_" + player_no ) ; $fieldset.find( ".snippets-notes" ).css( "display", show?"block":"none" ) ; $fieldset.find( "label[for='ob']" ).css( "display", show?"inline-block":"none" ) ; diff --git a/vasl_templates/webapp/static/snippets.js b/vasl_templates/webapp/static/snippets.js index 178e8a2..422c483 100644 --- a/vasl_templates/webapp/static/snippets.js +++ b/vasl_templates/webapp/static/snippets.js @@ -392,7 +392,7 @@ function get_vo_note_key( vo_entry ) if ( ! vo_entry.note_number ) return null ; // NOTE: There are some note numbers of the form "1.2" :-/ We also need to handle redirects. - var match = vo_entry.note_number.match( new RegExp( "^((Br|US) )?([0-9]+(.\\d)?)" ) ) ; + var match = vo_entry.note_number.match( new RegExp( "^((Br|US|Fr) )?([0-9]+(.\\d)?)" ) ) ; if ( ! match ) return null ; var key = match[0] ; @@ -407,7 +407,7 @@ function make_vo_note_key_url( vo_type, nat, key ) return null ; // check for redirects - var match = key.match( /^(Br|US) (.+)$/ ) ; + var match = key.match( /^(Br|US|Fr) (.+)$/ ) ; if ( match ) { nat = MA_NOTE_REDIRECTS[ match[1] ] ; key = match[2] ; diff --git a/vasl_templates/webapp/templates/vo-report.html b/vasl_templates/webapp/templates/vo-report.html index d1ef484..7d3ffe1 100644 --- a/vasl_templates/webapp/templates/vo-report.html +++ b/vasl_templates/webapp/templates/vo-report.html @@ -71,7 +71,8 @@ function load_vo_listings( objs ) buf.push( "", listval(capabilities) ) ; var capabilities = make_capabilities( false, obj, nat, false, theater, year, month, true ) ; buf.push( "", listval(capabilities) ) ; - buf.push( "", "" + fmtval(obj.note_number) + "" ) ; + var note_number = obj.note_number ? "" + fmtval(obj.note_number) + "" : fmtval("") ; + buf.push( "", note_number ) ; buf.push( "", listval(obj.notes) ) ; buf.push( "", obj.comments ? listval(obj.comments) : "" ) ; } diff --git a/vasl_templates/webapp/tests/fixtures/vasl-pieces.txt b/vasl_templates/webapp/tests/fixtures/vasl-pieces.txt index 42c6af9..8619685 100644 --- a/vasl_templates/webapp/tests/fixtures/vasl-pieces.txt +++ b/vasl_templates/webapp/tests/fixtures/vasl-pieces.txt @@ -497,6 +497,9 @@ 1836 Peugeot 202 fr/veh/peugeot 1837 Citroen 23 fr/veh/citroen 1839 Renault AGR2 fr/veh/renagr + 1895 M5 ht fr/veh/m5 + 1897 M5A1 ht fr/veh/m5a1 + 1903 M9 ht fr/veh/m9 1982 40 MTR ch/chM40 ch/chM40b 1983 45* MTR(i) <41 ch/chM45 ch/chM45b 1984 45* MTR(i) ch/chM452 ch/chM45b diff --git a/vasl_templates/webapp/tests/fixtures/vo-reports/ordnance/free-french/1940.txt b/vasl_templates/webapp/tests/fixtures/vo-reports/ordnance/free-french/1940.txt new file mode 100644 index 0000000..854b384 --- /dev/null +++ b/vasl_templates/webapp/tests/fixtures/vo-reports/ordnance/free-french/1940.txt @@ -0,0 +1,26 @@ +=== ordnance/free-french/1940 === + +Name Capabilities (effective) # Notes Comments +--------------------------- ------------------------------ ------------------ --------- -------------------- ---------------------- +LG de 50 mle 37(f) 2PP 2PP Fr 1 Fr A Fr B Fr C† Fr E crewed† +OML 2-in. Mortar 4PP IR[2+]† s7 4PP s7 Fr 22†[1] Fr W† +Mortier de 60 mle 35(f) 5PP no OBA† IR[2+]† 5PP no OBA† Fr 2† Fr A Fr B Fr V +M2 60mm Mortar IR WP7[5] 5PP OBA† IR 5PP OBA† Fr 22 Fr W† +OML 3-in. Mortar QSU IR[2+]†[1] WP7 s8[1+]† QSU WP7 Fr 22†[1] Fr W† +Mortier de 81 mle 27/31(f) QSU s8 QSU s8 Fr 3† Fr A Fr B Fr D Fr V +M1 81mm Mortar QSU WP8 QSU WP8 Fr 22 Fr D Fr Y† +Boys ATR 1PP 1PP Fr 4† Fr B +OQF 25mm Hotchkiss QSU QSU Fr 23†[1] Fr V Fr W† +Canon AC de 47 SA 37 APX(f) QSU APCR only†[1] QSU APCR only†[1] Fr 6†[1] Fr B Fr G† Fr P Fr V +OQF 6-Pounder 7-cwt QSU D6[J4E]7[5]† HE7[F3]8[4+]† QSU Fr 24 Fr W† +M1 57mm AT Gun QSU D4[J4+E]† HE7[J4E]7[5]† QSU Fr 24 Fr Y† +Canon de 75 mle 1897 QSU s8 QSU s8 Fr 25†[1] Fr V Fr W† +OQF 25-Pounder Gun-Howitzer LF [NT, 0 ROF] s8 LF [NT, 0 ROF] s8 Fr 26†[1] Fr W† +M2A1 105mm Howitzer C7[4+P]†[1] H6 WP8 s7 H6 WP8 s7 Fr 27 Fr Y† +M3 105mm Howitzer C7[P]†[1] H7 WP8 s7 H7 WP8 s7 Fr 27 Fr Y† +OBL 5.5-in. Gun-Howitzer Fr 28†[1] Fr W† +M1 155mm Howitzer WP8 s7 WP8 s7 Fr 29 Fr Y† +M1918M1 155mm Gun RFNM AP4†[1] WP8 RFNM AP4†[1] WP8 Fr 29 Fr Y† No IF. +Mitrailleuse de 13.2 CAJ 2 TK DR†[1] 2 TK DR†[1] Fr 18†[1] Fr B Fr G† Fr V Towing NA†1 +OQF 40mm AA LF [40†[1], 2 ROF] LF [40†[1], 2 ROF] Fr 30 Fr W† +M1 40mm AA Gun LF [40†[1], 2 ROF] LF [40†[1], 2 ROF] Fr 30 Fr Y† diff --git a/vasl_templates/webapp/tests/fixtures/vo-reports/ordnance/free-french/1941.txt b/vasl_templates/webapp/tests/fixtures/vo-reports/ordnance/free-french/1941.txt new file mode 100644 index 0000000..93372da --- /dev/null +++ b/vasl_templates/webapp/tests/fixtures/vo-reports/ordnance/free-french/1941.txt @@ -0,0 +1,26 @@ +=== ordnance/free-french/1941 === + +Name Capabilities (effective) # Notes Comments +--------------------------- ------------------------------ ------------------ --------- -------------------- ---------------------- +LG de 50 mle 37(f) 2PP 2PP Fr 1 Fr A Fr B Fr C† Fr E crewed† +OML 2-in. Mortar 4PP IR[2+]† s7 4PP s7 Fr 22†[1] Fr W† +Mortier de 60 mle 35(f) 5PP no OBA† IR[2+]† 5PP no OBA† Fr 2† Fr A Fr B Fr V +M2 60mm Mortar IR WP7[5] 5PP OBA† IR 5PP OBA† Fr 22 Fr W† +OML 3-in. Mortar QSU IR[2+]†[1] WP7 s8[1+]† QSU WP7 s8† Fr 22†[1] Fr W† +Mortier de 81 mle 27/31(f) QSU s8 QSU s8 Fr 3† Fr A Fr B Fr D Fr V +M1 81mm Mortar QSU WP8 QSU WP8 Fr 22 Fr D Fr Y† +Boys ATR 1PP 1PP Fr 4† Fr B +OQF 25mm Hotchkiss QSU QSU Fr 23†[1] Fr V Fr W† +Canon AC de 47 SA 37 APX(f) QSU APCR only†[1] QSU APCR only†[1] Fr 6†[1] Fr B Fr G† Fr P Fr V +OQF 6-Pounder 7-cwt QSU D6[J4E]7[5]† HE7[F3]8[4+]† QSU Fr 24 Fr W† +M1 57mm AT Gun QSU D4[J4+E]† HE7[J4E]7[5]† QSU Fr 24 Fr Y† +Canon de 75 mle 1897 QSU s8 QSU s8 Fr 25†[1] Fr V Fr W† +OQF 25-Pounder Gun-Howitzer LF [NT, 0 ROF] s8 LF [NT, 0 ROF] s8 Fr 26†[1] Fr W† +M2A1 105mm Howitzer C7[4+P]†[1] H6 WP8 s7 H6 WP8 s7 Fr 27 Fr Y† +M3 105mm Howitzer C7[P]†[1] H7 WP8 s7 H7 WP8 s7 Fr 27 Fr Y† +OBL 5.5-in. Gun-Howitzer Fr 28†[1] Fr W† +M1 155mm Howitzer WP8 s7 WP8 s7 Fr 29 Fr Y† +M1918M1 155mm Gun RFNM AP4†[1] WP8 RFNM AP4†[1] WP8 Fr 29 Fr Y† No IF. +Mitrailleuse de 13.2 CAJ 2 TK DR†[1] 2 TK DR†[1] Fr 18†[1] Fr B Fr G† Fr V Towing NA†1 +OQF 40mm AA LF [40†[1], 2 ROF] LF [40†[1], 2 ROF] Fr 30 Fr W† +M1 40mm AA Gun LF [40†[1], 2 ROF] LF [40†[1], 2 ROF] Fr 30 Fr Y† diff --git a/vasl_templates/webapp/tests/fixtures/vo-reports/ordnance/free-french/1942.txt b/vasl_templates/webapp/tests/fixtures/vo-reports/ordnance/free-french/1942.txt new file mode 100644 index 0000000..b8c2c61 --- /dev/null +++ b/vasl_templates/webapp/tests/fixtures/vo-reports/ordnance/free-french/1942.txt @@ -0,0 +1,26 @@ +=== ordnance/free-french/1942 === + +Name Capabilities (effective) # Notes Comments +--------------------------- ------------------------------ ------------------ --------- -------------------- ---------------------- +LG de 50 mle 37(f) 2PP 2PP Fr 1 Fr A Fr B Fr C† Fr E crewed† +OML 2-in. Mortar 4PP IR[2+]† s7 4PP IR† s7 Fr 22†[1] Fr W† +Mortier de 60 mle 35(f) 5PP no OBA† IR[2+]† 5PP no OBA† IR† Fr 2† Fr A Fr B Fr V +M2 60mm Mortar IR WP7[5] 5PP OBA† IR 5PP OBA† Fr 22 Fr W† +OML 3-in. Mortar QSU IR[2+]†[1] WP7 s8[1+]† QSU IR†[1] WP7 s8† Fr 22†[1] Fr W† +Mortier de 81 mle 27/31(f) QSU s8 QSU s8 Fr 3† Fr A Fr B Fr D Fr V +M1 81mm Mortar QSU WP8 QSU WP8 Fr 22 Fr D Fr Y† +Boys ATR 1PP 1PP Fr 4† Fr B +OQF 25mm Hotchkiss QSU QSU Fr 23†[1] Fr V Fr W† +Canon AC de 47 SA 37 APX(f) QSU APCR only†[1] QSU APCR only†[1] Fr 6†[1] Fr B Fr G† Fr P Fr V +OQF 6-Pounder 7-cwt QSU D6[J4E]7[5]† HE7[F3]8[4+]† QSU Fr 24 Fr W† +M1 57mm AT Gun QSU D4[J4+E]† HE7[J4E]7[5]† QSU Fr 24 Fr Y† +Canon de 75 mle 1897 QSU s8 QSU s8 Fr 25†[1] Fr V Fr W† +OQF 25-Pounder Gun-Howitzer LF [NT, 0 ROF] s8 LF [NT, 0 ROF] s8 Fr 26†[1] Fr W† +M2A1 105mm Howitzer C7[4+P]†[1] H6 WP8 s7 H6 WP8 s7 Fr 27 Fr Y† +M3 105mm Howitzer C7[P]†[1] H7 WP8 s7 H7 WP8 s7 Fr 27 Fr Y† +OBL 5.5-in. Gun-Howitzer Fr 28†[1] Fr W† +M1 155mm Howitzer WP8 s7 WP8 s7 Fr 29 Fr Y† +M1918M1 155mm Gun RFNM AP4†[1] WP8 RFNM AP4†[1] WP8 Fr 29 Fr Y† No IF. +Mitrailleuse de 13.2 CAJ 2 TK DR†[1] 2 TK DR†[1] Fr 18†[1] Fr B Fr G† Fr V Towing NA†1 +OQF 40mm AA LF [40†[1], 2 ROF] LF [40†[1], 2 ROF] Fr 30 Fr W† +M1 40mm AA Gun LF [40†[1], 2 ROF] LF [40†[1], 2 ROF] Fr 30 Fr Y† diff --git a/vasl_templates/webapp/tests/fixtures/vo-reports/ordnance/free-french/1943.txt b/vasl_templates/webapp/tests/fixtures/vo-reports/ordnance/free-french/1943.txt new file mode 100644 index 0000000..ea6ea5f --- /dev/null +++ b/vasl_templates/webapp/tests/fixtures/vo-reports/ordnance/free-french/1943.txt @@ -0,0 +1,26 @@ +=== ordnance/free-french/1943 === + +Name Capabilities (effective) # Notes Comments +--------------------------- ------------------------------ ------------------ --------- -------------------- ---------------------- +LG de 50 mle 37(f) 2PP 2PP Fr 1 Fr A Fr B Fr C† Fr E crewed† +OML 2-in. Mortar 4PP IR[2+]† s7 4PP IR† s7 Fr 22†[1] Fr W† +Mortier de 60 mle 35(f) 5PP no OBA† IR[2+]† 5PP no OBA† IR† Fr 2† Fr A Fr B Fr V +M2 60mm Mortar IR WP7[5] 5PP OBA† IR 5PP OBA† Fr 22 Fr W† +OML 3-in. Mortar QSU IR[2+]†[1] WP7 s8[1+]† QSU IR†[1] WP7 s8† Fr 22†[1] Fr W† +Mortier de 81 mle 27/31(f) QSU s8 QSU s8 Fr 3† Fr A Fr B Fr D Fr V +M1 81mm Mortar QSU WP8 QSU WP8 Fr 22 Fr D Fr Y† +Boys ATR 1PP 1PP Fr 4† Fr B +OQF 25mm Hotchkiss QSU QSU Fr 23†[1] Fr V Fr W† +Canon AC de 47 SA 37 APX(f) QSU APCR only†[1] QSU APCR only†[1] Fr 6†[1] Fr B Fr G† Fr P Fr V +OQF 6-Pounder 7-cwt QSU D6[J4E]7[5]† HE7[F3]8[4+]† QSU Fr 24 Fr W† +M1 57mm AT Gun QSU D4[J4+E]† HE7[J4E]7[5]† QSU Fr 24 Fr Y† +Canon de 75 mle 1897 QSU s8 QSU s8 Fr 25†[1] Fr V Fr W† +OQF 25-Pounder Gun-Howitzer LF [NT, 0 ROF] s8 LF [NT, 0 ROF] s8 Fr 26†[1] Fr W† +M2A1 105mm Howitzer C7[4+P]†[1] H6 WP8 s7 H6 WP8 s7 Fr 27 Fr Y† +M3 105mm Howitzer C7[P]†[1] H7 WP8 s7 H7 WP8 s7 Fr 27 Fr Y† +OBL 5.5-in. Gun-Howitzer Fr 28†[1] Fr W† +M1 155mm Howitzer WP8 s7 WP8 s7 Fr 29 Fr Y† +M1918M1 155mm Gun RFNM AP4†[1] WP8 RFNM AP4†[1] WP8 Fr 29 Fr Y† No IF. +Mitrailleuse de 13.2 CAJ 2 TK DR†[1] 2 TK DR†[1] Fr 18†[1] Fr B Fr G† Fr V Towing NA†1 +OQF 40mm AA LF [40†[1], 2 ROF] LF [40†[1], 2 ROF] Fr 30 Fr W† +M1 40mm AA Gun LF [40†[1], 2 ROF] LF [40†[1], 2 ROF] Fr 30 Fr Y† diff --git a/vasl_templates/webapp/tests/fixtures/vo-reports/ordnance/free-french/1944.txt b/vasl_templates/webapp/tests/fixtures/vo-reports/ordnance/free-french/1944.txt new file mode 100644 index 0000000..bf6565b --- /dev/null +++ b/vasl_templates/webapp/tests/fixtures/vo-reports/ordnance/free-french/1944.txt @@ -0,0 +1,26 @@ +=== ordnance/free-french/1944 === + +Name Capabilities (effective) # Notes Comments +--------------------------- ------------------------------ ------------------ --------- -------------------- ---------------------- +LG de 50 mle 37(f) 2PP 2PP Fr 1 Fr A Fr B Fr C† Fr E crewed† +OML 2-in. Mortar 4PP IR[2+]† s7 4PP IR† s7 Fr 22†[1] Fr W† +Mortier de 60 mle 35(f) 5PP no OBA† IR[2+]† 5PP no OBA† IR† Fr 2† Fr A Fr B Fr V +M2 60mm Mortar IR WP7[5] 5PP OBA† IR 5PP OBA† Fr 22 Fr W† +OML 3-in. Mortar QSU IR[2+]†[1] WP7 s8[1+]† QSU IR†[1] WP7 s8† Fr 22†[1] Fr W† +Mortier de 81 mle 27/31(f) QSU s8 QSU s8 Fr 3† Fr A Fr B Fr D Fr V +M1 81mm Mortar QSU WP8 QSU WP8 Fr 22 Fr D Fr Y† +Boys ATR 1PP 1PP Fr 4† Fr B +OQF 25mm Hotchkiss QSU QSU Fr 23†[1] Fr V Fr W† +Canon AC de 47 SA 37 APX(f) QSU APCR only†[1] QSU APCR only†[1] Fr 6†[1] Fr B Fr G† Fr P Fr V +OQF 6-Pounder 7-cwt QSU D6[J4E]7[5]† HE7[F3]8[4+]† QSU HE8† Fr 24 Fr W† +M1 57mm AT Gun QSU D4[J4+E]† HE7[J4E]7[5]† QSU Fr 24 Fr Y† +Canon de 75 mle 1897 QSU s8 QSU s8 Fr 25†[1] Fr V Fr W† +OQF 25-Pounder Gun-Howitzer LF [NT, 0 ROF] s8 LF [NT, 0 ROF] s8 Fr 26†[1] Fr W† +M2A1 105mm Howitzer C7[4+P]†[1] H6 WP8 s7 H6 WP8 s7 Fr 27 Fr Y† +M3 105mm Howitzer C7[P]†[1] H7 WP8 s7 H7 WP8 s7 Fr 27 Fr Y† +OBL 5.5-in. Gun-Howitzer Fr 28†[1] Fr W† +M1 155mm Howitzer WP8 s7 WP8 s7 Fr 29 Fr Y† +M1918M1 155mm Gun RFNM AP4†[1] WP8 RFNM AP4†[1] WP8 Fr 29 Fr Y† No IF. +Mitrailleuse de 13.2 CAJ 2 TK DR†[1] 2 TK DR†[1] Fr 18†[1] Fr B Fr G† Fr V Towing NA†1 +OQF 40mm AA LF [40†[1], 2 ROF] LF [40†[1], 2 ROF] Fr 30 Fr W† +M1 40mm AA Gun LF [40†[1], 2 ROF] LF [40†[1], 2 ROF] Fr 30 Fr Y† diff --git a/vasl_templates/webapp/tests/fixtures/vo-reports/ordnance/free-french/1945.txt b/vasl_templates/webapp/tests/fixtures/vo-reports/ordnance/free-french/1945.txt new file mode 100644 index 0000000..3b298b8 --- /dev/null +++ b/vasl_templates/webapp/tests/fixtures/vo-reports/ordnance/free-french/1945.txt @@ -0,0 +1,26 @@ +=== ordnance/free-french/1945 === + +Name Capabilities (effective) # Notes Comments +--------------------------- ------------------------------ ------------------ --------- -------------------- ---------------------- +LG de 50 mle 37(f) 2PP 2PP Fr 1 Fr A Fr B Fr C† Fr E crewed† +OML 2-in. Mortar 4PP IR[2+]† s7 4PP IR† s7 Fr 22†[1] Fr W† +Mortier de 60 mle 35(f) 5PP no OBA† IR[2+]† 5PP no OBA† IR† Fr 2† Fr A Fr B Fr V +M2 60mm Mortar IR WP7[5] 5PP OBA† IR WP7 5PP OBA† Fr 22 Fr W† +OML 3-in. Mortar QSU IR[2+]†[1] WP7 s8[1+]† QSU IR†[1] WP7 s8† Fr 22†[1] Fr W† +Mortier de 81 mle 27/31(f) QSU s8 QSU s8 Fr 3† Fr A Fr B Fr D Fr V +M1 81mm Mortar QSU WP8 QSU WP8 Fr 22 Fr D Fr Y† +Boys ATR 1PP 1PP Fr 4† Fr B +OQF 25mm Hotchkiss QSU QSU Fr 23†[1] Fr V Fr W† +Canon AC de 47 SA 37 APX(f) QSU APCR only†[1] QSU APCR only†[1] Fr 6†[1] Fr B Fr G† Fr P Fr V +OQF 6-Pounder 7-cwt QSU D6[J4E]7[5]† HE7[F3]8[4+]† QSU D7† HE8† Fr 24 Fr W† +M1 57mm AT Gun QSU D4[J4+E]† HE7[J4E]7[5]† QSU D4† HE7† Fr 24 Fr Y† +Canon de 75 mle 1897 QSU s8 QSU s8 Fr 25†[1] Fr V Fr W† +OQF 25-Pounder Gun-Howitzer LF [NT, 0 ROF] s8 LF [NT, 0 ROF] s8 Fr 26†[1] Fr W† +M2A1 105mm Howitzer C7[4+P]†[1] H6 WP8 s7 H6 WP8 s7 Fr 27 Fr Y† +M3 105mm Howitzer C7[P]†[1] H7 WP8 s7 H7 WP8 s7 Fr 27 Fr Y† +OBL 5.5-in. Gun-Howitzer Fr 28†[1] Fr W† +M1 155mm Howitzer WP8 s7 WP8 s7 Fr 29 Fr Y† +M1918M1 155mm Gun RFNM AP4†[1] WP8 RFNM AP4†[1] WP8 Fr 29 Fr Y† No IF. +Mitrailleuse de 13.2 CAJ 2 TK DR†[1] 2 TK DR†[1] Fr 18†[1] Fr B Fr G† Fr V Towing NA†1 +OQF 40mm AA LF [40†[1], 2 ROF] LF [40†[1], 2 ROF] Fr 30 Fr W† +M1 40mm AA Gun LF [40†[1], 2 ROF] LF [40†[1], 2 ROF] Fr 30 Fr Y† diff --git a/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/free-french/1940.txt b/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/free-french/1940.txt new file mode 100644 index 0000000..dd35fb7 --- /dev/null +++ b/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/free-french/1940.txt @@ -0,0 +1,56 @@ +=== vehicles/free-french/1940 === + +Name Capabilities (effective) # Notes Comments +------------------------ ----------------------------------------- --------------------------------------- --------- -------------------------------------------------------------------------------------- ---------- +H39(f) ® AP10 CS 2 ® AP10 CS 2 Fr 7† Fr A†1 Fr C Fr F +M5A1 C7†[2] CS 4 C7†[2] CS 4 Fr 37†[1] Fr Y† +H39(L)(f) ® AP10 CS 2 ® AP10 CS 2 Fr 8† Fr A†1 Fr C Fr E Fr F +R35(L)(f) ® AP10 CS 2 ® AP10 CS 2 Fr 8† Fr A†1 Fr C Fr E Fr F +Crusader II sM8 CS 4[brewup] sM8 CS 4[brewup] Fr 38 Fr W† +Crusader III HE7[F3+]†[1] sD7 sM8†[2] CS 3[brewup] sD7 sM8†[2] CS 3[brewup] Fr 38 Fr W† +M4 WP7[J4+]†[3] s5[J4+] sM5[4+] CS 5[brewup] CS 5[brewup] Fr 39 Fr Y† +M4A1 WP7[J4+]†[3] s5[J4+] sM5[4+] CS 5[brewup] CS 5[brewup] Fr 39† Fr Y† +M4A2 WP7[J4+]†[2] s5[J4+] sM5[4+] CS 5[brewup] CS 5[brewup] Fr 39†[1] Fr Y† +M4A3(75)W WP7 s5 sM8 CS 6 WP7 s5 sM8 CS 6 Fr 40 Fr Y† +M4A3(76)W A4[A4]5[5]†[2] s5[5] sM8 CS 6 sM8 CS 6 Fr 40 Fr Y† +M4A3(105) C7[P]†[1] H9 WP9 s7 sM8 CS 6 H9 WP9 s7 sM8 CS 6 Fr 40 Fr Y† +M4 Tankdozer WP7 s5 sM6 CS 5[brewup] WP7 s5 sM6 CS 5[brewup] Fr 40 Fr Y† +S35(f) ®9†[1] CS 4 ®9†[1] CS 4 Fr 12† Fr A†3 Fr C Fr F Fr I†2 Fr R†1 +B1-bis(f) ®9†[1] no IF[75]† AP9[75]† CS 5[brewup] ®9†[1] no IF[75]† AP9[75]† CS 5[brewup] Fr 13† Fr A†4 Fr B†3 Fr C Fr E Fr F Fr I†2 Fr R†1 +M10 GMC A5[A4E]6[5E]†[1] s5[5] sP5 CS 7 sP5 CS 7 Fr 41 Fr Y† +Daimler sD4[4+]† CS 2 CS 2 Fr 42†[1] Fr W† +AM Dodge(a) AP10 CS 6† AP10 CS 6† Fr 15† Fr F +M3A1 CS 4 CS 4 Fr 43†[1] Fr Y† +M20 sP5 CS 4 sP5 CS 4 Fr 43†[1] Fr Y† +Marmon-Herrington III ME CS 4 CS 4 Fr 44 Fr W† +Marmon-Herrington IIIv CS 4 CS 4 Fr 44 Fr W† +Humber II sD6 CS 3 sD6 CS 3 Fr 45 Fr W† +M8 C7†[2] sP5 CS 4 C7†[2] sP5 CS 4 Fr 43 Fr Y† +M8 HMC C4[4+]†[1] H9 WP9 CS 5 H9 WP9 CS 5 Fr 46 Fr Y† +M7 HMC C7[P]†[1] H7 WP8 s7 CS 7 H7 WP8 s7 CS 7 Fr 46 Fr Y† +T30 HMC AP7 H5 WP9 CS 4 AP7 H5 WP9 CS 4 Fr 47 Fr Y† +M2 CS 4 CS 4 Fr 47 Fr Y† +M3 CS 5 CS 5 Fr 47 Fr Y† +M5 cs 5†[1] cs 5†[1] Fr 47† Fr U +M5A1 cs 5† cs 5† Fr 47† Fr U +M9 cs 4†[1] cs 4†[1] Fr 47† Fr U +Carrier A sD5[4+]†[1] CS 3 CS 3 Fr 48†[1] Fr W† +Carrier B sD5[4+]†[2] CS 3 CS 3 Fr 48†[1] Fr W† +Carrier C sD5[4+]†[1] CS 3 CS 3 Fr 48†[1] Fr W† +Carrier, MMG A sD5[4+]†[2] CS 3 CS 3 Fr 48†[1] Fr W† +Carrier AC(b) CS 3 CS 3 Fr 31† Fr F Fr M†1 +Ac de 25 CA(f) CS 4 CS 4 Fr 21† Fr F Fr AA†1 +Ac de 75 Conus(b) s8 CS 5 s8 CS 5 Fr 20† Fr F Fr M†1 +Ac de 40 CA(a) CS 4 CS 4 Fr 22 Fr E Fr F Fr M† Fr AA†1 +Ac de 75 mle 13/34(f) CS 7 CS 7 Fr 23† Fr D†1 Fr F Fr AA†2 +Quad FAT CS 5[brewup]† CS 5[brewup]† Fr 49 Fr W† +Jeep(a) cs 2†[1] cs 2†[1] Fr 50†[1] Fr W† +15-cwt Truck cs 5 cs 5 Fr 50 Fr W† +30-cwt Lorry cs 6 cs 6 Fr 50 Fr W† +3-Ton Lorry cs 7 cs 7 Fr 50 Fr W† +Jeep cs 2†[1] cs 2†[1] Fr 51 Fr Y† +Jeep GPA cs 2 cs 2 Fr 51 Fr Y† +¾-Ton cs 4 cs 4 Fr 51 Fr Y† +1½-Ton cs 6 cs 6 Fr 51 Fr Y† +2½-Ton cs 7 cs 7 Fr 51 Fr Y† +7½-Ton cs 7 cs 7 Fr 51 Fr Y† diff --git a/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/free-french/1941.txt b/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/free-french/1941.txt new file mode 100644 index 0000000..5c9c696 --- /dev/null +++ b/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/free-french/1941.txt @@ -0,0 +1,56 @@ +=== vehicles/free-french/1941 === + +Name Capabilities (effective) # Notes Comments +------------------------ ----------------------------------------- --------------------------------------- --------- -------------------------------------------------------------------------------------- ---------- +H39(f) ® AP10 CS 2 ® AP10 CS 2 Fr 7† Fr A†1 Fr C Fr F +M5A1 C7†[2] CS 4 C7†[2] CS 4 Fr 37†[1] Fr Y† +H39(L)(f) ® AP10 CS 2 ® AP10 CS 2 Fr 8† Fr A†1 Fr C Fr E Fr F +R35(L)(f) ® AP10 CS 2 ® AP10 CS 2 Fr 8† Fr A†1 Fr C Fr E Fr F +Crusader II sM8 CS 4[brewup] sM8 CS 4[brewup] Fr 38 Fr W† +Crusader III HE7[F3+]†[1] sD7 sM8†[2] CS 3[brewup] sD7 sM8†[2] CS 3[brewup] Fr 38 Fr W† +M4 WP7[J4+]†[3] s5[J4+] sM5[4+] CS 5[brewup] CS 5[brewup] Fr 39 Fr Y† +M4A1 WP7[J4+]†[3] s5[J4+] sM5[4+] CS 5[brewup] CS 5[brewup] Fr 39† Fr Y† +M4A2 WP7[J4+]†[2] s5[J4+] sM5[4+] CS 5[brewup] CS 5[brewup] Fr 39†[1] Fr Y† +M4A3(75)W WP7 s5 sM8 CS 6 WP7 s5 sM8 CS 6 Fr 40 Fr Y† +M4A3(76)W A4[A4]5[5]†[2] s5[5] sM8 CS 6 sM8 CS 6 Fr 40 Fr Y† +M4A3(105) C7[P]†[1] H9 WP9 s7 sM8 CS 6 H9 WP9 s7 sM8 CS 6 Fr 40 Fr Y† +M4 Tankdozer WP7 s5 sM6 CS 5[brewup] WP7 s5 sM6 CS 5[brewup] Fr 40 Fr Y† +S35(f) ®9†[1] CS 4 ®9†[1] CS 4 Fr 12† Fr A†3 Fr C Fr F Fr I†2 Fr R†1 +B1-bis(f) ®9†[1] no IF[75]† AP9[75]† CS 5[brewup] ®9†[1] no IF[75]† AP9[75]† CS 5[brewup] Fr 13† Fr A†4 Fr B†3 Fr C Fr E Fr F Fr I†2 Fr R†1 +M10 GMC A5[A4E]6[5E]†[1] s5[5] sP5 CS 7 sP5 CS 7 Fr 41 Fr Y† +Daimler sD4[4+]† CS 2 CS 2 Fr 42†[1] Fr W† +AM Dodge(a) AP10 CS 6† AP10 CS 6† Fr 15† Fr F +M3A1 CS 4 CS 4 Fr 43†[1] Fr Y† +M20 sP5 CS 4 sP5 CS 4 Fr 43†[1] Fr Y† +Marmon-Herrington III ME CS 4 CS 4 Fr 44 Fr W† +Marmon-Herrington IIIv CS 4 CS 4 Fr 44 Fr W† +Humber II sD6 CS 3 sD6 CS 3 Fr 45 Fr W† +M8 C7†[2] sP5 CS 4 C7†[2] sP5 CS 4 Fr 43 Fr Y† +M8 HMC C4[4+]†[1] H9 WP9 CS 5 H9 WP9 CS 5 Fr 46 Fr Y† +M7 HMC C7[P]†[1] H7 WP8 s7 CS 7 H7 WP8 s7 CS 7 Fr 46 Fr Y† +T30 HMC AP7 H5 WP9 CS 4 AP7 H5 WP9 CS 4 Fr 47 Fr Y† +M2 CS 4 CS 4 Fr 47 Fr Y† +M3 CS 5 CS 5 Fr 47 Fr Y† +M5 cs 5†[1] cs 5†[1] Fr 47† Fr U +M5A1 cs 5† cs 5† Fr 47† Fr U +M9 cs 4†[1] cs 4†[1] Fr 47† Fr U +Carrier A sD5[4+]†[1] CS 3 CS 3 Fr 48†[1] Fr W† +Carrier B sD5[4+]†[2] CS 3 CS 3 Fr 48†[1] Fr W† +Carrier C sD5[4+]†[1] CS 3 CS 3 Fr 48†[1] Fr W† +Carrier, MMG A sD5[4+]†[2] CS 3 CS 3 Fr 48†[1] Fr W† +Carrier AC(b) CS 3 CS 3 Fr 31† Fr F Fr M†1 +Ac de 25 CA(f) CS 4 CS 4 Fr 21† Fr F Fr AA†1 +Ac de 75 Conus(b) s8 CS 5 s8 CS 5 Fr 20† Fr F Fr M†1 +Ac de 40 CA(a) CS 4 CS 4 Fr 22 Fr E Fr F Fr M† Fr AA†1 +Ac de 75 mle 13/34(f) CS 7 CS 7 Fr 23† Fr D†1 Fr F Fr AA†2 +Quad FAT CS 5[brewup]† CS 5[brewup]† Fr 49 Fr W† +Jeep(a) cs 2†[1] cs 2†[1] Fr 50†[1] Fr W† +15-cwt Truck cs 5 cs 5 Fr 50 Fr W† +30-cwt Lorry cs 6 cs 6 Fr 50 Fr W† +3-Ton Lorry cs 7 cs 7 Fr 50 Fr W† +Jeep cs 2†[1] cs 2†[1] Fr 51 Fr Y† +Jeep GPA cs 2 cs 2 Fr 51 Fr Y† +¾-Ton cs 4 cs 4 Fr 51 Fr Y† +1½-Ton cs 6 cs 6 Fr 51 Fr Y† +2½-Ton cs 7 cs 7 Fr 51 Fr Y† +7½-Ton cs 7 cs 7 Fr 51 Fr Y† diff --git a/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/free-french/1942.txt b/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/free-french/1942.txt new file mode 100644 index 0000000..dbe2341 --- /dev/null +++ b/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/free-french/1942.txt @@ -0,0 +1,56 @@ +=== vehicles/free-french/1942 === + +Name Capabilities (effective) # Notes Comments +------------------------ ----------------------------------------- --------------------------------------- --------- -------------------------------------------------------------------------------------- ---------- +H39(f) ® AP10 CS 2 ® AP10 CS 2 Fr 7† Fr A†1 Fr C Fr F +M5A1 C7†[2] CS 4 C7†[2] CS 4 Fr 37†[1] Fr Y† +H39(L)(f) ® AP10 CS 2 ® AP10 CS 2 Fr 8† Fr A†1 Fr C Fr E Fr F +R35(L)(f) ® AP10 CS 2 ® AP10 CS 2 Fr 8† Fr A†1 Fr C Fr E Fr F +Crusader II sM8 CS 4[brewup] sM8 CS 4[brewup] Fr 38 Fr W† +Crusader III HE7[F3+]†[1] sD7 sM8†[2] CS 3[brewup] sD7 sM8†[2] CS 3[brewup] Fr 38 Fr W† +M4 WP7[J4+]†[3] s5[J4+] sM5[4+] CS 5[brewup] CS 5[brewup] Fr 39 Fr Y† +M4A1 WP7[J4+]†[3] s5[J4+] sM5[4+] CS 5[brewup] CS 5[brewup] Fr 39† Fr Y† +M4A2 WP7[J4+]†[2] s5[J4+] sM5[4+] CS 5[brewup] CS 5[brewup] Fr 39†[1] Fr Y† +M4A3(75)W WP7 s5 sM8 CS 6 WP7 s5 sM8 CS 6 Fr 40 Fr Y† +M4A3(76)W A4[A4]5[5]†[2] s5[5] sM8 CS 6 sM8 CS 6 Fr 40 Fr Y† +M4A3(105) C7[P]†[1] H9 WP9 s7 sM8 CS 6 H9 WP9 s7 sM8 CS 6 Fr 40 Fr Y† +M4 Tankdozer WP7 s5 sM6 CS 5[brewup] WP7 s5 sM6 CS 5[brewup] Fr 40 Fr Y† +S35(f) ®9†[1] CS 4 ®9†[1] CS 4 Fr 12† Fr A†3 Fr C Fr F Fr I†2 Fr R†1 +B1-bis(f) ®9†[1] no IF[75]† AP9[75]† CS 5[brewup] ®9†[1] no IF[75]† AP9[75]† CS 5[brewup] Fr 13† Fr A†4 Fr B†3 Fr C Fr E Fr F Fr I†2 Fr R†1 +M10 GMC A5[A4E]6[5E]†[1] s5[5] sP5 CS 7 sP5 CS 7 Fr 41 Fr Y† +Daimler sD4[4+]† CS 2 CS 2 Fr 42†[1] Fr W† +AM Dodge(a) AP10 CS 6† AP10 CS 6† Fr 15† Fr F +M3A1 CS 4 CS 4 Fr 43†[1] Fr Y† +M20 sP5 CS 4 sP5 CS 4 Fr 43†[1] Fr Y† +Marmon-Herrington III ME CS 4 CS 4 Fr 44 Fr W† +Marmon-Herrington IIIv CS 4 CS 4 Fr 44 Fr W† +Humber II sD6 CS 3 sD6 CS 3 Fr 45 Fr W† +M8 C7†[2] sP5 CS 4 C7†[2] sP5 CS 4 Fr 43 Fr Y† +M8 HMC C4[4+]†[1] H9 WP9 CS 5 H9 WP9 CS 5 Fr 46 Fr Y† +M7 HMC C7[P]†[1] H7 WP8 s7 CS 7 H7 WP8 s7 CS 7 Fr 46 Fr Y† +T30 HMC AP7 H5 WP9 CS 4 AP7 H5 WP9 CS 4 Fr 47 Fr Y† +M2 CS 4 CS 4 Fr 47 Fr Y† +M3 CS 5 CS 5 Fr 47 Fr Y† +M5 cs 5†[1] cs 5†[1] Fr 47† Fr U +M5A1 cs 5† cs 5† Fr 47† Fr U +M9 cs 4†[1] cs 4†[1] Fr 47† Fr U +Carrier A sD5[4+]†[1] CS 3 CS 3 Fr 48†[1] Fr W† +Carrier B sD5[4+]†[2] CS 3 CS 3 Fr 48†[1] Fr W† +Carrier C sD5[4+]†[1] CS 3 CS 3 Fr 48†[1] Fr W† +Carrier, MMG A sD5[4+]†[2] CS 3 CS 3 Fr 48†[1] Fr W† +Carrier AC(b) CS 3 CS 3 Fr 31† Fr F Fr M†1 +Ac de 25 CA(f) CS 4 CS 4 Fr 21† Fr F Fr AA†1 +Ac de 75 Conus(b) s8 CS 5 s8 CS 5 Fr 20† Fr F Fr M†1 +Ac de 40 CA(a) CS 4 CS 4 Fr 22 Fr E Fr F Fr M† Fr AA†1 +Ac de 75 mle 13/34(f) CS 7 CS 7 Fr 23† Fr D†1 Fr F Fr AA†2 +Quad FAT CS 5[brewup]† CS 5[brewup]† Fr 49 Fr W† +Jeep(a) cs 2†[1] cs 2†[1] Fr 50†[1] Fr W† +15-cwt Truck cs 5 cs 5 Fr 50 Fr W† +30-cwt Lorry cs 6 cs 6 Fr 50 Fr W† +3-Ton Lorry cs 7 cs 7 Fr 50 Fr W† +Jeep cs 2†[1] cs 2†[1] Fr 51 Fr Y† +Jeep GPA cs 2 cs 2 Fr 51 Fr Y† +¾-Ton cs 4 cs 4 Fr 51 Fr Y† +1½-Ton cs 6 cs 6 Fr 51 Fr Y† +2½-Ton cs 7 cs 7 Fr 51 Fr Y† +7½-Ton cs 7 cs 7 Fr 51 Fr Y† diff --git a/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/free-french/1943.txt b/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/free-french/1943.txt new file mode 100644 index 0000000..01898f3 --- /dev/null +++ b/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/free-french/1943.txt @@ -0,0 +1,56 @@ +=== vehicles/free-french/1943 === + +Name Capabilities (effective) # Notes Comments +------------------------ ----------------------------------------- --------------------------------------- --------- -------------------------------------------------------------------------------------- ---------- +H39(f) ® AP10 CS 2 ® AP10 CS 2 Fr 7† Fr A†1 Fr C Fr F +M5A1 C7†[2] CS 4 C7†[2] CS 4 Fr 37†[1] Fr Y† +H39(L)(f) ® AP10 CS 2 ® AP10 CS 2 Fr 8† Fr A†1 Fr C Fr E Fr F +R35(L)(f) ® AP10 CS 2 ® AP10 CS 2 Fr 8† Fr A†1 Fr C Fr E Fr F +Crusader II sM8 CS 4[brewup] sM8 CS 4[brewup] Fr 38 Fr W† +Crusader III HE7[F3+]†[1] sD7 sM8†[2] CS 3[brewup] sD7 sM8†[2] CS 3[brewup] Fr 38 Fr W† +M4 WP7[J4+]†[3] s5[J4+] sM5[4+] CS 5[brewup] CS 5[brewup] Fr 39 Fr Y† +M4A1 WP7[J4+]†[3] s5[J4+] sM5[4+] CS 5[brewup] CS 5[brewup] Fr 39† Fr Y† +M4A2 WP7[J4+]†[2] s5[J4+] sM5[4+] CS 5[brewup] CS 5[brewup] Fr 39†[1] Fr Y† +M4A3(75)W WP7 s5 sM8 CS 6 WP7 s5 sM8 CS 6 Fr 40 Fr Y† +M4A3(76)W A4[A4]5[5]†[2] s5[5] sM8 CS 6 sM8 CS 6 Fr 40 Fr Y† +M4A3(105) C7[P]†[1] H9 WP9 s7 sM8 CS 6 H9 WP9 s7 sM8 CS 6 Fr 40 Fr Y† +M4 Tankdozer WP7 s5 sM6 CS 5[brewup] WP7 s5 sM6 CS 5[brewup] Fr 40 Fr Y† +S35(f) ®9†[1] CS 4 ®9†[1] CS 4 Fr 12† Fr A†3 Fr C Fr F Fr I†2 Fr R†1 +B1-bis(f) ®9†[1] no IF[75]† AP9[75]† CS 5[brewup] ®9†[1] no IF[75]† AP9[75]† CS 5[brewup] Fr 13† Fr A†4 Fr B†3 Fr C Fr E Fr F Fr I†2 Fr R†1 +M10 GMC A5[A4E]6[5E]†[1] s5[5] sP5 CS 7 sP5 CS 7 Fr 41 Fr Y† +Daimler sD4[4+]† CS 2 CS 2 Fr 42†[1] Fr W† +AM Dodge(a) AP10 CS 6† AP10 CS 6† Fr 15† Fr F +M3A1 CS 4 CS 4 Fr 43†[1] Fr Y† +M20 sP5 CS 4 sP5 CS 4 Fr 43†[1] Fr Y† +Marmon-Herrington III ME CS 4 CS 4 Fr 44 Fr W† +Marmon-Herrington IIIv CS 4 CS 4 Fr 44 Fr W† +Humber II sD6 CS 3 sD6 CS 3 Fr 45 Fr W† +M8 C7†[2] sP5 CS 4 C7†[2] sP5 CS 4 Fr 43 Fr Y† +M8 HMC C4[4+]†[1] H9 WP9 CS 5 H9 WP9 CS 5 Fr 46 Fr Y† +M7 HMC C7[P]†[1] H7 WP8 s7 CS 7 H7 WP8 s7 CS 7 Fr 46 Fr Y† +T30 HMC AP7 H5 WP9 CS 4 AP7 H5 WP9 CS 4 Fr 47 Fr Y† +M2 CS 4 CS 4 Fr 47 Fr Y† +M3 CS 5 CS 5 Fr 47 Fr Y† +M5 cs 5†[1] cs 5†[1] Fr 47† Fr U +M5A1 cs 5† cs 5† Fr 47† Fr U +M9 cs 4†[1] cs 4†[1] Fr 47† Fr U +Carrier A sD5[4+]†[1] CS 3 CS 3 Fr 48†[1] Fr W† +Carrier B sD5[4+]†[2] CS 3 CS 3 Fr 48†[1] Fr W† +Carrier C sD5[4+]†[1] CS 3 CS 3 Fr 48†[1] Fr W† +Carrier, MMG A sD5[4+]†[2] CS 3 CS 3 Fr 48†[1] Fr W† +Carrier AC(b) CS 3 CS 3 Fr 31† Fr F Fr M†1 +Ac de 25 CA(f) CS 4 CS 4 Fr 21† Fr F Fr AA†1 +Ac de 75 Conus(b) s8 CS 5 s8 CS 5 Fr 20† Fr F Fr M†1 +Ac de 40 CA(a) CS 4 CS 4 Fr 22 Fr E Fr F Fr M† Fr AA†1 +Ac de 75 mle 13/34(f) CS 7 CS 7 Fr 23† Fr D†1 Fr F Fr AA†2 +Quad FAT CS 5[brewup]† CS 5[brewup]† Fr 49 Fr W† +Jeep(a) cs 2†[1] cs 2†[1] Fr 50†[1] Fr W† +15-cwt Truck cs 5 cs 5 Fr 50 Fr W† +30-cwt Lorry cs 6 cs 6 Fr 50 Fr W† +3-Ton Lorry cs 7 cs 7 Fr 50 Fr W† +Jeep cs 2†[1] cs 2†[1] Fr 51 Fr Y† +Jeep GPA cs 2 cs 2 Fr 51 Fr Y† +¾-Ton cs 4 cs 4 Fr 51 Fr Y† +1½-Ton cs 6 cs 6 Fr 51 Fr Y† +2½-Ton cs 7 cs 7 Fr 51 Fr Y† +7½-Ton cs 7 cs 7 Fr 51 Fr Y† diff --git a/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/free-french/1944.txt b/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/free-french/1944.txt new file mode 100644 index 0000000..6489e13 --- /dev/null +++ b/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/free-french/1944.txt @@ -0,0 +1,56 @@ +=== vehicles/free-french/1944 === + +Name Capabilities (effective) # Notes Comments +------------------------ ----------------------------------------- --------------------------------------- --------- -------------------------------------------------------------------------------------- ---------- +H39(f) ® AP10 CS 2 ® AP10 CS 2 Fr 7† Fr A†1 Fr C Fr F +M5A1 C7†[2] CS 4 C7†[2] CS 4 Fr 37†[1] Fr Y† +H39(L)(f) ® AP10 CS 2 ® AP10 CS 2 Fr 8† Fr A†1 Fr C Fr E Fr F +R35(L)(f) ® AP10 CS 2 ® AP10 CS 2 Fr 8† Fr A†1 Fr C Fr E Fr F +Crusader II sM8 CS 4[brewup] sM8 CS 4[brewup] Fr 38 Fr W† +Crusader III HE7[F3+]†[1] sD7 sM8†[2] CS 3[brewup] HE7†[1] sD7 sM8†[2] CS 3[brewup] Fr 38 Fr W† +M4 WP7[J4+]†[3] s5[J4+] sM5[4+] CS 5[brewup] sM5 CS 5[brewup] Fr 39 Fr Y† +M4A1 WP7[J4+]†[3] s5[J4+] sM5[4+] CS 5[brewup] sM5 CS 5[brewup] Fr 39† Fr Y† +M4A2 WP7[J4+]†[2] s5[J4+] sM5[4+] CS 5[brewup] sM5 CS 5[brewup] Fr 39†[1] Fr Y† +M4A3(75)W WP7 s5 sM8 CS 6 WP7 s5 sM8 CS 6 Fr 40 Fr Y† +M4A3(76)W A4[A4]5[5]†[2] s5[5] sM8 CS 6 sM8 CS 6 Fr 40 Fr Y† +M4A3(105) C7[P]†[1] H9 WP9 s7 sM8 CS 6 H9 WP9 s7 sM8 CS 6 Fr 40 Fr Y† +M4 Tankdozer WP7 s5 sM6 CS 5[brewup] WP7 s5 sM6 CS 5[brewup] Fr 40 Fr Y† +S35(f) ®9†[1] CS 4 ®9†[1] CS 4 Fr 12† Fr A†3 Fr C Fr F Fr I†2 Fr R†1 +B1-bis(f) ®9†[1] no IF[75]† AP9[75]† CS 5[brewup] ®9†[1] no IF[75]† AP9[75]† CS 5[brewup] Fr 13† Fr A†4 Fr B†3 Fr C Fr E Fr F Fr I†2 Fr R†1 +M10 GMC A5[A4E]6[5E]†[1] s5[5] sP5 CS 7 sP5 CS 7 Fr 41 Fr Y† +Daimler sD4[4+]† CS 2 sD4† CS 2 Fr 42†[1] Fr W† +AM Dodge(a) AP10 CS 6† AP10 CS 6† Fr 15† Fr F +M3A1 CS 4 CS 4 Fr 43†[1] Fr Y† +M20 sP5 CS 4 sP5 CS 4 Fr 43†[1] Fr Y† +Marmon-Herrington III ME CS 4 CS 4 Fr 44 Fr W† +Marmon-Herrington IIIv CS 4 CS 4 Fr 44 Fr W† +Humber II sD6 CS 3 sD6 CS 3 Fr 45 Fr W† +M8 C7†[2] sP5 CS 4 C7†[2] sP5 CS 4 Fr 43 Fr Y† +M8 HMC C4[4+]†[1] H9 WP9 CS 5 C4†[1] H9 WP9 CS 5 Fr 46 Fr Y† +M7 HMC C7[P]†[1] H7 WP8 s7 CS 7 H7 WP8 s7 CS 7 Fr 46 Fr Y† +T30 HMC AP7 H5 WP9 CS 4 AP7 H5 WP9 CS 4 Fr 47 Fr Y† +M2 CS 4 CS 4 Fr 47 Fr Y† +M3 CS 5 CS 5 Fr 47 Fr Y† +M5 cs 5†[1] cs 5†[1] Fr 47† Fr U +M5A1 cs 5† cs 5† Fr 47† Fr U +M9 cs 4†[1] cs 4†[1] Fr 47† Fr U +Carrier A sD5[4+]†[1] CS 3 sD5†[1] CS 3 Fr 48†[1] Fr W† +Carrier B sD5[4+]†[2] CS 3 sD5†[2] CS 3 Fr 48†[1] Fr W† +Carrier C sD5[4+]†[1] CS 3 sD5†[1] CS 3 Fr 48†[1] Fr W† +Carrier, MMG A sD5[4+]†[2] CS 3 sD5†[2] CS 3 Fr 48†[1] Fr W† +Carrier AC(b) CS 3 CS 3 Fr 31† Fr F Fr M†1 +Ac de 25 CA(f) CS 4 CS 4 Fr 21† Fr F Fr AA†1 +Ac de 75 Conus(b) s8 CS 5 s8 CS 5 Fr 20† Fr F Fr M†1 +Ac de 40 CA(a) CS 4 CS 4 Fr 22 Fr E Fr F Fr M† Fr AA†1 +Ac de 75 mle 13/34(f) CS 7 CS 7 Fr 23† Fr D†1 Fr F Fr AA†2 +Quad FAT CS 5[brewup]† CS 5[brewup]† Fr 49 Fr W† +Jeep(a) cs 2†[1] cs 2†[1] Fr 50†[1] Fr W† +15-cwt Truck cs 5 cs 5 Fr 50 Fr W† +30-cwt Lorry cs 6 cs 6 Fr 50 Fr W† +3-Ton Lorry cs 7 cs 7 Fr 50 Fr W† +Jeep cs 2†[1] cs 2†[1] Fr 51 Fr Y† +Jeep GPA cs 2 cs 2 Fr 51 Fr Y† +¾-Ton cs 4 cs 4 Fr 51 Fr Y† +1½-Ton cs 6 cs 6 Fr 51 Fr Y† +2½-Ton cs 7 cs 7 Fr 51 Fr Y† +7½-Ton cs 7 cs 7 Fr 51 Fr Y† diff --git a/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/free-french/1945.txt b/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/free-french/1945.txt new file mode 100644 index 0000000..622c295 --- /dev/null +++ b/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/free-french/1945.txt @@ -0,0 +1,56 @@ +=== vehicles/free-french/1945 === + +Name Capabilities (effective) # Notes Comments +------------------------ ----------------------------------------- --------------------------------------- --------- -------------------------------------------------------------------------------------- ---------- +H39(f) ® AP10 CS 2 ® AP10 CS 2 Fr 7† Fr A†1 Fr C Fr F +M5A1 C7†[2] CS 4 C7†[2] CS 4 Fr 37†[1] Fr Y† +H39(L)(f) ® AP10 CS 2 ® AP10 CS 2 Fr 8† Fr A†1 Fr C Fr E Fr F +R35(L)(f) ® AP10 CS 2 ® AP10 CS 2 Fr 8† Fr A†1 Fr C Fr E Fr F +Crusader II sM8 CS 4[brewup] sM8 CS 4[brewup] Fr 38 Fr W† +Crusader III HE7[F3+]†[1] sD7 sM8†[2] CS 3[brewup] HE7†[1] sD7 sM8†[2] CS 3[brewup] Fr 38 Fr W† +M4 WP7[J4+]†[3] s5[J4+] sM5[4+] CS 5[brewup] WP7†[3] s5 sM5 CS 5[brewup] Fr 39 Fr Y† +M4A1 WP7[J4+]†[3] s5[J4+] sM5[4+] CS 5[brewup] WP7†[3] s5 sM5 CS 5[brewup] Fr 39† Fr Y† +M4A2 WP7[J4+]†[2] s5[J4+] sM5[4+] CS 5[brewup] WP7†[2] s5 sM5 CS 5[brewup] Fr 39†[1] Fr Y† +M4A3(75)W WP7 s5 sM8 CS 6 WP7 s5 sM8 CS 6 Fr 40 Fr Y† +M4A3(76)W A4[A4]5[5]†[2] s5[5] sM8 CS 6 A5†[2] s5 sM8 CS 6 Fr 40 Fr Y† +M4A3(105) C7[P]†[1] H9 WP9 s7 sM8 CS 6 H9 WP9 s7 sM8 CS 6 Fr 40 Fr Y† +M4 Tankdozer WP7 s5 sM6 CS 5[brewup] WP7 s5 sM6 CS 5[brewup] Fr 40 Fr Y† +S35(f) ®9†[1] CS 4 ®9†[1] CS 4 Fr 12† Fr A†3 Fr C Fr F Fr I†2 Fr R†1 +B1-bis(f) ®9†[1] no IF[75]† AP9[75]† CS 5[brewup] ®9†[1] no IF[75]† AP9[75]† CS 5[brewup] Fr 13† Fr A†4 Fr B†3 Fr C Fr E Fr F Fr I†2 Fr R†1 +M10 GMC A5[A4E]6[5E]†[1] s5[5] sP5 CS 7 A6†[1] s5 sP5 CS 7 Fr 41 Fr Y† +Daimler sD4[4+]† CS 2 sD4† CS 2 Fr 42†[1] Fr W† +AM Dodge(a) AP10 CS 6† AP10 CS 6† Fr 15† Fr F +M3A1 CS 4 CS 4 Fr 43†[1] Fr Y† +M20 sP5 CS 4 sP5 CS 4 Fr 43†[1] Fr Y† +Marmon-Herrington III ME CS 4 CS 4 Fr 44 Fr W† +Marmon-Herrington IIIv CS 4 CS 4 Fr 44 Fr W† +Humber II sD6 CS 3 sD6 CS 3 Fr 45 Fr W† +M8 C7†[2] sP5 CS 4 C7†[2] sP5 CS 4 Fr 43 Fr Y† +M8 HMC C4[4+]†[1] H9 WP9 CS 5 C4†[1] H9 WP9 CS 5 Fr 46 Fr Y† +M7 HMC C7[P]†[1] H7 WP8 s7 CS 7 H7 WP8 s7 CS 7 Fr 46 Fr Y† +T30 HMC AP7 H5 WP9 CS 4 AP7 H5 WP9 CS 4 Fr 47 Fr Y† +M2 CS 4 CS 4 Fr 47 Fr Y† +M3 CS 5 CS 5 Fr 47 Fr Y† +M5 cs 5†[1] cs 5†[1] Fr 47† Fr U +M5A1 cs 5† cs 5† Fr 47† Fr U +M9 cs 4†[1] cs 4†[1] Fr 47† Fr U +Carrier A sD5[4+]†[1] CS 3 sD5†[1] CS 3 Fr 48†[1] Fr W† +Carrier B sD5[4+]†[2] CS 3 sD5†[2] CS 3 Fr 48†[1] Fr W† +Carrier C sD5[4+]†[1] CS 3 sD5†[1] CS 3 Fr 48†[1] Fr W† +Carrier, MMG A sD5[4+]†[2] CS 3 sD5†[2] CS 3 Fr 48†[1] Fr W† +Carrier AC(b) CS 3 CS 3 Fr 31† Fr F Fr M†1 +Ac de 25 CA(f) CS 4 CS 4 Fr 21† Fr F Fr AA†1 +Ac de 75 Conus(b) s8 CS 5 s8 CS 5 Fr 20† Fr F Fr M†1 +Ac de 40 CA(a) CS 4 CS 4 Fr 22 Fr E Fr F Fr M† Fr AA†1 +Ac de 75 mle 13/34(f) CS 7 CS 7 Fr 23† Fr D†1 Fr F Fr AA†2 +Quad FAT CS 5[brewup]† CS 5[brewup]† Fr 49 Fr W† +Jeep(a) cs 2†[1] cs 2†[1] Fr 50†[1] Fr W† +15-cwt Truck cs 5 cs 5 Fr 50 Fr W† +30-cwt Lorry cs 6 cs 6 Fr 50 Fr W† +3-Ton Lorry cs 7 cs 7 Fr 50 Fr W† +Jeep cs 2†[1] cs 2†[1] Fr 51 Fr Y† +Jeep GPA cs 2 cs 2 Fr 51 Fr Y† +¾-Ton cs 4 cs 4 Fr 51 Fr Y† +1½-Ton cs 6 cs 6 Fr 51 Fr Y† +2½-Ton cs 7 cs 7 Fr 51 Fr Y† +7½-Ton cs 7 cs 7 Fr 51 Fr Y† diff --git a/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/russian/1940.txt b/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/russian/1940.txt index 1e6fe36..b7c440c 100644 --- a/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/russian/1940.txt +++ b/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/russian/1940.txt @@ -95,11 +95,11 @@ Carrier C sD5[4+]†[1] CS 3 CS 3 Carrier, MMG A sD5[4+]†[2] CS 3 CS 3 57 Br N Br P Br Q†1 Br U†2 LL Carrier, MMG B sD5[4+]†[2] CS 4 CS 4 57 Br U†2 Br BB†1 LL Jeep(a) cs 2 cs 2 58 H† L†1 LL -¾-Ton Truck(a) cs 4 cs 4 Br 85 Br A Br N LL -1½-Ton Truck(a) cs 6 cs 6 Br 85 Br A Br N LL -2½-Ton Truck(a) cs 7 cs 7 Br 85 Br A Br N LL -7½-Ton Truck(a) cs 7 cs 7 Br 85 Br A Br N LL -DUKW cs 7†[1] cs 7†[1] US 52† US D†3 US O†2 US CC†1 LL +¾-Ton Truck(a) cs 4 cs 4 n/a Br A Br N LL +1½-Ton Truck(a) cs 6 cs 6 n/a Br A Br N LL +2½-Ton Truck(a) cs 7 cs 7 n/a Br A Br N LL +7½-Ton Truck(a) cs 7 cs 7 n/a Br A Br N LL +DUKW cs 7†[1] cs 7†[1] n/a US D†3 US O†2 US CC†1 LL BT-2A ® C5†[2] CS 3 ® C5†[2] CS 3 1† C†2 Ru M†1 CMG 2:00 from MA BT-2A(L) ® C6†[2] CS 3 ® C6†[2] CS 3 2† C†2 Ru M†1 BT-2B ® CS 3 ® CS 3 3† Ru M†1 2 TK DR (MG) diff --git a/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/russian/1941.txt b/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/russian/1941.txt index 33a93f3..75b2033 100644 --- a/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/russian/1941.txt +++ b/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/russian/1941.txt @@ -95,11 +95,11 @@ Carrier C sD5[4+]†[1] CS 3 CS 3 Carrier, MMG A sD5[4+]†[2] CS 3 CS 3 57 Br N Br P Br Q†1 Br U†2 LL Carrier, MMG B sD5[4+]†[2] CS 4 CS 4 57 Br U†2 Br BB†1 LL Jeep(a) cs 2 cs 2 58 H† L†1 LL -¾-Ton Truck(a) cs 4 cs 4 Br 85 Br A Br N LL -1½-Ton Truck(a) cs 6 cs 6 Br 85 Br A Br N LL -2½-Ton Truck(a) cs 7 cs 7 Br 85 Br A Br N LL -7½-Ton Truck(a) cs 7 cs 7 Br 85 Br A Br N LL -DUKW cs 7†[1] cs 7†[1] US 52† US D†3 US O†2 US CC†1 LL +¾-Ton Truck(a) cs 4 cs 4 n/a Br A Br N LL +1½-Ton Truck(a) cs 6 cs 6 n/a Br A Br N LL +2½-Ton Truck(a) cs 7 cs 7 n/a Br A Br N LL +7½-Ton Truck(a) cs 7 cs 7 n/a Br A Br N LL +DUKW cs 7†[1] cs 7†[1] n/a US D†3 US O†2 US CC†1 LL BT-2A ® C5†[2] CS 3 ® C5†[2] CS 3 1† C†2 Ru M†1 CMG 2:00 from MA BT-2A(L) ® C6†[2] CS 3 ® C6†[2] CS 3 2† C†2 Ru M†1 BT-2B ® CS 3 ® CS 3 3† Ru M†1 2 TK DR (MG) diff --git a/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/russian/1942.txt b/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/russian/1942.txt index a7da671..9eb51f2 100644 --- a/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/russian/1942.txt +++ b/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/russian/1942.txt @@ -95,11 +95,11 @@ Carrier C sD5[4+]†[1] CS 3 CS 3 Carrier, MMG A sD5[4+]†[2] CS 3 CS 3 57 Br N Br P Br Q†1 Br U†2 LL Carrier, MMG B sD5[4+]†[2] CS 4 CS 4 57 Br U†2 Br BB†1 LL Jeep(a) cs 2 cs 2 58 H† L†1 LL -¾-Ton Truck(a) cs 4 cs 4 Br 85 Br A Br N LL -1½-Ton Truck(a) cs 6 cs 6 Br 85 Br A Br N LL -2½-Ton Truck(a) cs 7 cs 7 Br 85 Br A Br N LL -7½-Ton Truck(a) cs 7 cs 7 Br 85 Br A Br N LL -DUKW cs 7†[1] cs 7†[1] US 52† US D†3 US O†2 US CC†1 LL +¾-Ton Truck(a) cs 4 cs 4 n/a Br A Br N LL +1½-Ton Truck(a) cs 6 cs 6 n/a Br A Br N LL +2½-Ton Truck(a) cs 7 cs 7 n/a Br A Br N LL +7½-Ton Truck(a) cs 7 cs 7 n/a Br A Br N LL +DUKW cs 7†[1] cs 7†[1] n/a US D†3 US O†2 US CC†1 LL BT-2A ® C5†[2] CS 3 ® C5†[2] CS 3 1† C†2 Ru M†1 CMG 2:00 from MA BT-2A(L) ® C6†[2] CS 3 ® C6†[2] CS 3 2† C†2 Ru M†1 BT-2B ® CS 3 ® CS 3 3† Ru M†1 2 TK DR (MG) diff --git a/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/russian/1943.txt b/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/russian/1943.txt index 15e1c4b..3d4cb50 100644 --- a/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/russian/1943.txt +++ b/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/russian/1943.txt @@ -95,11 +95,11 @@ Carrier C sD5[4+]†[1] CS 3 CS 3 Carrier, MMG A sD5[4+]†[2] CS 3 CS 3 57 Br N Br P Br Q†1 Br U†2 LL Carrier, MMG B sD5[4+]†[2] CS 4 CS 4 57 Br U†2 Br BB†1 LL Jeep(a) cs 2 cs 2 58 H† L†1 LL -¾-Ton Truck(a) cs 4 cs 4 Br 85 Br A Br N LL -1½-Ton Truck(a) cs 6 cs 6 Br 85 Br A Br N LL -2½-Ton Truck(a) cs 7 cs 7 Br 85 Br A Br N LL -7½-Ton Truck(a) cs 7 cs 7 Br 85 Br A Br N LL -DUKW cs 7†[1] cs 7†[1] US 52† US D†3 US O†2 US CC†1 LL +¾-Ton Truck(a) cs 4 cs 4 n/a Br A Br N LL +1½-Ton Truck(a) cs 6 cs 6 n/a Br A Br N LL +2½-Ton Truck(a) cs 7 cs 7 n/a Br A Br N LL +7½-Ton Truck(a) cs 7 cs 7 n/a Br A Br N LL +DUKW cs 7†[1] cs 7†[1] n/a US D†3 US O†2 US CC†1 LL BT-2A ® C5†[2] CS 3 ® C5†[2] CS 3 1† C†2 Ru M†1 CMG 2:00 from MA BT-2A(L) ® C6†[2] CS 3 ® C6†[2] CS 3 2† C†2 Ru M†1 BT-2B ® CS 3 ® CS 3 3† Ru M†1 2 TK DR (MG) diff --git a/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/russian/1944.txt b/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/russian/1944.txt index 08f815e..b3f7e3c 100644 --- a/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/russian/1944.txt +++ b/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/russian/1944.txt @@ -95,11 +95,11 @@ Carrier C sD5[4+]†[1] CS 3 sD5†[1] C Carrier, MMG A sD5[4+]†[2] CS 3 sD5†[2] CS 3 57 Br N Br P Br Q†1 Br U†2 LL Carrier, MMG B sD5[4+]†[2] CS 4 sD5†[2] CS 4 57 Br U†2 Br BB†1 LL Jeep(a) cs 2 cs 2 58 H† L†1 LL -¾-Ton Truck(a) cs 4 cs 4 Br 85 Br A Br N LL -1½-Ton Truck(a) cs 6 cs 6 Br 85 Br A Br N LL -2½-Ton Truck(a) cs 7 cs 7 Br 85 Br A Br N LL -7½-Ton Truck(a) cs 7 cs 7 Br 85 Br A Br N LL -DUKW cs 7†[1] cs 7†[1] US 52† US D†3 US O†2 US CC†1 LL +¾-Ton Truck(a) cs 4 cs 4 n/a Br A Br N LL +1½-Ton Truck(a) cs 6 cs 6 n/a Br A Br N LL +2½-Ton Truck(a) cs 7 cs 7 n/a Br A Br N LL +7½-Ton Truck(a) cs 7 cs 7 n/a Br A Br N LL +DUKW cs 7†[1] cs 7†[1] n/a US D†3 US O†2 US CC†1 LL BT-2A ® C5†[2] CS 3 ® C5†[2] CS 3 1† C†2 Ru M†1 CMG 2:00 from MA BT-2A(L) ® C6†[2] CS 3 ® C6†[2] CS 3 2† C†2 Ru M†1 BT-2B ® CS 3 ® CS 3 3† Ru M†1 2 TK DR (MG) diff --git a/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/russian/1945.txt b/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/russian/1945.txt index cc012c5..712b8fd 100644 --- a/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/russian/1945.txt +++ b/vasl_templates/webapp/tests/fixtures/vo-reports/vehicles/russian/1945.txt @@ -95,11 +95,11 @@ Carrier C sD5[4+]†[1] CS 3 sD5†[1] C Carrier, MMG A sD5[4+]†[2] CS 3 sD5†[2] CS 3 57 Br N Br P Br Q†1 Br U†2 LL Carrier, MMG B sD5[4+]†[2] CS 4 sD5†[2] CS 4 57 Br U†2 Br BB†1 LL Jeep(a) cs 2 cs 2 58 H† L†1 LL -¾-Ton Truck(a) cs 4 cs 4 Br 85 Br A Br N LL -1½-Ton Truck(a) cs 6 cs 6 Br 85 Br A Br N LL -2½-Ton Truck(a) cs 7 cs 7 Br 85 Br A Br N LL -7½-Ton Truck(a) cs 7 cs 7 Br 85 Br A Br N LL -DUKW cs 7†[1] cs 7†[1] US 52† US D†3 US O†2 US CC†1 LL +¾-Ton Truck(a) cs 4 cs 4 n/a Br A Br N LL +1½-Ton Truck(a) cs 6 cs 6 n/a Br A Br N LL +2½-Ton Truck(a) cs 7 cs 7 n/a Br A Br N LL +7½-Ton Truck(a) cs 7 cs 7 n/a Br A Br N LL +DUKW cs 7†[1] cs 7†[1] n/a US D†3 US O†2 US CC†1 LL BT-2A ® C5†[2] CS 3 ® C5†[2] CS 3 1† C†2 Ru M†1 CMG 2:00 from MA BT-2A(L) ® C6†[2] CS 3 ® C6†[2] CS 3 2† C†2 Ru M†1 BT-2B ® CS 3 ® CS 3 3† Ru M†1 2 TK DR (MG) diff --git a/vasl_templates/webapp/vo.py b/vasl_templates/webapp/vo.py index 749dbf9..6e1f5e3 100644 --- a/vasl_templates/webapp/vo.py +++ b/vasl_templates/webapp/vo.py @@ -121,14 +121,13 @@ def _do_load_vo_listings( vo_type, merge_common, report ): #pylint: disable=too- return listings -def _copy_vo_entry( placeholder_vo_entry, src_vo_entry ): +def _copy_vo_entry( placeholder_vo_entry, src_vo_entry ): #pylint: disable=too-many-branches """Create a new vehicle/ordnance entry by copying an existing one.""" # Anjuna, India (FEB/19) + # create the new vehicle/ordnance entry new_vo_entry = copy.deepcopy( src_vo_entry ) new_vo_entry["id"] = placeholder_vo_entry["id"] - if "note_number" in placeholder_vo_entry: - new_vo_entry["note_number"] = placeholder_vo_entry["note_number"] if "name" in placeholder_vo_entry: new_vo_entry["name"] = placeholder_vo_entry["name"] if "gpid" in placeholder_vo_entry: @@ -137,19 +136,33 @@ def _copy_vo_entry( placeholder_vo_entry, src_vo_entry ): if not isinstance( new_vo_entry["gpid"], list ): new_vo_entry["gpid"] = [ new_vo_entry["gpid"] ] new_vo_entry["gpid"].extend( placeholder_vo_entry["extra_gpids"] ) - # fixup any multi-applicable notes - if "notes" in new_vo_entry: - vo_id = placeholder_vo_entry[ "copy_from" ] - if vo_id.startswith( "br/" ): - prefix = "Br" - elif vo_id.startswith( "am/" ): - prefix = "US" - else: - logging.warning( "Unexpected vehicle/ordnance reference nationality: %s", vo_id ) - prefix = "" + + # fixup any note numbers and multi-applicable notes + vo_id = placeholder_vo_entry[ "copy_from" ] + if vo_id.startswith( "br/" ): + prefix = "Br" + elif vo_id.startswith( "am/" ): + prefix = "US" + elif vo_id.startswith( "fr/" ): + prefix = "Fr" + else: + logging.warning( "Unexpected vehicle/ordnance reference nationality: %s", vo_id ) + prefix = "" + if "note_number" in placeholder_vo_entry: + # replace the note# with the explicitly-defined one + new_vo_entry["note_number"] = placeholder_vo_entry["note_number"] + else: + # fixup the note# from the original vehicle/ordnance + new_vo_entry["note_number"] = "{} {}".format( prefix, new_vo_entry["note_number"] ) + if "notes" in placeholder_vo_entry: + # replace the multi-applicable notes with the explicitly-defined ones + new_vo_entry["notes"] = placeholder_vo_entry["notes"] + elif "notes" in new_vo_entry: + # fixup the multi-applicable notes from the original vehicle/ordnance new_vo_entry["notes"] = [ "{} {}".format( prefix, n ) for n in new_vo_entry["notes"] ] if "extra_notes" in placeholder_vo_entry: new_vo_entry["notes"].extend( placeholder_vo_entry["extra_notes"] ) + return new_vo_entry def _apply_extn_info( listings, extn_fname, extn_info, vo_index, vo_type ):