diff --git a/.DS_Store b/.DS_Store index d4706b1a..2569b8d7 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/colors.txt b/colors.txt new file mode 100644 index 00000000..ed0f27b6 --- /dev/null +++ b/colors.txt @@ -0,0 +1,20 @@ +exterior_colors = [ + "192, 192, 192" + "0, 0, 0" + "255, 255, 255" + "128, 128, 128" + "255, 0, 0" + "255, 69, 0" + "0, 0, 255" + "75, 0, 130" + "255, 215, 0" + "34, 139, 34" + "160, 82, 45" + "245, 245, 220" + "210, 105, 30" + "255, 20, 147" + "255, 228, 196" + "255, 223, 0" + "85, 107, 47" + "192, 192, 192" + ] \ No newline at end of file diff --git a/exports/makes_without_models.csv b/exports/makes_without_models.csv new file mode 100644 index 00000000..ee6dfec5 --- /dev/null +++ b/exports/makes_without_models.csv @@ -0,0 +1,2 @@ +make_id,make_name,is_sa_import +4148,DFM,False diff --git a/exports/models_without_series.csv b/exports/models_without_series.csv new file mode 100644 index 00000000..5d19ddc2 --- /dev/null +++ b/exports/models_without_series.csv @@ -0,0 +1,560 @@ +model_id,model_name,make_id,make_name +19753,Vigor,2,Acura +31,Alfa 6,3,Alfa Romeo +19754,1750,3,Alfa Romeo +19755,2000,3,Alfa Romeo +19756,2300,3,Alfa Romeo +19759,Dauphine,3,Alfa Romeo +19763,DB2,9,Aston Martin +19764,DB2/4,9,Aston Martin +19765,DB4,9,Aston Martin +19766,DB6,9,Aston Martin +19555,F103,10,Audi +19768,4000,10,Audi +19769,5000,10,Audi +19771,Fox,10,Audi +22556,Q8 I,10,Audi +120,Mini Metro,11,Austin +22595,BJ 2021,14,Beijing +19259,S-series,15,Bentley +19784,Type 57,24,Bugatti +19786,F7,26,BYD +19787,i6,26,BYD +19788,Calais,28,Cadillac +19789,Series 61,28,Cadillac +19790,Series 70,28,Cadillac +19791,SLS,28,Cadillac +19793,Star Truck,32,Changan +22484,CM8,32,Changan +22492,Chana SM8,32,Changan +245,SUV,33,ChangFeng +2253,A19,34,Chery +19797,Arauca,34,Chery +19799,Cowin,34,Chery +19802,Ego,34,Chery +19803,Elara,34,Chery +19804,Face,34,Chery +19805,Fengyun,34,Chery +19807,Fulwin,34,Chery +19808,Fulwin 2,34,Chery +19809,J1,34,Chery +19810,J11,34,Chery +19814,Qiyun,34,Chery +19816,Riich 2,34,Chery +19818,Storm 2,34,Chery +2255,City Express,35,Chevrolet +19270,Stylemaster,35,Chevrolet +19820,150,35,Chevrolet +19821,1700,35,Chevrolet +19822,210,35,Chevrolet +19823,400,35,Chevrolet +19826,Biscayne,35,Chevrolet +19827,Calibra,35,Chevrolet +19828,Chevy II,35,Chevrolet +19831,Commodore,35,Chevrolet +19834,Delray,35,Chevrolet +19836,Fleetline,35,Chevrolet +19851,Opala,35,Chevrolet +19855,Senator,35,Chevrolet +19857,Spectrum,35,Chevrolet +19859,Sprint,35,Chevrolet +19862,Task Force,35,Chevrolet +19867,Veraneio,35,Chevrolet +340,TC,36,Chrysler +19870,Alpine,36,Chrysler +19871,Avenger,36,Chrysler +19872,Centura,36,Chrysler +19873,Conquest,36,Chrysler +19875,Delta,36,Chrysler +19876,Drifter,36,Chrysler +19877,Executive,36,Chrysler +19879,Horizon,36,Chrysler +19880,Hunter,36,Chrysler +19881,Lancer,36,Chrysler +19882,Laser,36,Chrysler +19884,Sunbeam,36,Chrysler +19885,Valiant,36,Chrysler +19886,Valiant Galant,36,Chrysler +19888,Axel,37,Citroen +19889,Bijou,37,Citroen +19890,C15,37,Citroen +19892,C35,37,Citroen +19894,Chanson,37,Citroen +19897,Dispatch,37,Citroen +19898,Fukang,37,Citroen +19900,ID,37,Citroen +19902,Mehari,37,Citroen +19905,Synergie,37,Citroen +19906,1100,40,Dacia +19907,1320,40,Dacia +19909,2000,40,Dacia +19910,500,40,Dacia +19911,D6,40,Dacia +19912,Denem,40,Dacia +19913,Gamma,40,Dacia +19915,Shifter,40,Dacia +19917,Aranos,42,Daewoo +19918,Brougham,42,Daewoo +19919,Cielo,42,Daewoo +19920,Fantasy,42,Daewoo +19921,Imperial,42,Daewoo +19924,Maepsy,42,Daewoo +19925,Pointer,42,Daewoo +19927,Veritas,42,Daewoo +19929,Ayla,44,Daihatsu +19931,Compagno,44,Daihatsu +19932,Consorte,44,Daihatsu +19933,Domino,44,Daihatsu +19935,Fourtrak,44,Daihatsu +19936,Gran Max,44,Daihatsu +19938,Luxio,44,Daihatsu +19941,Sportrak,44,Daihatsu +19942,Taruna,44,Daihatsu +19943,Valera,44,Daihatsu +19944,Zebra,44,Daihatsu +19948,1000,47,Datsun +19949,1200,47,Datsun +19950,200SX,47,Datsun +19951,240Z / 260Z / 280Z,47,Datsun +19952,510,47,Datsun +19953,610,47,Datsun +19954,710,47,Datsun +19955,810,47,Datsun +19956,B-210,47,Datsun +19959,Fairlady,47,Datsun +19961,Patrol,47,Datsun +19962,Pickup,47,Datsun +19964,330,51,Dodge +19965,400,51,Dodge +19966,440,51,Dodge +19967,A100,51,Dodge +19968,Aspen,51,Dodge +19970,Brisa,51,Dodge +19972,Conquest,51,Dodge +19974,Demon,51,Dodge +19976,Forza,51,Dodge +19977,Matador,51,Dodge +19978,Meadowbrook,51,Dodge +19979,Mirada,51,Dodge +19980,Phoenix,51,Dodge +19982,Power Wagon,51,Dodge +19984,Ram 50,51,Dodge +19985,Rampage,51,Dodge +19987,Royal,51,Dodge +19988,SE,51,Dodge +19990,St. Regis,51,Dodge +19992,Future,52,DongFeng +20941,AX3,52,DongFeng +20950,A60,52,DongFeng +19993,Orion M,53,Doninvest +19998,Besturn B90,59,FAW +19999,C131,59,FAW +20000,Jiabao,59,FAW +20001,Kun Cheng,59,FAW +20002,M80,59,FAW +20004,Sirius S80,59,FAW +20007,Vela,59,FAW +20008,Xiali N3,59,FAW +20009,Xiali N5,59,FAW +540,208,60,Ferrari +20011,250,60,Ferrari +20014,330,60,Ferrari +20015,365,60,Ferrari +20016,Berlinetta Boxer,60,Ferrari +609,X1/9,61,Fiat +20017,1100,61,Fiat +20018,1200,61,Fiat +20020,1300/1500,61,Fiat +20021,133,61,Fiat +20022,1400,61,Fiat +20023,147,61,Fiat +20024,1800/2100,61,Fiat +20028,850,61,Fiat +20029,Brio,61,Fiat +20030,Campagnola,61,Fiat +20032,Dino,61,Fiat +20034,Elba,61,Fiat +20035,Marengo,61,Fiat +20036,Mille,61,Fiat +20037,Panorama,61,Fiat +20038,Perla,61,Fiat +20040,Premio,61,Fiat +20041,Spazio,61,Fiat +20042,Talento,61,Fiat +20043,Tucan,61,Fiat +20044,Viaggio,61,Fiat +20045,Vivace,61,Fiat +22557,Fullback I,61,Fiat +2223,Bronco II,63,Ford +2275,Courier,63,Ford +20048,Bantam,63,Ford +20049,Comete,63,Ford +20050,Corcel,63,Ford +20051,Corsair,63,Ford +20053,Del Rey,63,Ford +20054,Durango,63,Ford +20056,Elite,63,Ford +20058,EXP,63,Ford +20066,GPW,63,Ford +20069,Lobo,63,Ford +20070,LTD II,63,Ford +20072,Pampa,63,Ford +20073,Pilot,63,Ford +20074,Pinto,63,Ford +20075,Popular,63,Ford +20076,Prefect,63,Ford +20081,Vedette,63,Ford +20082,Verona,63,Ford +20083,Zodiac,63,Ford +679,CK,67,Geely +685,LC,67,Geely +20097,CD,67,Geely +20098,FC,67,Geely +20101,HQ,67,Geely +20103,SL,67,Geely +20104,Uliou,67,Geely +724,Voleex C10,71,Great Wall +20105,Steed,71,Great Wall +20106,Voleex C20R,71,Great Wall +20108,Voleex V80,71,Great Wall +20110,X240,71,Great Wall +20111,Junyi,72,Hafei +20112,Lobo,72,Hafei +20113,Luzun,72,Hafei +20116,Saima,72,Hafei +20117,Zhongyi,72,Hafei +20119,CX20,73,Haima +20122,Fstar,73,Haima +20123,H2,73,Haima +20124,M11,73,Haima +20125,M6,73,Haima +20126,M8,73,Haima +20127,S3,73,Haima +20128,S7,73,Haima +20131,Adventra,75,Holden +20132,Barina Spark,75,Holden +20133,Belmont,75,Holden +20134,Berlina,75,Holden +20135,Brougham,75,Holden +20136,Camira,75,Holden +20137,Captiva,75,Holden +20138,Colorado,75,Holden +20139,Crewman,75,Holden +20140,Drover,75,Holden +20141,Epica,75,Holden +20142,Gemini,75,Holden +20143,Kingswood,75,Holden +20144,Malibu,75,Holden +20145,Monterey,75,Holden +20147,Piazza,75,Holden +20148,Sandman,75,Holden +20149,Tigra,75,Holden +20150,Torana,75,Holden +20151,Viva,75,Holden +20152,Volt,75,Holden +20153,1300,76,Honda +20155,Amaze,76,Honda +20163,MR-V,76,Honda +20171,S800,76,Honda +20172,Spirior,76,Honda +23399,Forza,76,Honda +23400,CB650R,76,Honda +20173,Santa Fe,77,HuangHai +20192,i25,79,Hyundai +20203,Santro,79,Hyundai +20204,Santro Xing,79,Hyundai +20216,Bardo,83,Iran Khodro +20221,Alterra,85,Isuzu +20222,Bellel,85,Isuzu +20224,Campo,85,Isuzu +20225,Como,85,Isuzu +20226,Crosswind,85,Isuzu +20229,Fuego,85,Isuzu +20230,I-Mark,85,Isuzu +20231,i-Series,85,Isuzu +20235,Panther,85,Isuzu +20236,Statesman de Ville,85,Isuzu +20237,Wasp,85,Isuzu +20238,WFR,85,Isuzu +20996,Filly,85,Isuzu +20241,240/340,88,Jaguar +20242,420,88,Jaguar +20243,Mark,88,Jaguar +20244,SS,88,Jaguar +20245,2500,89,Jeep +20247,Commando,89,Jeep +20250,Baowei,91,JMC +20256,Yuhu,91,JMC +20257,Yusheng,91,JMC +948,Opirus,92,Kia +20259,Besta,92,Kia +20277,CCXR,93,Koenigsegg +20278,350GT,95,Lamborghini +20279,400GT,95,Lamborghini +22540,Egoista I,95,Lamborghini +996,Montecarlo,96,Lancia +20283,2000,96,Lancia +20287,Scorpion,96,Lancia +20288,Stratos HF,96,Lancia +1014,Series,97,Land Rover +20293,Foison,101,Lifan +20298,Cosmopolitan,102,Lincoln +20299,Custom,102,Lincoln +20300,K-Series,102,Lincoln +20305,7,103,Lotus +20306,Carlton,103,Lotus +20307,Omega,103,Lotus +20308,MM 775,106,Mahindra +20311,3500 GT,111,Maserati +20315,Mistral,111,Maserati +20316,Racing,111,Maserati +20317,Sebring,111,Maserati +20319,Zeppelin,112,Maybach +20320,808,113,Mazda +20321,Allegro,113,Mazda +20322,Bongo Brawny,113,Mazda +20323,Bravo,113,Mazda +20325,Clef,113,Mazda +20326,Drifter,113,Mazda +20330,GLC,113,Mazda +20332,Miata,113,Mazda +20333,Montrose,113,Mazda +20334,Porter,113,Mazda +20335,Porter Cab,113,Mazda +20336,R100,113,Mazda +20338,Roadpacer AP,113,Mazda +20339,RX-2,113,Mazda +1207,SLS AMG,116,Mercedes-Benz +20367,Type 300,116,Mercedes-Benz +22646,S-klas (w126),116,Mercedes-Benz +20371,Bobcat,117,Mercury +20373,Comet,117,Mercury +20374,Commuter,117,Mercury +20375,Custom,117,Mercury +20376,Cyclone,117,Mercury +20377,LN7,117,Mercury +20378,Lynx,117,Mercury +20379,M-47,117,Mercury +20380,Medalist,117,Mercury +20381,Meteor,117,Mercury +20382,Monarch,117,Mercury +20383,Montclair,117,Mercury +20384,Park Lane,117,Mercury +20385,S-55,117,Mercury +20386,Turnpike Cruiser,117,Mercury +20387,Voyager,117,Mercury +20388,Zephyr,117,Mercury +1240,B,119,MG +20389,1100/1300,119,MG +20391,A,119,MG +20392,C,119,MG +20393,Magnette,119,MG +1289,Jeep,123,Mitsubishi +20398,380,123,Mitsubishi +20399,Adventure,123,Mitsubishi +20402,Expo,123,Mitsubishi +20406,Grunder,123,Mitsubishi +20407,L100,123,Mitsubishi +20411,Magna,123,Mitsubishi +20412,Magnum,123,Mitsubishi +20413,Maven,123,Mitsubishi +20414,Mighty Max,123,Mitsubishi +20415,Montero iO,123,Mitsubishi +20416,Nimbus,123,Mitsubishi +20418,Precis,123,Mitsubishi +20420,Scorpion,123,Mitsubishi +20421,Shogun Pinin,123,Mitsubishi +20422,Shogun Sport,123,Mitsubishi +20423,Towny,123,Mitsubishi +20424,Verada,123,Mitsubishi +20425,Warrior,123,Mitsubishi +20426,Zinger,123,Mitsubishi +21000,Fuzion,123,Mitsubishi +20427,Classic Type F,124,Mitsuoka +20428,70,127,Nissan +20434,Axxess,127,Nissan +20437,Cherry Cab,127,Nissan +20443,Hikari,127,Nissan +20445,Hustler,127,Nissan +20448,Junior,127,Nissan +20455,Multi,127,Nissan +20461,Pintara,127,Nissan +20464,Tsuru,127,Nissan +20468,Delta 88,129,Oldsmobile +20469,Deluxe 88,129,Oldsmobile +20470,Dynamic 88,129,Oldsmobile +20471,Super 88,129,Oldsmobile +20810,98,129,Oldsmobile +20472,Arena,130,Opel +20473,Bedford Blitz,130,Opel +20474,Blazer,130,Opel +20476,Calais,130,Opel +20480,302,135,Peugeot +20481,401,135,Peugeot +20483,Hoggar,135,Peugeot +20486,Pars,135,Peugeot +20487,Persia,135,Peugeot +20488,Roa,135,Peugeot +22596,Grand Espace,136,Piaggio +22597,Grand Scenic,136,Piaggio +22598,Grand C4 Picasso,136,Piaggio +20489,Acadian,138,Pontiac +20490,Astre,138,Pontiac +20491,Chieftain,138,Pontiac +20492,Executive,138,Pontiac +20494,G3,138,Pontiac +20495,Grand Safari,138,Pontiac +20496,Grand Ville,138,Pontiac +20498,Matiz,138,Pontiac +20499,Pathfinder,138,Pontiac +20500,Pursuit,138,Pontiac +20501,Star Chief,138,Pontiac +20502,Strato Chief,138,Pontiac +20503,Streamliner,138,Pontiac +20504,Sunburst,138,Pontiac +20506,Super Chief,138,Pontiac +20508,Ventura,138,Pontiac +20515,3,147,Renault +19350,Silver Dawn,149,Rolls-Royce +20533,Flying Spur,149,Rolls-Royce +20535,10,151,Rover +20537,16,151,Rover +20539,CityRover,151,Rover +20543,P5,151,Rover +20544,Quintet,151,Rover +1647,PS10,154,Santana +20547,1200/1430 Sport,157,SEAT +20548,124,157,SEAT +20549,127,157,SEAT +20550,128,157,SEAT +20551,131,157,SEAT +20553,1400,157,SEAT +20554,1430,157,SEAT +20555,1500,157,SEAT +20556,600/800,157,SEAT +20557,850,157,SEAT +20559,Panda,157,SEAT +20560,Ritmo,157,SEAT +20561,CEO,158,ShuangHuan +1681,100,159,Skoda +20562,1000 MB,159,Skoda +20564,1201,159,Skoda +20565,1202,159,Skoda +20567,440/445/450,159,Skoda +20569,Garde,159,Skoda +20572,VOS,159,Skoda +20577,1500,166,Subaru +20580,Estratto,166,Subaru +20581,FF-1,166,Subaru +20582,Fiori,166,Subaru +20584,Loyale,166,Subaru +20585,Mini Jumbo,166,Subaru +20587,Vortex,166,Subaru +20592,Cultus Crescent,167,Suzuki +20595,Forsa,167,Suzuki +20597,Fun,167,Suzuki +20598,Grand Escudo,167,Suzuki +20599,Grand Nomade,167,Suzuki +20600,Karimun Estilo,167,Suzuki +20601,Khyber,167,Suzuki +20602,Lapin,167,Suzuki +20603,Margalla,167,Suzuki +20604,Mehran,167,Suzuki +20605,Mighty Boy,167,Suzuki +20606,Potohar,167,Suzuki +20607,Santana,167,Suzuki +20608,SC100,167,Suzuki +20612,Beta,170,Tatra +20615,T87,170,Tatra +20616,Chenglong,173,Tianma +1820,AC,176,Toyota +2153,Master,176,Toyota +19582,Pixis,176,Toyota +20627,AA,176,Toyota +20628,AB,176,Toyota +20629,AE,176,Toyota +20630,Agya,176,Toyota +20633,Briska,176,Toyota +20634,Carri,176,Toyota +20637,Condor,176,Toyota +20644,Kijang,176,Toyota +20645,Lexcen,176,Toyota +20647,MasterAce,176,Toyota +20648,MiniAce,176,Toyota +20654,Quantum,176,Toyota +20655,Reiz,176,Toyota +20657,Space Cruiser,176,Toyota +20659,Stallion,176,Toyota +20660,Stout,176,Toyota +20661,Super,176,Toyota +20662,T100,176,Toyota +20663,Tamaraw FX,176,Toyota +20664,Tarago,176,Toyota +20665,Tazz,176,Toyota +20666,Tiara,176,Toyota +20668,Unser,176,Toyota +20670,Venture,176,Toyota +20671,Vienta,176,Toyota +20673,Zace,176,Toyota +22632,Karl,181,Vauxhall +22637, Signum,181,Vauxhall +20678,Country Buggy,184,Volkswagen +20958,Dune Buggy,184,Volkswagen +1934,140,185,Volvo +1937,260,185,Volvo +19301,120,185,Volvo +20693,340,185,Volvo +20694,360,185,Volvo +20695,Amazon,185,Volvo +20696,Duett,185,Volvo +20698,PV444/544,185,Volvo +20699,PV60,185,Volvo +20700,Megabusa,188,Westfield +20938,GT MF4,189,Wiesmann +1981,RX6400,192,Zotye +22619,21213,215,VAZ (Lada) +2024,2308 Ataman,216,GAZ +20710,3105 Volga,216,GAZ +20719,M-1,216,GAZ +20939,233001 Tigr,216,GAZ +20724,110,218,ZIL +20732,2315,223,Moskvich +20733,2335,223,Moskvich +20737,Moto stroller,224,SMZ +2272,Tropica Roadster,284,Renaissance Cars +19306,Trumpf,3664,Adler +20762,MPV,3755,Efini +20763,MS-6,3755,Efini +20764,MS-8,3755,Efini +20765,MS-9,3755,Efini +20766,RX-7,3755,Efini +20769,Bliss,3757,Groz +20770,Dacota,3757,Groz +20776,Vertus,3757,Groz +20781,AlbaycĂ­n,3760,Hurtan +20790,522,3767,Nysa +20991,Other cars,3822,Other car +20992,Other russian machines,3822,Other car +20993,Self collected,3822,Other car +22524,124 GT,4146,Abarth +22526,124 Spider Turismo,4146,Abarth +22527,595,4146,Abarth +22528,595 Competizione,4146,Abarth +22529,595 Pista,4146,Abarth +22530,595 Turismo,4146,Abarth +22531,695 Biposto,4146,Abarth +22532,695 Rivale,4146,Abarth +22533,695 XSR Yamaha,4146,Abarth +22541,207A Boano Spyder Corsa,4146,Abarth +22542,750 GT Zagato,4146,Abarth +22543,1000 SP,4146,Abarth +22545,2000 SE027,4146,Abarth +22546,131 Rally,4146,Abarth +22547,Lancia Rally 037 Stradale,4146,Abarth +22548,Lancia Delta S4 Stradale (SE038),4146,Abarth +22549,500 Pogea Racing Ares,4146,Abarth +22585,Beijing BJ20,4147,Baic +22586,ES 210,4147,Baic +22588,Huansu S2,4147,Baic +22589,Huansu S3,4147,Baic +22590,Huansu S5,4147,Baic diff --git a/exports/series_without_trims.csv b/exports/series_without_trims.csv new file mode 100644 index 00000000..ccdc08f5 --- /dev/null +++ b/exports/series_without_trims.csv @@ -0,0 +1,431 @@ +serie_id,serie_name,model_id,model_name,make_id,make_name +53807,Crossover,11,MDX,2,Acura +47558,Sprint Coupe 2-doors,40,Giulietta,3,Alfa Romeo +47559,Sprint Speciale Coupe 2-doors,40,Giulietta,3,Alfa Romeo +47562,SVZ Coupe 2-doors,40,Giulietta,3,Alfa Romeo +47564,3 roadster 1-doors,55,Atom,6,Ariel +47565,3.5 roadster 1-doors,55,Atom,6,Ariel +2881,S liftback,67,Rapide,9,Aston Martin +8329,Avant hatchback,75,100,10,Audi +8331,Coupe,75,100,10,Audi +8332,Sedan,75,100,10,Audi +47567,Sedan,75,100,10,Audi +47569,Sedan 4-doors,75,100,10,Audi +5466,Sedan,78,80,10,Audi +5467,Sedan 2-doors,78,80,10,Audi +47571,Sedan 2-doors,78,80,10,Audi +47573,Sedan 4-doors,78,80,10,Audi +47574,wagon,78,80,10,Audi +47576,Sedan 2-doors,78,80,10,Audi +54107,Citycarver hatchback,80,A1,10,Audi +53743,wagon 5 doors,83,A4 allroad,10,Audi +54011,Avant wagon,84,A4,10,Audi +54012,Allroad quattro wagon,84,A4,10,Audi +53302,Sportback hatchback,100,RS 3,10,Audi +47589,Avant Nogaro selection wagon 5-doors,101,RS 4,10,Audi +53735,Sedan,108,S4,10,Audi +54013,Avant wagon,108,S4,10,Audi +53632,Coupe 2-doors,114,TT,10,Audi +53633,Roadster 2-doors,114,TT,10,Audi +53634,S Coupe 2-doors,114,TT,10,Audi +54110,R Coupe 2-doors,131,Continental,15,Bentley +54111,Coupe,131,Continental,15,Bentley +62954,Flying Spur Sedan,131,Continental,15,Bentley +5615,Sedan,186,Electra,25,Buick +67451,Crossover,239,CS35,32,Changan +5679,Sedan,250,Fora (A21),34,Chery +5684,Hatchback,255,QQ,34,Chery +47617,Hatchback 5-doors,259,Astra,35,Chevrolet +47620,Conversion minivan 4-doors,260,Astro,35,Chevrolet +5696,SUV,264,Blazer,35,Chevrolet +5697,SUV,264,Blazer,35,Chevrolet +14922,SUV,264,Blazer,35,Chevrolet +47623,K5 SUV 3-doors,264,Blazer,35,Chevrolet +47624,S-10 SUV 3-doors,264,Blazer,35,Chevrolet +47625,S-10 SUV 5-doors,264,Blazer,35,Chevrolet +47626,K5 SUV 3-doors,264,Blazer,35,Chevrolet +47627,K1500 SUV,264,Blazer,35,Chevrolet +47745,Station Wagon wagon,275,Classic,35,Chevrolet +47746,Sedan,275,Classic,35,Chevrolet +47747,Sedan,275,Classic,35,Chevrolet +47760,50th Anniversary cabriolet 2-doors,280,Corvette,35,Chevrolet +47761,50th Anniversary Coupe 2-doors,280,Corvette,35,Chevrolet +47898,SS targa 2-doors,297,Monte Carlo,35,Chevrolet +47899,SS Aerocoupe targa 2-doors,297,Monte Carlo,35,Chevrolet +47901,targa,297,Monte Carlo,35,Chevrolet +47915,Spyder hatchback 3-doors,298,Monza,35,Chevrolet +47916,Sport hatchback 3-doors,298,Monza,35,Chevrolet +47917,Hatchback,298,Monza,35,Chevrolet +47918,wagon,298,Monza,35,Chevrolet +54017,Sedan,298,Monza,35,Chevrolet +5761,Cabriolet,315,Tracker,35,Chevrolet +47951,SUV,315,Tracker,35,Chevrolet +53780,Crossover 5-doors,417,Winstorm,42,Daewoo +62956,Hatchback,428,Coo,44,Daihatsu +8511,Hatchback 5-doors,430,Cuore,44,Daihatsu +53618,Minivan,440,Move,44,Daihatsu +3199,Sedan,470,Stanza,47,Datsun +3200,Hatchback 5-doors,470,Stanza,47,Datsun +45393,Crossover,623,Edge,63,Ford +48042,RS wagon 5-doors,626,Escort,63,Ford +48043,RS wagon 3-doors,626,Escort,63,Ford +53452,Super Cab pickup 2-doors,658,Ranger,63,Ford +53453,SuperCrew pickup 4-doors,658,Ranger,63,Ford +6229,Hatchback 5-doors,687,MK Cross,67,Geely +6309,wagon,753,Accord,76,Honda +48145,US-spec Sedan 4-doors,753,Accord,76,Honda +48147,US-spec Sedan 4-doors,753,Accord,76,Honda +48148,Hatchback,753,Accord,76,Honda +48149,GXR Sedan 4-doors,753,Accord,76,Honda +48151,Sedan 4-doors,753,Accord,76,Honda +48155,Hatchback,759,City,76,Honda +48156,Cabriolet,759,City,76,Honda +6350,Shuttle wagon 5-doors,761,Civic,76,Honda +6352,Hatchback,761,Civic,76,Honda +15285,Sedan 2-doors,761,Civic,76,Honda +48183,Si Sedan 4-doors,761,Civic,76,Honda +48185,RS Sedan 2-doors,761,Civic,76,Honda +48187,Sedan 4-doors,761,Civic,76,Honda +62957,Hatchback,765,CR-Z,76,Honda +53781,Crossover 3-doors,777,HR-V,76,Honda +48227,Pickup,784,Life,76,Honda +48228,Hatchback,784,Life,76,Honda +48229,Sedan 4-doors,784,Life,76,Honda +48230,Sedan 2-doors,784,Life,76,Honda +1094,Minivan,811,Zest,76,Honda +48295,Sedan,831,Grandeur,79,Hyundai +3525,Hatchback 5-doors,906,"J3 (Tongyue,Tojoy)",87,JAC +6717,Sedan,1047,MKZ,102,Lincoln +14997,Sedan,1047,MKZ,102,Lincoln +48421,Stretch Limousine,1049,Town Car,102,Lincoln +54135,Coupe,1106,Ghibli,111,Maserati +3660,Hatchback,1125,323,113,Mazda +6809,Hatchback 3-doors,1125,323,113,Mazda +6813,wagon,1125,323,113,Mazda +6814,Hatchback 5-doors,1125,323,113,Mazda +6827,Sedan,1129,626,113,Mazda +48449,Liftback,1129,626,113,Mazda +6832,Sedan,1131,929,113,Mazda +48453,Hatchback,1132,Atenza,113,Mazda +48455,Hatchback,1132,Atenza,113,Mazda +48459,Hatchback,1132,Atenza,113,Mazda +48467,Double Cab pickup 4-doors,1137,B-Series,113,Mazda +48469,Freestyle Cab pickup 4-doors,1137,B-Series,113,Mazda +48472,Pickup,1137,B-Series,113,Mazda +48473,Pickup,1137,B-Series,113,Mazda +48474,Pickup,1137,B-Series,113,Mazda +48490,Sedan,1142,Capella,113,Mazda +48491,Coupe,1142,Capella,113,Mazda +48492,Sedan,1142,Capella,113,Mazda +8795,wagon,1156,Familia,113,Mazda +45157,Hatchback 3-doors,1156,Familia,113,Mazda +48496,Field Break hatchback 5-doors,1156,Familia,113,Mazda +48500,Hatchback 3-doors,1156,Familia,113,Mazda +48501,Hatchback 5-doors,1156,Familia,113,Mazda +48502,Hatchback 3-doors,1156,Familia,113,Mazda +48503,Hatchback 5-doors,1156,Familia,113,Mazda +48504,Hatchback 3-doors,1156,Familia,113,Mazda +48505,Presto Coupe 2-doors,1156,Familia,113,Mazda +48506,Grand Coupe 2-doors,1156,Familia,113,Mazda +48507,Grand Sedan 4-doors,1156,Familia,113,Mazda +48508,Presto Sedan 4-doors,1156,Familia,113,Mazda +48509,Grand Coupe 2-doors,1156,Familia,113,Mazda +48510,Presto Coupe 2-doors,1156,Familia,113,Mazda +48511,Presto Sedan 4-doors,1156,Familia,113,Mazda +48512,Presto Rotary Coupe 2-doors,1156,Familia,113,Mazda +48513,Coupe 2-doors,1156,Familia,113,Mazda +48514,Rotary Sedan 4-doors,1156,Familia,113,Mazda +48515,Presto Coupe 2-doors,1156,Familia,113,Mazda +48516,Sedan 2-doors,1156,Familia,113,Mazda +48517,Sedan 4-doors,1156,Familia,113,Mazda +48518,Rotary Coupe 2-doors,1156,Familia,113,Mazda +48519,Sedan,1156,Familia,113,Mazda +48520,Sedan 2-doors,1156,Familia,113,Mazda +48521,Pickup,1156,Familia,113,Mazda +48522,Coupe,1156,Familia,113,Mazda +48523,Sedan 4-doors,1156,Familia,113,Mazda +48532,Coupe,1164,MX-6,113,Mazda +1564,Marvie SUV,1169,Proceed,113,Mazda +8804,Coupe 2-doors,1173,RX-7,113,Mazda +8805,Coupe,1173,RX-7,113,Mazda +48536,Cabriolet,1173,RX-7,113,Mazda +48538,Coupe,1173,RX-7,113,Mazda +67452,Field Break crossover 5-doors,1178,Tribute,113,Mazda +48547,Hatchback,1232,3,119,MG +6999,Hatchback 3-doors,1250,M.Go,120,Microcar +1676,Hatchback 3-doors,1252,MC,120,Microcar +48548,Cooper cabriolet,1255,Cabrio,122,Mini +48549,Cooper cabriolet,1255,Cabrio,122,Mini +7022,Hatchback,1271,Colt,123,Mitsubishi +7023,Hatchback 3-doors,1271,Colt,123,Mitsubishi +47314,Hatchback 5-doors,1271,Colt,123,Mitsubishi +48564,Ralliart hatchback 3-doors,1271,Colt,123,Mitsubishi +48565,Turbo hatchback 3-doors,1271,Colt,123,Mitsubishi +48566,Hatchback 3-doors,1271,Colt,123,Mitsubishi +53876,Minivan,1274,Delica,123,Mitsubishi +48579,Sedan,1284,Galant,123,Mitsubishi +48580,wagon,1284,Galant,123,Mitsubishi +48581,Coupe,1284,Galant,123,Mitsubishi +48582,JDM wagon 3-doors,1284,Galant,123,Mitsubishi +48617,Rothmans Special SUV 3-doors,1301,Pajero,123,Mitsubishi +15759,Nismo Coupe 2-doors,1352,350Z,127,Nissan +48635,Hatchback 3-doors,1356,Almera,127,Nissan +48636,Sedan,1356,Almera,127,Nissan +48637,Hatchback 5-doors,1356,Almera,127,Nissan +48647,ARX Hardtop,1364,Bluebird,127,Nissan +48705,Hatchback,1367,Cherry,127,Nissan +1845,Hatchback,1386,Leaf,127,Nissan +48780,wagon,1391,Maxima,127,Nissan +53786,Crossover,1395,Murano,127,Nissan +45849,Sedan,1422,Admiral,130,Opel +48806,Cabriolet 4-doors,1422,Admiral,130,Opel +3882,Sedan 4-doors,1426,Ascona,130,Opel +3884,Hatchback,1426,Ascona,130,Opel +7276,Sedan 2-doors,1426,Ascona,130,Opel +7277,Sedan 4-doors,1426,Ascona,130,Opel +48808,Cabriolet,1426,Ascona,130,Opel +48809,Hatchback,1426,Ascona,130,Opel +48810,Sedan 2-doors,1426,Ascona,130,Opel +48812,Sedan 4-doors,1426,Ascona,130,Opel +48815,Sedan 4-doors,1426,Ascona,130,Opel +48817,Sedan 4-doors,1426,Ascona,130,Opel +53779,Cabriolet,1426,Ascona,130,Opel +48823,OPC cabriolet 2-doors,1427,Astra,130,Opel +7307,Sedan 2-doors,1432,Commodore,130,Opel +48836,Pickup,1433,Corsa,130,Opel +48838,Sedan,1433,Corsa,130,Opel +48840,Sedan,1433,Corsa,130,Opel +48841,Pickup,1433,Corsa,130,Opel +48843,Hatchback 5-doors,1433,Corsa,130,Opel +48844,Hatchback 3-doors,1433,Corsa,130,Opel +48845,GSi hatchback 3-doors,1433,Corsa,130,Opel +48847,Hatchback 3-doors,1433,Corsa,130,Opel +48848,GSi hatchback 3-doors,1433,Corsa,130,Opel +48849,Sedan 4-doors,1433,Corsa,130,Opel +48850,Sedan 2-doors,1433,Corsa,130,Opel +48851,GT hatchback 3-doors,1433,Corsa,130,Opel +54084,Hatchback 5 doors,1433,Corsa,130,Opel +1934,GSE Coupe 3-doors,1443,Monza,130,Opel +48874,Coupe,1443,Monza,130,Opel +48875,Coupe,1443,Monza,130,Opel +3916,Sedan,1445,Rekord,130,Opel +46798,wagon 5-doors,1445,Rekord,130,Opel +46803,wagon,1445,Rekord,130,Opel +48878,wagon,1445,Rekord,130,Opel +48882,wagon,1445,Rekord,130,Opel +48883,Coupe,1445,Rekord,130,Opel +48884,wagon,1445,Rekord,130,Opel +48885,Sedan 4-doors,1445,Rekord,130,Opel +48886,Sedan,1445,Rekord,130,Opel +48887,Sedan,1446,Senator,130,Opel +48906,Van hatchback 3-doors,1474,206,135,Peugeot +48912,Sedan,1482,307,135,Peugeot +48914,SW wagon,1483,308,135,Peugeot +8988,Coupe,1517,Firebird,138,Pontiac +48939,Cabriolet,1517,Firebird,138,Pontiac +48940,Trans Am T-Roof targa,1517,Firebird,138,Pontiac +48941,Trans Am Coupe 2-doors,1517,Firebird,138,Pontiac +47375,R Coupe 2-doors,1536,911,139,Porsche +49027,Safari hatchback 5-doors,1582,4,147,Renault +49028,Jogging hatchback 5-doors,1582,4,147,Renault +49029,Hatchback,1582,4,147,Renault +49030,Hatchback,1582,4,147,Renault +49032,Plein Air cabriolet,1582,4,147,Renault +49034,Hatchback,1582,4,147,Renault +54119,Minivan,1590,Espace,147,Renault +53949,Stepway,1603,Sandero,147,Renault +49082,Conquest minivan 5-doors,1604,Scenic,147,Renault +4095,Hatchback 5-doors,1624,200 Series,151,Rover +4127,Hatchback 5-doors,1648,Astra,155,Saturn +4131,Coupe,1655,SC,155,Saturn +54092,Hatchback,1673,Ibiza,157,SEAT +53414,Preliator Coupe 2-doors,1697,C8,163,Spyker +67455,STi crossover 5-doors,1716,Forester,166,Subaru +67456,XL-7 crossover 5-doors,1745,Grand Vitara,167,Suzuki +7711,Roadster,1758,Swift,167,Suzuki +9175,Hatchback 3-doors,1761,Wagon R,167,Suzuki +49181,TAG Heuer Sport roadster 2-doors,1783,Roadster,172,Tesla +49182,Sport roadster 2-doors,1783,Roadster,172,Tesla +49183,Roadster,1783,Roadster,172,Tesla +47428,SUV,1791,4Runner,176,Toyota +49184,SUV 5-doors,1791,4Runner,176,Toyota +49185,SUV 3-doors,1791,4Runner,176,Toyota +49187,Pickup,1791,4Runner,176,Toyota +62983,SUV,1791,4Runner,176,Toyota +7783,wagon,1810,Camry,176,Toyota +15350,CN-spec Sedan 4-doors,1810,Camry,176,Toyota +49208,CN-spec Sedan 4-doors,1810,Camry,176,Toyota +7795,II Sedan 4-doors,1812,Carina,176,Toyota +7797,Sedan 2-doors,1812,Carina,176,Toyota +7798,II liftback,1812,Carina,176,Toyota +7801,Sedan 4-doors,1812,Carina,176,Toyota +47431,Sedan 4-doors,1812,Carina,176,Toyota +53394,E wagon,1812,Carina,176,Toyota +49243,Hardtop,1818,Corolla,176,Toyota +54097,Liftback,1818,Corolla,176,Toyota +53881,Van wagon,1821,Corona,176,Toyota +53884,Hardtop Coupe,1821,Corona,176,Toyota +54032,Van wagon,1821,Corona,176,Toyota +49252,Coupe,1823,Cressida,176,Toyota +7866,JDM Hardtop 4-doors,1826,Crown,176,Toyota +49267,JDM Hardtop,1826,Crown,176,Toyota +49287,TRD Special Edition SUV 5-doors,1832,FJ Cruiser,176,Toyota +49288,"""Trail Teams"" SUV 5-doors",1832,FJ Cruiser,176,Toyota +49297,Combi minivan,1839,Hiace,176,Toyota +49300,Minivan 4-doors,1839,Hiace,176,Toyota +49302,Combi minivan,1839,Hiace,176,Toyota +49303,Minivan 4-doors,1839,Hiace,176,Toyota +49304,Combi minivan,1839,Hiace,176,Toyota +54033,SUV,1840,Highlander,176,Toyota +7911,HJ47 cabriolet 2-doors,1849,Land Cruiser,176,Toyota +4290,Cabriolet,1852,P 601,177,Trabant +49359,"""Weltmeister"" Sedan 2-doors",1900,Beetle,184,Volkswagen +47448,Tramper minivan 5-doors,1902,Caddy,184,Volkswagen +49371,Tramper Maxi minivan 5-doors,1902,Caddy,184,Volkswagen +49385,Sedan 2-doors,1906,Fox,184,Volkswagen +53969,Minivan,1915,Multivan,184,Volkswagen +67457,Crossover 5-doors,1927,Tiguan,184,Volkswagen +2678,Coupe,1972,GT MF5,189,Wiesmann +4579,Cabriolet 4-doors,2034,69,216,GAZ +9409,wagon 5-doors,2076,426,223,Moskvich +49489,Sedan,2110,S30,52,DongFeng +49492,Minivan,2117,Prairie,127,Nissan +49509,Milano X1 hatchback 3-doors,2122,Pulsar,127,Nissan +67453,Crossover 5-doors,2123,Qashqai,127,Nissan +49497,SSS hatchback,2130,Sentra,127,Nissan +9493,Sedan,2136,Stanza,127,Nissan +9494,Hatchback,2136,Stanza,127,Nissan +49555,Sedan,2136,Stanza,127,Nissan +9527,wagon,2150,Mark II,176,Toyota +49612,TRD hatchback 5-doors,2154,Matrix,176,Toyota +62919,S\XRS hatchback 5-doors,2154,Matrix,176,Toyota +49636,Coupe,2193,Sprinter,176,Toyota +62920,Hatchback,2211,Voltz,176,Toyota +49673,Minivan,2218,Yaris Verso,176,Toyota +49678,SS Regular Cab pickup 2-doors,2220,Silverado,35,Chevrolet +49753,Minivan,2235,Caravelle,184,Volkswagen +49759,Minivan,2245,Urvan,127,Nissan +54078,Sedan,2286,XE,88,Jaguar +15557,Hatchback 5-doors,2328,Focus ST,63,Ford +15558,wagon 5-doors,2328,Focus ST,63,Ford +15563,Hatchback 3-doors,2328,Focus ST,63,Ford +15520,Coupe,2332,XKR,88,Jaguar +15521,Cabriolet,2332,XKR,88,Jaguar +15461,Hatchback 5-doors,2337,3 MPS,113,Mazda +15599,Hatchback 3-doors,2356,Corsa OPC,130,Opel +15437,Minivan,2375,Corolla Spacio,176,Toyota +2093,Roadster,2388,918 Spyder,139,Porsche +45007,Sedan Long,18882,XJR,88,Jaguar +67454,Crossover 5-doors,19208,Tivoli,165,SsangYong +49775,SS Sport trim pickup 2-doors,19269,El Camino,35,Chevrolet +53587,Hatchback,19280,S3,87,JAC +50973,Fastback,19305,M-72,216,GAZ +46446,Coupe,19517,Toronado,129,Oldsmobile +46570,Hardtop,19570,Ascot Innova,76,Honda +46687,Sedan,19617,Kapitan,130,Opel +46815,Sedan,19617,Kapitan,130,Opel +49796,Sedan,19617,Kapitan,130,Opel +49877,Coupe,19770,Coupe S,10,Audi +50008,Rampside pickup,19832,Corvair,35,Chevrolet +50014,Crew Cab pickup 4-doors,19833,D20,35,Chevrolet +50015,Pickup 2-doors,19833,D20,35,Chevrolet +50020,SUV 5-doors,19838,Grand Vitara,35,Chevrolet +50028,Sedan,19843,Lova,35,Chevrolet +50083,Sedan,19852,Optra,35,Chevrolet +50087,SUV,19854,Samurai,35,Chevrolet +50088,Cabriolet,19854,Samurai,35,Chevrolet +50091,Sedan,19860,Swift,35,Chevrolet +50092,Hatchback,19860,Swift,35,Chevrolet +50095,Pickup,19863,Tornado,35,Chevrolet +50096,SUV 5-doors,19864,Trooper,35,Chevrolet +50097,Cabriolet,19864,Trooper,35,Chevrolet +50098,SUV 5-doors,19864,Trooper,35,Chevrolet +50099,SUV 3-doors,19864,Trooper,35,Chevrolet +50126,Limousine,19945,DH27,45,Daimler +50133,Hatchback,20010,Xiali N7,59,FAW +50151,F-150 Tremor pickup 2-doors,20065,F-1,63,Ford +50161,F-150 SVT Lighting pickup 2-doors,20065,F-1,63,Ford +50162,F-150 SuperCab pickup 4-doors,20065,F-1,63,Ford +50163,F-150 RegularCab pickup 2-doors,20065,F-1,63,Ford +50164,F-350 SuperCab pickup 4-doors,20065,F-1,63,Ford +50165,F-150 SuperCab pickup 4-doors,20065,F-1,63,Ford +50166,F-250 RegularCab pickup 2-doors,20065,F-1,63,Ford +50167,F-150 RegularCab pickup 2-doors,20065,F-1,63,Ford +50168,F-100 RegularCab pickup 2-doors,20065,F-1,63,Ford +50169,F-150 RegularCab pickup 2-doors,20065,F-1,63,Ford +50170,F-100 RegularCab pickup 2-doors,20065,F-1,63,Ford +50171,F-100 SuperCab pickup 4-doors,20065,F-1,63,Ford +50172,F-250 SuperCab pickup 4-doors,20065,F-1,63,Ford +50173,F-100 RegularCab pickup 2-doors,20065,F-1,63,Ford +50174,F-100 RegularCab pickup 2-doors,20065,F-1,63,Ford +50175,F-100 pickup 2-doors,20065,F-1,63,Ford +50176,F-100 pickup 2-doors,20065,F-1,63,Ford +50177,Pickup,20065,F-1,63,Ford +53702,Sedan,20099,GE,67,Geely +50198,Sedan,20107,Voleex C50,71,Great Wall +50215,Hatchback,20177,Avega,79,Hyundai +50239,Sedan,20197,Langdong,79,Hyundai +50257,Sedan,20208,Sonica,79,Hyundai +50266,Minivan,20211,TQ,79,Hyundai +53803,Pickup,20248,Gladiator,89,Jeep +50350,Coupe,20309,Berlinetta,108,Marlin +50351,Cabriolet,20310,RoadSter,108,Marlin +50377,AMG hatchback 5-doors,20342,A-Class,116,Mercedes-Benz +62911,AMG wagon 5-doors,20350,E-Class,116,Mercedes-Benz +50540,Cabriolet,20355,G-Class,116,Mercedes-Benz +50580,AMG roadster 2-doors,20362,SL-Class,116,Mercedes-Benz +50629,Coupe,20364,S-Class,116,Mercedes-Benz +50630,Sedan,20364,S-Class,116,Mercedes-Benz +53805,Maybach cabriolet 2-doors,20364,S-Class,116,Mercedes-Benz +50654,Minivan,20429,Altra,127,Nissan +50656,Sedan,20433,Auster,127,Nissan +50657,Hatchback,20433,Auster,127,Nissan +50660,JX Sedan,20433,Auster,127,Nissan +50661,JX hatchback,20433,Auster,127,Nissan +50664,Liftback,20433,Auster,127,Nissan +50665,Sedan,20433,Auster,127,Nissan +50705,Hatchback,20451,Latio,127,Nissan +50732,Liftback,20465,Violet,127,Nissan +50733,Hatchback,20465,Violet,127,Nissan +50734,wagon,20465,Violet,127,Nissan +50736,Sedan,20465,Violet,127,Nissan +50740,Hatchback,20466,Violet Liberta,127,Nissan +50752,Sedan,20478,Super 6,130,Opel +50768,GTA cabriolet 2-doors,20517,Alliance,147,Renault +50769,Cabriolet,20517,Alliance,147,Renault +50770,GTA Sedan 2-doors,20517,Alliance,147,Renault +50771,Sedan 4-doors,20517,Alliance,147,Renault +50772,Sedan,20518,Celtaquatre,147,Renault +50773,Prairie wagon 5-doors,20519,Colorale,147,Renault +50775,Sedan,20521,Juvaquatre,147,Renault +50777,wagon,20521,Juvaquatre,147,Renault +50778,Hatchback 5-doors,20522,Le Car,147,Renault +50819,Sedan,20527,Monaquatre,147,Renault +50820,Sedan,20528,Primaquatre,147,Renault +50821,Sport Sedan 4-doors,20528,Primaquatre,147,Renault +50822,Sedan,20528,Primaquatre,147,Renault +50896,wagon,20683,Magotan,184,Volkswagen +50910,Coupe,20686,Quantum,184,Volkswagen +50927,Pickup,20689,Saveiro,184,Volkswagen +50928,Pickup,20689,Saveiro,184,Volkswagen +50929,Pickup,20689,Saveiro,184,Volkswagen +50935,Limousine,20702,13 Chaika,216,GAZ +50936,Cabriolet,20702,13 Chaika,216,GAZ +50937,Cabriolet,20703,14 Chaika,216,GAZ +50972,Sedan,20720,M-12 ZiM,216,GAZ +50974,Fastback,20721,M-20 Pobeda,216,GAZ +50977,Fastback,20721,M-20 Pobeda,216,GAZ +51009,Roadster,20752,3000,3749,Austin Healey +51016,Board,20760,V22,3754,DFSK +51017,Van,20761,V25,3754,DFSK +51019,Pickup,20771,Fox,3757,Groz +51021,SUV,20773,Rocky,3757,Groz +51022,SUV,20774,Shuttle,3757,Groz +51023,Pickup,20775,Target,3757,Groz +53705,Crossover,22512,SX11,67,Geely +53713,Crossover,22515,X80,101,Lifan +53731,Coupe,22544,2000 Pininfarina,4146,Abarth +54049,Crossover,22604,FY11,67,Geely +14597,Sedan,22971,Bonus 3 (E3/A19),34,Chery +63668,Roadster TR4A,23165,TR4,179,Triumph +71839,Pickup Double cabin,26675,F30,4948,Changan Kuayue (KYC) diff --git a/inventory/car_hierarchy_analysis.ipynb b/inventory/car_hierarchy_analysis.ipynb new file mode 100644 index 00000000..8c066b6f --- /dev/null +++ b/inventory/car_hierarchy_analysis.ipynb @@ -0,0 +1,248 @@ +{ + "cells": [ + { + "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, + "source": [ + "# Setup Django environment\n", + "import os\n", + "import sys\n", + "import django\n", + "\n", + "# Set up Django environment\n", + "os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'car_inventory.settings')\n", + "django.setup()\n", + "\n", + "# Import models\n", + "from inventory.models import CarMake, CarModel, CarSerie, CarTrim" + ], + "id": "64ce4f8ed9e90534" + }, + { + "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, + "source": [ + "# Get all car makes\n", + "all_makes = CarMake.objects.all()\n", + "total_makes = all_makes.count()\n", + "\n", + "# Find makes without models using annotations\n", + "from django.db.models import Count\n", + "makes_without_models = CarMake.objects.annotate(model_count=Count('carmodel')).filter(model_count=0)\n", + "makes_without_models_count = makes_without_models.count()\n", + "\n", + "print(f\"Total car makes: {total_makes}\")\n", + "print(f\"Car makes without models: {makes_without_models_count} ({makes_without_models_count/total_makes*100:.2f}%)\")\n", + "\n", + "# Display the first 10 makes without models\n", + "if makes_without_models:\n", + " print(\"\\nSample of car makes without models:\")\n", + " for make in makes_without_models[:10]:\n", + " print(f" + ], + "id": "7807a14272fbf44b" + }, + { + "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, + "source": [ + "# Get all car models\n", + "all_models = CarModel.objects.all()\n", + "total_models = all_models.count()\n", + "\n", + "# Find models without series using annotations\n", + "models_without_series = CarModel.objects.annotate(serie_count=Count('carserie')).filter(serie_count=0)\n", + "models_without_series_count = models_without_series.count()\n", + "\n", + "print(f\"\\nTotal car models: {total_models}\")\n", + "print(f\"Car models without series: {models_without_series_count} ({models_without_series_count/total_models*100:.2f}%)\")\n", + "\n", + "# Display the first 10 models without series\n", + "if models_without_series:\n", + " print(\"\\nSample of car models without series:\")\n", + " for model in models_without_series[:10]:\n", + " print(f\"- {model.name} (Make: {model.id_car_make." + ], + "id": "318b5426d54f0705" + }, + { + "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, + "source": [ + "# Get all car series\n", + "all_series = CarSerie.objects.all()\n", + "total_series = all_series.count()\n", + "\n", + "# Find series without trims using annotations\n", + "series_without_trims = CarSerie.objects.annotate(trim_count=Count('cartrim')).filter(trim_count=0)\n", + "series_without_trims_count = series_without_trims.count()\n", + "\n", + "print(f\"\\nTotal car series: {total_series}\")\n", + "print(f\"Car series without trims: {series_without_trims_count} ({series_without_trims_count/total_series*100:.2f}%)\")\n", + "\n", + "# Display the first 10 series without trims\n", + "if series_without_trims:\n", + " print(\"\\nSample of car series without trims:\")\n", + " for serie in series_without_trims[:10]:\n", + " print(f\"- {serie.name} (Model: {serie.id_car_model.name}, Make: {serie.id_car_model.id_car_make." + ], + "id": "30eaf3383d2b34e1" + }, + { + "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, + "source": [ + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "\n", + "# Data for the chart\n", + "categories = ['Makes', 'Models', 'Series']\n", + "total_counts = [total_makes, total_models, total_series]\n", + "empty_counts = [makes_without_models_count, models_without_series_count, series_without_trims_count]\n", + "with_children_counts = [total_makes - makes_without_models_count,\n", + " total_models - models_without_series_count,\n", + " total_series - series_without_trims_count]\n", + "\n", + "# Create a figure with two subplots\n", + "fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(15, 6))\n", + "\n", + "# Bar chart showing total vs. without children\n", + "x = np.arange(len(categories))\n", + "width = 0.35\n", + "\n", + "ax1.bar(x - width/2, total_counts, width, label='Total')\n", + "ax1.bar(x + width/2, empty_counts, width, label='Without children')\n", + "ax1.set_xticks(x)\n", + "ax1.set_xticklabels(categories)\n", + "ax1.set_ylabel('Count')\n", + "ax1.set_title('Car Hierarchy Analysis')\n", + "ax1.legend()\n", + "\n", + "# Pie charts showing percentage with/without children\n", + "labels = ['With children', 'Without children']\n", + "sizes = [[with_children_counts[i], empty_counts[i]] for i in range(3)]\n", + "colors = [['#66b3ff', '#ff9999'], ['#99ff99', '#ffcc99'], ['#c2c2f0', '#ffb3e6']]\n", + "\n", + "for i, category in enumerate(categories):\n", + " if i == 0:\n", + " ax2.pie(sizes[i], labels=labels, colors=colors[i], autopct='%1.1f%%',\n", + " startangle=90, wedgeprops={'alpha':0.7})\n", + " centre_circle = plt.Circle((0,0),0.70,fc='white')\n", + " ax2.add_patch(centre_circle)\n", + " ax2.text(0, 0, category, horizontalalignment='center', verticalalignment='center')\n", + " else:\n", + " # Calculate position for smaller pie charts\n", + " x_offset = 1.2 * (i-1)\n", + " ax2.pie(sizes[i], colors=colors[i], autopct='%1.1f%%',\n", + " startangle=90, wedgeprops={'alpha':0.7},\n", + " center=(x_offset, 0), radius=0.5)\n", + " centre_circle = plt.Circle((x_offset,0),0.35,fc='white')\n", + " ax2.add_patch(centre_circle)\n", + " ax2.text(x_offset, 0, category, horizontalalignment='center', verticalalignment='center')\n", + "\n", + "ax2.axis('equal')\n", + "ax2.set_title('Percentage Distribution')\n", + "\n", + "plt.tight_layout()\n", + "plt.show()" + ], + "id": "d23f0edf1ff334f7" + }, + { + "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, + "source": [ + "# Find all trims and go up the hierarchy to find complete chains\n", + "complete_hierarchies = []\n", + "\n", + "for trim in CarTrim.objects.select_related('id_car_serie__id_car_model__id_car_make')[:20]:\n", + " serie = trim.id_car_serie\n", + " model = serie.id_car_model\n", + " make = model.id_car_make\n", + "\n", + " complete_hierarchies.append({\n", + " 'make': make.name,\n", + " 'model': model.name,\n", + " 'serie': serie.name,\n", + " 'trim': trim.name\n", + " })\n", + "\n", + "# Display as a formatted table\n", + "from IPython.display import display, HTML\n", + "import pandas as pd\n", + "\n", + "if complete_hierarchies:\n", + " print(\"\\nSample of complete car hierarchies:\")\n", + " df = pd.DataFrame(complete_hierarchies)\n", + " display(HTML(df.to_html(index=False" + ], + "id": "3cd9822a8ac1a880" + }, + { + "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, + "source": [ + "# Create DataFrames for export\n", + "import pandas as pd\n", + "\n", + "# Makes without models\n", + "makes_without_models_df = pd.DataFrame({\n", + " 'make_id': [make.id_car_make for make in makes_without_models],\n", + " 'make_name': [make.name for make in makes_without_models],\n", + " 'is_sa_import': [make.is_sa_import for make in makes_without_models]\n", + "})\n", + "\n", + "# Models without series\n", + "models_without_series_df = pd.DataFrame({\n", + " 'model_id': [model.id_car_model for model in models_without_series],\n", + " 'model_name': [model.name for model in models_without_series],\n", + " 'make_id': [model.id_car_make.id_car_make for model in models_without_series],\n", + " 'make_name': [model.id_car_make.name for model in models_without_series]\n", + "})\n", + "\n", + "# Series without trims\n", + "series_without_trims_df = pd.DataFrame({\n", + " 'serie_id': [serie.id_car_serie for serie in series_without_trims],\n", + " 'serie_name': [serie.name for serie in series_without_trims],\n", + " 'model_id': [serie.id_car_model.id_car_model for serie in series_without_trims],\n", + " 'model_name': [serie.id_car_model.name for serie in series_without_trims],\n", + " 'make_id': [serie.id_car_model.id_car_make.id_car_make for serie in series_without_trims],\n", + " 'make_name': [serie.id_car_model.id_car_make.name for serie in series_without_trims]\n", + "})\n", + "\n", + "# Save to CSV files (uncomment to use)\n", + "# makes_without_models_df.to_csv('makes_without_models.csv', index=False)\n", + "# models_without_series_df.to_csv('models_without_series.csv', index=False)\n", + "# series_without_trims_df.to_csv('series_without_trims.csv', index=False)\n", + "\n", + "# Display the first few rows of each DataFrame\n", + "print(\"\\nMakes without models (first 5):\")\n", + "display(makes_without_models_df.head())\n", + "\n", + "print(\"\\nModels without series (first 5):\")\n", + "display(models_without_series_df.head())\n", + "\n", + "print(\"\\nSeries without trims (first 5):\")\n", + "display(series_without_trims_df.head())" + ], + "id": "6edeb052b327a48c" + } + ], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/inventory/management/commands/analyze_car_hierarchy.py b/inventory/management/commands/analyze_car_hierarchy.py new file mode 100644 index 00000000..bb7a35b0 --- /dev/null +++ b/inventory/management/commands/analyze_car_hierarchy.py @@ -0,0 +1,139 @@ +from django.core.management.base import BaseCommand +from django.db.models import Count +from inventory.models import CarMake, CarModel, CarSerie, CarTrim +import csv +import os +from django.conf import settings + + +class Command(BaseCommand): + help = 'Analyzes the car hierarchy to identify makes without models, models without series, and series without trims' + + def add_arguments(self, parser): + parser.add_argument( + '--export', + action='store_true', + help='Export results to CSV files', + ) + parser.add_argument( + '--export-path', + type=str, + default='exports', + help='Directory to export CSV files (default: "exports")', + ) + + def handle(self, *args, **options): + export = options['export'] + export_path = options['export_path'] + + # Create export directory if needed + if export: + export_dir = os.path.join(settings.BASE_DIR, export_path) + if not os.path.exists(export_dir): + os.makedirs(export_dir) + + # Analyze makes without models + all_makes = CarMake.objects.all() + total_makes = all_makes.count() + makes_without_models = CarMake.objects.annotate(model_count=Count('carmodel')).filter(model_count=0) + makes_without_models_count = makes_without_models.count() + + self.stdout.write(self.style.SUCCESS(f"Total car makes: {total_makes}")) + self.stdout.write(self.style.SUCCESS( + f"Car makes without models: {makes_without_models_count} " + f"({makes_without_models_count/total_makes*100:.2f}% of all makes)" + )) + + if makes_without_models_count > 0: + self.stdout.write("\nSample of car makes without models:") + for make in makes_without_models[:5]: + self.stdout.write(f"- {make.name}") + + # Analyze models without series + all_models = CarModel.objects.all() + total_models = all_models.count() + models_without_series = CarModel.objects.annotate(serie_count=Count('carserie')).filter(serie_count=0) + models_without_series_count = models_without_series.count() + + self.stdout.write(self.style.SUCCESS(f"\nTotal car models: {total_models}")) + self.stdout.write(self.style.SUCCESS( + f"Car models without series: {models_without_series_count} " + f"({models_without_series_count/total_models*100:.2f}% of all models)" + )) + + if models_without_series_count > 0: + self.stdout.write("\nSample of car models without series:") + for model in models_without_series[:5]: + self.stdout.write(f"- {model.name} (Make: {model.id_car_make.name})") + + # Analyze series without trims + all_series = CarSerie.objects.all() + total_series = all_series.count() + series_without_trims = CarSerie.objects.annotate(trim_count=Count('cartrim')).filter(trim_count=0) + series_without_trims_count = series_without_trims.count() + + self.stdout.write(self.style.SUCCESS(f"\nTotal car series: {total_series}")) + self.stdout.write(self.style.SUCCESS( + f"Car series without trims: {series_without_trims_count} " + f"({series_without_trims_count/total_series*100:.2f}% of all series)" + )) + + if series_without_trims_count > 0: + self.stdout.write("\nSample of car series without trims:") + for serie in series_without_trims[:5]: + self.stdout.write( + f"- {serie.name} (Model: {serie.id_car_model.name}, " + f"Make: {serie.id_car_model.id_car_make.name})" + ) + + # Export data if requested + if export: + # Export makes without models + if makes_without_models_count > 0: + filepath = os.path.join(export_dir, 'makes_without_models.csv') + with open(filepath, 'w', newline='') as csvfile: + writer = csv.writer(csvfile) + writer.writerow(['make_id', 'make_name', 'is_sa_import']) + for make in makes_without_models: + writer.writerow([make.id_car_make, make.name, make.is_sa_import]) + self.stdout.write(self.style.SUCCESS(f"Exported makes without models to {filepath}")) + + # Export models without series + if models_without_series_count > 0: + filepath = os.path.join(export_dir, 'models_without_series.csv') + with open(filepath, 'w', newline='') as csvfile: + writer = csv.writer(csvfile) + writer.writerow(['model_id', 'model_name', 'make_id', 'make_name']) + for model in models_without_series: + writer.writerow([ + model.id_car_model, + model.name, + model.id_car_make.id_car_make, + model.id_car_make.name + ]) + self.stdout.write(self.style.SUCCESS(f"Exported models without series to {filepath}")) + + # Export series without trims + if series_without_trims_count > 0: + filepath = os.path.join(export_dir, 'series_without_trims.csv') + with open(filepath, 'w', newline='') as csvfile: + writer = csv.writer(csvfile) + writer.writerow(['serie_id', 'serie_name', 'model_id', 'model_name', 'make_id', 'make_name']) + for serie in series_without_trims: + writer.writerow([ + serie.id_car_serie, + serie.name, + serie.id_car_model.id_car_model, + serie.id_car_model.name, + serie.id_car_model.id_car_make.id_car_make, + serie.id_car_model.id_car_make.name + ]) + self.stdout.write(self.style.SUCCESS(f"Exported series without trims to {filepath}")) + + # Summary + self.stdout.write("\n" + "="*50) + self.stdout.write(self.style.SUCCESS("SUMMARY")) + self.stdout.write("="*50) + self.stdout.write(f"Total makes: {total_makes} | Without models: {makes_without_models_count} ({makes_without_models_count/total_makes*100:.2f}%)") + self.stdout.write(f"Total models: {total_models} | Without series: {models_without_series_count} ({models_without_series_count/total_models*100:.2f}%)") + self.stdout.write(f"Total series: {total_series} | Without trims: {series_without_trims_count} ({series_without_trims_count/total_series*100:.2f}%)") diff --git a/inventory/templatetags/custom_filters.py b/inventory/templatetags/custom_filters.py index 6813139f..72fb9be5 100644 --- a/inventory/templatetags/custom_filters.py +++ b/inventory/templatetags/custom_filters.py @@ -1,10 +1,13 @@ +from typing import Union from random import randint from django import template -from calendar import month_abbr from django.urls import reverse +from calendar import month_abbr +from django.conf import settings +from django.forms import ValidationError from django.utils.formats import number_format from django_ledger.io.io_core import get_localdate,validate_activity -from django.conf import settings +from django_ledger.models import InvoiceModel, JournalEntryModel, BillModel register = template.Library() @@ -390,3 +393,28 @@ def bill_item_formset_table(context, item_formset): 'total_amount__sum': context['total_amount__sum'], 'item_formset': item_formset, } + +@register.inclusion_tag('bill/transactions/tags/txs_table.html') +def transactions_table(object_type: Union[JournalEntryModel, BillModel, InvoiceModel], style='detail'): + if isinstance(object_type, JournalEntryModel): + transaction_model_qs = object_type.transactionmodel_set.all().with_annotated_details().order_by( + '-timestamp') + elif isinstance(object_type, BillModel): + transaction_model_qs = object_type.get_transaction_queryset(annotated=True).order_by('-timestamp') + elif isinstance(object_type, InvoiceModel): + transaction_model_qs = object_type.get_transaction_queryset(annotated=True).order_by('-timestamp') + else: + raise ValidationError( + 'Cannot handle object of type {} to get transaction model queryset'.format(type(object_type)) + ) + + total_credits = sum(tx.amount for tx in transaction_model_qs if tx.is_credit()) + total_debits = sum(tx.amount for tx in transaction_model_qs if tx.is_debit()) + + return { + 'style': style, + 'transaction_model_qs': transaction_model_qs, + 'total_debits': total_debits, + 'total_credits': total_credits, + 'object': object_type + } diff --git a/static/.DS_Store b/static/.DS_Store index fa3d2357..d14b0976 100644 Binary files a/static/.DS_Store and b/static/.DS_Store differ diff --git a/static/images/.DS_Store b/static/images/.DS_Store index 3d7a2676..84f8b6ec 100644 Binary files a/static/images/.DS_Store and b/static/images/.DS_Store differ diff --git a/static/images/cars/.DS_Store b/static/images/cars/.DS_Store new file mode 100644 index 00000000..407618a1 Binary files /dev/null and b/static/images/cars/.DS_Store differ diff --git a/static/images/cars/bus.png b/static/images/cars/bus.png new file mode 100644 index 00000000..dc963fda Binary files /dev/null and b/static/images/cars/bus.png differ diff --git a/static/images/cars/cabriolet.png b/static/images/cars/cabriolet.png new file mode 100644 index 00000000..37a8374e Binary files /dev/null and b/static/images/cars/cabriolet.png differ diff --git a/static/images/cars/commercial.png b/static/images/cars/commercial.png new file mode 100644 index 00000000..1d1a0c48 Binary files /dev/null and b/static/images/cars/commercial.png differ diff --git a/static/images/cars/coupe.png b/static/images/cars/coupe.png new file mode 100644 index 00000000..cf2d44d1 Binary files /dev/null and b/static/images/cars/coupe.png differ diff --git a/static/images/cars/crossover.png b/static/images/cars/crossover.png new file mode 100644 index 00000000..4596c87d Binary files /dev/null and b/static/images/cars/crossover.png differ diff --git a/static/images/cars/double_pickup.png b/static/images/cars/double_pickup.png new file mode 100644 index 00000000..32ef5af4 Binary files /dev/null and b/static/images/cars/double_pickup.png differ diff --git a/static/images/cars/hatchback.png b/static/images/cars/hatchback.png new file mode 100644 index 00000000..1fb33a5c Binary files /dev/null and b/static/images/cars/hatchback.png differ diff --git a/static/images/cars/minivan.png b/static/images/cars/minivan.png new file mode 100644 index 00000000..b48a9c44 Binary files /dev/null and b/static/images/cars/minivan.png differ diff --git a/static/images/cars/sedan.png b/static/images/cars/sedan.png new file mode 100644 index 00000000..22242c4f Binary files /dev/null and b/static/images/cars/sedan.png differ diff --git a/static/images/cars/single_pickup.png b/static/images/cars/single_pickup.png new file mode 100644 index 00000000..c30fc028 Binary files /dev/null and b/static/images/cars/single_pickup.png differ diff --git a/static/images/cars/sport_car.png b/static/images/cars/sport_car.png new file mode 100644 index 00000000..588cb34c Binary files /dev/null and b/static/images/cars/sport_car.png differ diff --git a/static/images/cars/suv.png b/static/images/cars/suv.png new file mode 100644 index 00000000..d42e6d94 Binary files /dev/null and b/static/images/cars/suv.png differ diff --git a/static/images/cars/van.png b/static/images/cars/van.png new file mode 100644 index 00000000..aee53afe Binary files /dev/null and b/static/images/cars/van.png differ diff --git a/static/images/cars/van_cargo.png b/static/images/cars/van_cargo.png new file mode 100644 index 00000000..6a9d2749 Binary files /dev/null and b/static/images/cars/van_cargo.png differ diff --git a/static/images/convertible.svg b/static/images/convertible.svg new file mode 100644 index 00000000..277ed941 --- /dev/null +++ b/static/images/convertible.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/images/coupe.svg b/static/images/coupe.svg new file mode 100644 index 00000000..8097cff5 --- /dev/null +++ b/static/images/coupe.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/images/sedan.svg b/static/images/sedan.svg new file mode 100644 index 00000000..b560e504 --- /dev/null +++ b/static/images/sedan.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/images/suv.svg b/static/images/suv.svg new file mode 100644 index 00000000..cd8f1e9e --- /dev/null +++ b/static/images/suv.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/templates/bill/bill_detail.html b/templates/bill/bill_detail.html index f85f30aa..568ddc95 100644 --- a/templates/bill/bill_detail.html +++ b/templates/bill/bill_detail.html @@ -2,6 +2,7 @@ {% load i18n %} {% load static %} {% load django_ledger %} +{% load custom_filters %} {% block title %}Bill Details - {{ block.super }}{% endblock %} @@ -64,7 +65,7 @@
{% trans 'Cash Account' %}: - {{ bill.cash_account.code }} @@ -79,7 +80,7 @@
{% trans 'Prepaid Account' %}: - {{ bill.prepaid_account.code }} @@ -93,7 +94,7 @@
{% trans 'Accounts Payable' %}: - {{ bill.unearned_account.code }} diff --git a/templates/bill/transactions/tags/txs_table.html b/templates/bill/transactions/tags/txs_table.html new file mode 100644 index 00000000..0e801373 --- /dev/null +++ b/templates/bill/transactions/tags/txs_table.html @@ -0,0 +1,73 @@ +{% load i18n %} +{% load django_ledger %} + +{% if style == 'detail' %} +
+ + + + + + + + + + + + + + {% for transaction_model in transaction_model_qs %} + + + + + + + + + + {% endfor %} + + + + + + + + +
{% trans 'Timestamp' %}{% trans 'Account' %}{% trans 'Account Name' %}{% trans 'Unit' %}{% trans 'Credit' %}{% trans 'Debit' %}{% trans 'Description' %}
{{ transaction_model.timestamp }}{{ transaction_model.account_code }}{{ transaction_model.account_name }}{% if transaction_model.entity_unit_name %}{{ transaction_model.entity_unit_name }}{% endif %}{% if transaction_model.is_credit %}${{ transaction_model.amount | currency_format }}{% endif %}{% if transaction_model.is_debit %}${{ transaction_model.amount | currency_format }}{% endif %}{% if transaction_model.description %}{{ transaction_model.description }}{% endif %}
{% trans 'Total' %}{% currency_symbol %}{{ total_credits | currency_format }}{% currency_symbol %}{{ total_debits | currency_format }}
+
+{% elif style == 'compact' %} +
+ + + + + + + + + + + + {% for transaction_model in transaction_model_qs %} + + + + + + + + {% endfor %} + + + + + + + + +
{% trans 'Account' %}{% trans 'Account Name' %}{% trans 'Credit' %}{% trans 'Debit' %}{% trans 'Description' %}
{{ transaction_model.account_code }}{{ transaction_model.account_name }}{% if transaction_model.is_credit %}${{ transaction_model.amount | currency_format }}{% endif %}{% if transaction_model.is_debit %}${{ transaction_model.amount | currency_format }}{% endif %}{% if transaction_model.description %}{{ transaction_model.description }}{% endif %}
{% trans 'Total' %}{% currency_symbol %}{{ total_credits | currency_format }}{% currency_symbol %}{{ total_debits | currency_format }}
+
+{% endif %} + diff --git a/templates/header.html b/templates/header.html index c66156b1..386f4a00 100644 --- a/templates/header.html +++ b/templates/header.html @@ -38,7 +38,14 @@ + diff --git a/templates/inventory/car_list_view.html b/templates/inventory/car_list_view.html index 0a71c589..7716231d 100644 --- a/templates/inventory/car_list_view.html +++ b/templates/inventory/car_list_view.html @@ -145,6 +145,10 @@ hx-on::after-request="filter_after_request()">{{ _("Search") }}
+
+ + +
+ +
+ +
+ {{ _("VIN") }} {{ _("Make") }} {{ _("Model") }} @@ -174,7 +183,12 @@ {% for car in cars %} - + + +
+ +
+ {{ car.vin }} @@ -297,5 +311,20 @@ document.querySelector('.car_status').removeAttribute('disabled') } + document.getElementById('select-all').addEventListener('change', function() { + const checkboxes = document.querySelectorAll('#project-list-table-body input[type="checkbox"]'); + checkboxes.forEach(checkbox => { + checkbox.checked = this.checked; + }); + }); + document.getElementById('car-checkbox').addEventListener('change', function() { + const form = document.querySelector('.update-price-form'); + if (this.checked) { + form.classList.remove('d-none'); + } else { + form.classList.add('d-none'); + } + }); + {% endblock customJS %}