Compare commits
No commits in common. "f776b5377ea9fbe04ebc483d3b7ae5f23ed4bda9" and "38e52d5e30e8f1ece99934543750b4b067ebfaa6" have entirely different histories.
f776b5377e
...
38e52d5e30
20
colors.txt
@ -1,20 +0,0 @@
|
|||||||
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"
|
|
||||||
]
|
|
||||||
@ -1,2 +0,0 @@
|
|||||||
make_id,make_name,is_sa_import
|
|
||||||
4148,DFM,False
|
|
||||||
|
@ -1,560 +0,0 @@
|
|||||||
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
|
|
||||||
|
@ -1,431 +0,0 @@
|
|||||||
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)
|
|
||||||
|
@ -1,248 +0,0 @@
|
|||||||
{
|
|
||||||
"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
|
|
||||||
}
|
|
||||||
@ -1,139 +0,0 @@
|
|||||||
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}%)")
|
|
||||||
@ -1,13 +1,10 @@
|
|||||||
from typing import Union
|
|
||||||
from random import randint
|
from random import randint
|
||||||
from django import template
|
from django import template
|
||||||
from django.urls import reverse
|
|
||||||
from calendar import month_abbr
|
from calendar import month_abbr
|
||||||
from django.conf import settings
|
from django.urls import reverse
|
||||||
from django.forms import ValidationError
|
|
||||||
from django.utils.formats import number_format
|
from django.utils.formats import number_format
|
||||||
from django_ledger.io.io_core import get_localdate,validate_activity
|
from django_ledger.io.io_core import get_localdate,validate_activity
|
||||||
from django_ledger.models import InvoiceModel, JournalEntryModel, BillModel
|
from django.conf import settings
|
||||||
|
|
||||||
register = template.Library()
|
register = template.Library()
|
||||||
|
|
||||||
@ -393,125 +390,3 @@ def bill_item_formset_table(context, item_formset):
|
|||||||
'total_amount__sum': context['total_amount__sum'],
|
'total_amount__sum': context['total_amount__sum'],
|
||||||
'item_formset': item_formset,
|
'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
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@register.filter
|
|
||||||
def get_vehicle_image(car_serie):
|
|
||||||
"""
|
|
||||||
Returns the appropriate car image filename based on car series
|
|
||||||
"""
|
|
||||||
if not car_serie:
|
|
||||||
return 'sedan.png'
|
|
||||||
|
|
||||||
serie_lower = car_serie.name.lower()
|
|
||||||
|
|
||||||
# SUV mapping
|
|
||||||
if 'suv' in serie_lower:
|
|
||||||
if 'sport' in serie_lower or '3 doors' in serie_lower:
|
|
||||||
return 'crossover.png'
|
|
||||||
else:
|
|
||||||
return 'suv.png'
|
|
||||||
|
|
||||||
# Pickup mapping
|
|
||||||
elif 'pickup' in serie_lower:
|
|
||||||
if 'cabriolet' in serie_lower:
|
|
||||||
return 'pickup_cabriolet.png'
|
|
||||||
elif 'double' in serie_lower or 'crew' in serie_lower:
|
|
||||||
return 'double_pickup.png'
|
|
||||||
else:
|
|
||||||
return 'single_pickup.png'
|
|
||||||
|
|
||||||
# Van/Minivan mapping
|
|
||||||
elif 'minivan' in serie_lower:
|
|
||||||
return 'minivan.png'
|
|
||||||
elif 'van' in serie_lower:
|
|
||||||
if 'cargo' in serie_lower:
|
|
||||||
return 'van_cargo.png'
|
|
||||||
else:
|
|
||||||
return 'van.png'
|
|
||||||
elif 'compactvan' in serie_lower:
|
|
||||||
return 'van.png'
|
|
||||||
|
|
||||||
# Hatchback mapping
|
|
||||||
elif 'hatchback' in serie_lower:
|
|
||||||
return 'hatchback.png'
|
|
||||||
|
|
||||||
# Wagon mapping
|
|
||||||
elif 'wagon' in serie_lower:
|
|
||||||
return 'van.png' # Closest match
|
|
||||||
|
|
||||||
# Coupe/Sports mapping
|
|
||||||
elif 'cabriolet' in serie_lower:
|
|
||||||
return 'cabriolet.png'
|
|
||||||
elif 'coupe' in serie_lower:
|
|
||||||
return 'coupe.png'
|
|
||||||
elif 'speedster' in serie_lower:
|
|
||||||
return 'sport_car.png'
|
|
||||||
|
|
||||||
# Liftback mapping
|
|
||||||
elif 'liftback' in serie_lower:
|
|
||||||
return 'hatchback.png' # Closest match
|
|
||||||
|
|
||||||
# Sedan mapping (including 2 doors)
|
|
||||||
elif 'sedan' in serie_lower:
|
|
||||||
if '2 doors' in serie_lower:
|
|
||||||
return 'coupe.png'
|
|
||||||
else:
|
|
||||||
return 'sedan.png'
|
|
||||||
|
|
||||||
# Default fallback
|
|
||||||
else:
|
|
||||||
return 'sedan.png'
|
|
||||||
|
|
||||||
|
|
||||||
@register.filter
|
|
||||||
def get_vehicle_type_name(car_serie):
|
|
||||||
"""
|
|
||||||
Returns the vehicle type name for styling purposes
|
|
||||||
"""
|
|
||||||
if not car_serie:
|
|
||||||
return 'sedan'
|
|
||||||
|
|
||||||
serie_lower = car_serie.name.lower()
|
|
||||||
|
|
||||||
if 'suv' in serie_lower:
|
|
||||||
return 'suv'
|
|
||||||
elif 'pickup' in serie_lower:
|
|
||||||
return 'pickup'
|
|
||||||
elif any(word in serie_lower for word in ['van', 'minivan']):
|
|
||||||
return 'van'
|
|
||||||
elif 'hatchback' in serie_lower:
|
|
||||||
return 'hatchback'
|
|
||||||
elif 'wagon' in serie_lower:
|
|
||||||
return 'wagon'
|
|
||||||
elif any(word in serie_lower for word in ['coupe', 'cabriolet', 'speedster']):
|
|
||||||
return 'coupe'
|
|
||||||
elif 'liftback' in serie_lower:
|
|
||||||
return 'liftback'
|
|
||||||
else:
|
|
||||||
return 'sedan'
|
|
||||||
@ -6121,7 +6121,7 @@ class BillDetailView(LoginRequiredMixin, PermissionRequiredMixin, DetailView):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
model = BillModel
|
model = BillModel
|
||||||
template_name = "bill/bill_detail.html"
|
template_name = "ledger/bills/bill_detail.html"
|
||||||
context_object_name = "bill"
|
context_object_name = "bill"
|
||||||
permission_required = ["django_ledger.view_billmodel"]
|
permission_required = ["django_ledger.view_billmodel"]
|
||||||
|
|
||||||
@ -9200,7 +9200,7 @@ def upload_cars(request,pk=None):
|
|||||||
if pk:
|
if pk:
|
||||||
item = get_object_or_404(ItemTransactionModel, pk=pk)
|
item = get_object_or_404(ItemTransactionModel, pk=pk)
|
||||||
response = redirect('upload_cars', pk=pk)
|
response = redirect('upload_cars', pk=pk)
|
||||||
if item.item_model.additional_info.get("uploaded"):
|
if item.item_model.additional_info["uploaded"]:
|
||||||
messages.add_message(request, messages.ERROR, 'Item already uploaded.')
|
messages.add_message(request, messages.ERROR, 'Item already uploaded.')
|
||||||
return redirect('view_items_inventory', entity_slug=dealer.slug, po_pk=item.po_model.pk)
|
return redirect('view_items_inventory', entity_slug=dealer.slug, po_pk=item.po_model.pk)
|
||||||
|
|
||||||
@ -9254,7 +9254,7 @@ def upload_cars(request,pk=None):
|
|||||||
manufacturer_name, model_name, year_model = result.values()
|
manufacturer_name, model_name, year_model = result.values()
|
||||||
car_make = get_make(manufacturer_name)
|
car_make = get_make(manufacturer_name)
|
||||||
car_model = get_model(model_name, car_make)
|
car_model = get_model(model_name, car_make)
|
||||||
if not all([car_make, car_model]) or (make.pk != car_make.pk) or (model.pk != car_model.pk):
|
if not all([car_make, car_model]) or (make.pk != car_make.pk) or (model.pk != car_model.pk) or (int(year) != int(year_model)):
|
||||||
messages.error(request, f"invalid data at vin {row['vin']}, Please upload a valid CSV file")
|
messages.error(request, f"invalid data at vin {row['vin']}, Please upload a valid CSV file")
|
||||||
return response
|
return response
|
||||||
|
|
||||||
@ -9267,7 +9267,7 @@ def upload_cars(request,pk=None):
|
|||||||
id_car_model=model,
|
id_car_model=model,
|
||||||
id_car_serie=serie,
|
id_car_serie=serie,
|
||||||
id_car_trim=trim,
|
id_car_trim=trim,
|
||||||
year=int(year_model),
|
year=int(year),
|
||||||
vendor=vendor,
|
vendor=vendor,
|
||||||
receiving_date=receiving_date,
|
receiving_date=receiving_date,
|
||||||
)
|
)
|
||||||
|
|||||||
BIN
static/.DS_Store
vendored
BIN
static/images/.DS_Store
vendored
BIN
static/images/cars/.DS_Store
vendored
|
Before Width: | Height: | Size: 1.2 MiB |
|
Before Width: | Height: | Size: 1.2 MiB |
|
Before Width: | Height: | Size: 1.1 MiB |
|
Before Width: | Height: | Size: 1003 KiB |
|
Before Width: | Height: | Size: 1.0 MiB |
|
Before Width: | Height: | Size: 1.4 MiB |
|
Before Width: | Height: | Size: 1.0 MiB |
|
Before Width: | Height: | Size: 1.3 MiB |
|
Before Width: | Height: | Size: 987 KiB |
|
Before Width: | Height: | Size: 1.3 MiB |
|
Before Width: | Height: | Size: 1.3 MiB |
|
Before Width: | Height: | Size: 1.4 MiB |
|
Before Width: | Height: | Size: 1.1 MiB |
|
Before Width: | Height: | Size: 1.1 MiB |
|
Before Width: | Height: | Size: 6.0 KiB |
|
Before Width: | Height: | Size: 6.9 KiB |
|
Before Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 6.7 KiB |
|
Before Width: | Height: | Size: 8.6 KiB |
@ -2,7 +2,6 @@
|
|||||||
{% load i18n %}
|
{% load i18n %}
|
||||||
{% load static %}
|
{% load static %}
|
||||||
{% load django_ledger %}
|
{% load django_ledger %}
|
||||||
{% load custom_filters %}
|
|
||||||
|
|
||||||
{% block title %}Bill Details - {{ block.super }}{% endblock %}
|
{% block title %}Bill Details - {{ block.super }}{% endblock %}
|
||||||
|
|
||||||
@ -30,8 +29,6 @@
|
|||||||
|
|
||||||
max-height:30rem;
|
max-height:30rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
@ -44,9 +41,11 @@
|
|||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
{% include 'bill/includes/card_bill.html' with bill=bill entity_slug=view.kwargs.entity_slug style='bill-detail' %}
|
{% include 'bill/includes/card_bill.html' with bill=bill entity_slug=view.kwargs.entity_slug style='bill-detail' %}
|
||||||
<hr class="my-4">
|
<hr class="my-4">
|
||||||
{% include 'bill/includes/card_vendor.html' with vendor=bill.vendor %}
|
|
||||||
<div class="d-grid mt-4">
|
{% include 'django_ledger/vendor/includes/card_vendor.html' with vendor=bill.vendor %}
|
||||||
<a href="{% url 'bill_list' %}"
|
|
||||||
|
<div class="d-grid mt-8">
|
||||||
|
<a href="{% url 'django_ledger:bill-list' entity_slug=view.kwargs.entity_slug %}"
|
||||||
class="btn btn-phoenix-primary">
|
class="btn btn-phoenix-primary">
|
||||||
<i class="fas fa-arrow-left me-1"></i> {% trans 'Bill List' %}
|
<i class="fas fa-arrow-left me-1"></i> {% trans 'Bill List' %}
|
||||||
</a>
|
</a>
|
||||||
@ -65,7 +64,7 @@
|
|||||||
<div class="border rounded p-3">
|
<div class="border rounded p-3">
|
||||||
<h6 class="text-uppercase text-xs text-muted mb-2">
|
<h6 class="text-uppercase text-xs text-muted mb-2">
|
||||||
{% trans 'Cash Account' %}:
|
{% trans 'Cash Account' %}:
|
||||||
<a href="{% url 'account_detail' bill.cash_account.uuid %}"
|
<a href="{% url 'django_ledger:account-detail' account_pk=bill.cash_account.uuid coa_slug=bill.cash_account.coa_model.slug entity_slug=view.kwargs.entity_slug %}"
|
||||||
class="text-decoration-none ms-1">
|
class="text-decoration-none ms-1">
|
||||||
{{ bill.cash_account.code }}
|
{{ bill.cash_account.code }}
|
||||||
</a>
|
</a>
|
||||||
@ -80,7 +79,7 @@
|
|||||||
<div class="border rounded p-3">
|
<div class="border rounded p-3">
|
||||||
<h6 class="text-uppercase text-xs text-muted mb-2">
|
<h6 class="text-uppercase text-xs text-muted mb-2">
|
||||||
{% trans 'Prepaid Account' %}:
|
{% trans 'Prepaid Account' %}:
|
||||||
<a href="{% url 'account_detail' bill.prepaid_account.uuid %}"
|
<a href="{% url 'django_ledger:account-detail' account_pk=bill.prepaid_account.uuid coa_slug=bill.prepaid_account.coa_model.slug entity_slug=view.kwargs.entity_slug %}"
|
||||||
class="text-decoration-none ms-1">
|
class="text-decoration-none ms-1">
|
||||||
{{ bill.prepaid_account.code }}
|
{{ bill.prepaid_account.code }}
|
||||||
</a>
|
</a>
|
||||||
@ -94,7 +93,7 @@
|
|||||||
<div class="border rounded p-3">
|
<div class="border rounded p-3">
|
||||||
<h6 class="text-uppercase text-xs text-muted mb-2">
|
<h6 class="text-uppercase text-xs text-muted mb-2">
|
||||||
{% trans 'Accounts Payable' %}:
|
{% trans 'Accounts Payable' %}:
|
||||||
<a href="{% url 'account_detail' bill.unearned_account.uuid %}"
|
<a href="{% url 'django_ledger:account-detail' account_pk=bill.unearned_account.uuid coa_slug=bill.unearned_account.coa_model.slug entity_slug=view.kwargs.entity_slug %}"
|
||||||
class="text-decoration-none ms-1">
|
class="text-decoration-none ms-1">
|
||||||
{{ bill.unearned_account.code }}
|
{{ bill.unearned_account.code }}
|
||||||
</a>
|
</a>
|
||||||
@ -141,15 +140,15 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="card-body px-0 pt-0 pb-2">
|
<div class="card-body px-0 pt-0 pb-2">
|
||||||
<div class="table-responsive">
|
<div class="table-responsive">
|
||||||
<table class="table table-hover">
|
<table class="table table-hover align-items-center mb-0">
|
||||||
<thead >
|
<thead >
|
||||||
<tr class="bg-body-highlight">
|
<tr>
|
||||||
<th class="sort white-space-nowrap align-middle" scope="col">{% trans 'Item' %}</th>
|
<th class="sort white-space-nowrap align-middle" scope="col">{% trans 'Item' %}</th>
|
||||||
<th class="sort white-space-nowrap align-middle" scope="col">{% trans 'Entity Unit' %}</th>
|
<th class="sort white-space-nowrap align-middle" scope="col">{% trans 'Entity Unit' %}</th>
|
||||||
<th class="sort white-space-nowrap align-middle" scope="col">{% trans 'Unit Cost' %}</th>
|
<th class="sort white-space-nowrap align-middle" scope="col">{% trans 'Unit Cost' %}</th>
|
||||||
<th class="sort white-space-nowrap align-middle" scope="col">{% trans 'Quantity' %}</th>
|
<th class="sort white-space-nowrap align-middle" scope="col">{% trans 'Quantity' %}</th>
|
||||||
<th class="sort white-space-nowrap align-middle" scope="col">{% trans 'Total' %}</th>
|
<th class="sort white-space-nowrap align-middle" scope="col">{% trans 'Total' %}</th>
|
||||||
<th class="sort white-space-nowrap align-middle " scope="col">{% trans 'PO' %}</th>
|
<th class="sort white-space-nowrap align-middle" scope="col">{% trans 'PO' %}</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody class="list" id="project-list-table-body">
|
<tbody class="list" id="project-list-table-body">
|
||||||
@ -182,7 +181,7 @@
|
|||||||
{% currency_symbol %}{{ bill_item.total_amount | currency_format }}
|
{% currency_symbol %}{{ bill_item.total_amount | currency_format }}
|
||||||
</span>
|
</span>
|
||||||
</td>
|
</td>
|
||||||
<td class="align-middle white-space-nowrap pe-2">
|
<td class="align-middle white-space-nowrap">
|
||||||
{% if bill_item.po_model_id %}
|
{% if bill_item.po_model_id %}
|
||||||
<a class="btn btn-sm btn-phoenix-primary"
|
<a class="btn btn-sm btn-phoenix-primary"
|
||||||
href="{% url 'purchase_order_detail' bill_item.po_model_id %}">
|
href="{% url 'purchase_order_detail' bill_item.po_model_id %}">
|
||||||
@ -210,6 +209,46 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
{% if bill.is_active %}
|
||||||
|
<!-- Financial Statements Buttons -->
|
||||||
|
<div class="row mb-4">
|
||||||
|
<div class="col-12">
|
||||||
|
<div class="d-flex justify-content-center gap-2 flex-wrap">
|
||||||
|
<a href="{% url 'django_ledger:ledger-bs' entity_slug=view.kwargs.entity_slug ledger_pk=bill.ledger_id %}"
|
||||||
|
class="btn btn-phoenix-info">
|
||||||
|
{% trans 'Balance Sheet' %}
|
||||||
|
</a>
|
||||||
|
<a href="{% url 'django_ledger:ledger-ic' entity_slug=view.kwargs.entity_slug ledger_pk=bill.ledger_id %}"
|
||||||
|
class="btn btn-phoenix-info">
|
||||||
|
{% trans 'Income Statement' %}
|
||||||
|
</a>
|
||||||
|
<a href="{% url 'django_ledger:ledger-cf' entity_slug=view.kwargs.entity_slug ledger_pk=bill.ledger_id %}"
|
||||||
|
class="btn btn-phoenix-info">
|
||||||
|
{% trans 'Cash Flow Statement' %}
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row mb-4">
|
||||||
|
<div class="col-12">
|
||||||
|
<div class="d-flex justify-content-center gap-2 flex-wrap">
|
||||||
|
<a href="{% url 'django_ledger:ledger-bs-year' entity_slug=view.kwargs.entity_slug ledger_pk=bill.ledger_id year=bill.get_status_action_date.year %}?format=pdf&report_subtitle={{ bill.generate_descriptive_title | safe }}"
|
||||||
|
class="btn btn-phoenix-success">
|
||||||
|
{% trans 'Balance Sheet PDF' %} <i class="fas fa-download ms-1"></i>
|
||||||
|
</a>
|
||||||
|
<a href="{% url 'django_ledger:ledger-ic-year' entity_slug=view.kwargs.entity_slug ledger_pk=bill.ledger_id year=bill.get_status_action_date.year %}?format=pdf&report_subtitle={{ bill.generate_descriptive_title | safe }}"
|
||||||
|
class="btn btn-phoenix-success">
|
||||||
|
{% trans 'Income Statement PDF' %} <i class="fas fa-download ms-1"></i>
|
||||||
|
</a>
|
||||||
|
<a href="{% url 'django_ledger:ledger-cf-year' entity_slug=view.kwargs.entity_slug ledger_pk=bill.ledger_id year=bill.get_status_action_date.year %}?format=pdf&report_subtitle={{ bill.generate_descriptive_title | safe }}"
|
||||||
|
class="btn btn-phoenix-success">
|
||||||
|
{% trans 'Cash Flow Statement PDF' %} <i class="fas fa-download ms-1"></i>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
<!-- Bill Transactions Card -->
|
<!-- Bill Transactions Card -->
|
||||||
<div class="card mb-4 shadow-sm">
|
<div class="card mb-4 shadow-sm">
|
||||||
<div class="card-header pb-0">
|
<div class="card-header pb-0">
|
||||||
|
|||||||
@ -2,22 +2,24 @@
|
|||||||
{% load django_ledger %}
|
{% load django_ledger %}
|
||||||
|
|
||||||
{% if style == 'card_1' %}
|
{% if style == 'card_1' %}
|
||||||
<div class="card h-100" style="height: 25rem;">
|
<div class="card" style="height:25rem;">
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<h5 class="card-title fs-3 fw-light mb-0">
|
<div class="card-header-title">
|
||||||
{% if title %}
|
<h1 class="is-size-3 has-text-weight-light">{% if title %}{{ title }}{% else %}
|
||||||
{{ title }}
|
{% trans 'Notes' %}
|
||||||
{% else %}
|
{% endif %}</h1>
|
||||||
{% trans 'Notes' %}
|
</div>
|
||||||
{% endif %}
|
</div>
|
||||||
</h5>
|
<div class="card-content">
|
||||||
</div>
|
<div class="content">
|
||||||
<div class="card-body overflow-auto">
|
{% if notes_html %}
|
||||||
{% if notes_html %}
|
{% autoescape off %}
|
||||||
{{ notes_html|safe }}
|
{{ notes_html | safe }}
|
||||||
{% else %}
|
{% endautoescape %}
|
||||||
<p class="card-text">{% trans 'No available notes to display...' %}</p>
|
{% else %}
|
||||||
{% endif %}
|
<p>{% trans 'No available notes to display...' %}</p>
|
||||||
</div>
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|||||||
@ -23,4 +23,6 @@
|
|||||||
{% if vendor.website %}<span class="d-block">{{ vendor.website }}</span>{% endif %}
|
{% if vendor.website %}<span class="d-block">{{ vendor.website }}</span>{% endif %}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
@ -1,73 +0,0 @@
|
|||||||
{% load i18n %}
|
|
||||||
{% load django_ledger %}
|
|
||||||
|
|
||||||
{% if style == 'detail' %}
|
|
||||||
<div class="table-responsive">
|
|
||||||
<table class="table table-hover">
|
|
||||||
<thead >
|
|
||||||
<tr class="bg-body-highlight">
|
|
||||||
<th class="sort white-space-nowrap align-middle" scope="col">{% trans 'Timestamp' %}</th>
|
|
||||||
<th class="sort white-space-nowrap align-middle" scope="col">{% trans 'Account' %}</th>
|
|
||||||
<th class="sort white-space-nowrap align-middle" scope="col">{% trans 'Account Name' %}</th>
|
|
||||||
<th class="sort white-space-nowrap align-middle" scope="col">{% trans 'Unit' %}</th>
|
|
||||||
<th class="sort white-space-nowrap align-middle" scope="col">{% trans 'Credit' %}</th>
|
|
||||||
<th class="sort white-space-nowrap align-middle" scope="col">{% trans 'Debit' %}</th>
|
|
||||||
<th class="sort white-space-nowrap align-middle" scope="col">{% trans 'Description' %}</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
{% for transaction_model in transaction_model_qs %}
|
|
||||||
<tr>
|
|
||||||
<td class="sort white-space-nowrap align-middle ps-1" scope="col" >{{ transaction_model.timestamp }}</td>
|
|
||||||
<td class="sort white-space-nowrap align-middle" scope="col">{{ transaction_model.account_code }}</td>
|
|
||||||
<td class="sort white-space-nowrap align-middle" scope="col">{{ transaction_model.account_name }}</td>
|
|
||||||
<td class="sort white-space-nowrap align-middle" scope="col">{% if transaction_model.entity_unit_name %}{{ transaction_model.entity_unit_name }}{% endif %}</td>
|
|
||||||
<td class="sort white-space-nowrap align-middle" scope="col">{% if transaction_model.is_credit %}${{ transaction_model.amount | currency_format }}{% endif %}</td>
|
|
||||||
<td class="sort white-space-nowrap align-middle" scope="col">{% if transaction_model.is_debit %}${{ transaction_model.amount | currency_format }}{% endif %}</td>
|
|
||||||
<td class="sort white-space-nowrap align-middle pe-1" scope="col">{% if transaction_model.description %}{{ transaction_model.description }}{% endif %}</td>
|
|
||||||
</tr>
|
|
||||||
{% endfor %}
|
|
||||||
<tr class="fw-bold">
|
|
||||||
<td class="sort white-space-nowrap align-middle" colspan="3"></td>
|
|
||||||
<td class="class="sort white-space-nowrap align-middle" " scope="col">{% trans 'Total' %}</td>
|
|
||||||
<td class="sort white-space-nowrap align-middle" scope="col">{% currency_symbol %}{{ total_credits | currency_format }}</td>
|
|
||||||
<td class="sort white-space-nowrap align-middle" scope="col">{% currency_symbol %}{{ total_debits | currency_format }}</td>
|
|
||||||
<td class="sort white-space-nowrap align-middle" scope="col"></td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
{% elif style == 'compact' %}
|
|
||||||
<div class="table-responsive">
|
|
||||||
<table class="table table-hover">
|
|
||||||
<thead>
|
|
||||||
<tr class="bg-body-highlight">
|
|
||||||
<th>{% trans 'Account' %}</th>
|
|
||||||
<th>{% trans 'Account Name' %}</th>
|
|
||||||
<th>{% trans 'Credit' %}</th>
|
|
||||||
<th>{% trans 'Debit' %}</th>
|
|
||||||
<th>{% trans 'Description' %}</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
{% for transaction_model in transaction_model_qs %}
|
|
||||||
<tr>
|
|
||||||
<td>{{ transaction_model.account_code }}</td>
|
|
||||||
<td>{{ transaction_model.account_name }}</td>
|
|
||||||
<td>{% if transaction_model.is_credit %}${{ transaction_model.amount | currency_format }}{% endif %}</td>
|
|
||||||
<td>{% if transaction_model.is_debit %}${{ transaction_model.amount | currency_format }}{% endif %}</td>
|
|
||||||
<td>{% if transaction_model.description %}{{ transaction_model.description }}{% endif %}</td>
|
|
||||||
</tr>
|
|
||||||
{% endfor %}
|
|
||||||
<tr class="fw-bold">
|
|
||||||
<td colspan="1"></td>
|
|
||||||
<td class="text-end">{% trans 'Total' %}</td>
|
|
||||||
<td>{% currency_symbol %}{{ total_credits | currency_format }}</td>
|
|
||||||
<td>{% currency_symbol %}{{ total_debits | currency_format }}</td>
|
|
||||||
<td></td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
@ -38,14 +38,7 @@
|
|||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a class="nav-link" href="{% url 'purchase_order_list' %}">
|
<a class="nav-link" href="{% url 'purchase_order_list' %}">
|
||||||
<div class="d-flex align-items-center">
|
<div class="d-flex align-items-center">
|
||||||
<span class="nav-link-icon"><span class="fas fa-warehouse"></span></span><span class="nav-link-text">{% trans "purchase Orders"|capfirst %}</span>
|
<span class="nav-link-icon"><span class="fas fa-plus-circle"></span></span><span class="nav-link-text">{% trans "purchase Orders"|capfirst %}</span>
|
||||||
</div>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li class="nav-item">
|
|
||||||
<a class="nav-link" href="{% url 'upload_cars' %}">
|
|
||||||
<div class="d-flex align-items-center">
|
|
||||||
<span class="nav-link-icon"><span class="fas fa-file-invoice"></span></span><span class="nav-link-text">{% trans "Upload Cars"|capfirst %}</span>
|
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
|||||||
@ -145,10 +145,6 @@
|
|||||||
hx-on::after-request="filter_after_request()">{{ _("Search") }}</button>
|
hx-on::after-request="filter_after_request()">{{ _("Search") }}</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<form class="update-price-form d-flex flex-row align-items-center ms-auto w-25 d-none" action="" method="post" style="float:right;">
|
|
||||||
<input class="form-control me-2" type="number" placeholder='{{ _("Search") }}' name="price" aria-label="Price">
|
|
||||||
<button class="btn btn-outline-primary" type="submit">{{ _("Search") }}</button>
|
|
||||||
</form>
|
|
||||||
<div class="table-responsive scrollbar transition">
|
<div class="table-responsive scrollbar transition">
|
||||||
<div class="d-flex flex-wrap align-items-center justify-content-between py-3 pe-0 fs-9">
|
<div class="d-flex flex-wrap align-items-center justify-content-between py-3 pe-0 fs-9">
|
||||||
<div class="d-flex"
|
<div class="d-flex"
|
||||||
@ -164,11 +160,6 @@
|
|||||||
<table class="table align-items-center table-flush">
|
<table class="table align-items-center table-flush">
|
||||||
<thead class="text-body">
|
<thead class="text-body">
|
||||||
<tr class="bg-body-highlight">
|
<tr class="bg-body-highlight">
|
||||||
<th class="sort white-space-nowrap align-middle" scope="col">
|
|
||||||
<div class="form-check">
|
|
||||||
<input class="form-check-input" type="checkbox" id="select-all" />
|
|
||||||
</div>
|
|
||||||
</th>
|
|
||||||
<th class="sort white-space-nowrap align-middle" scope="col">{{ _("VIN") }}</th>
|
<th class="sort white-space-nowrap align-middle" scope="col">{{ _("VIN") }}</th>
|
||||||
<th class="sort white-space-nowrap align-middle" scope="col">{{ _("Make") }}</th>
|
<th class="sort white-space-nowrap align-middle" scope="col">{{ _("Make") }}</th>
|
||||||
<th class="sort white-space-nowrap align-middle" scope="col">{{ _("Model") }}</th>
|
<th class="sort white-space-nowrap align-middle" scope="col">{{ _("Model") }}</th>
|
||||||
@ -183,12 +174,7 @@
|
|||||||
</thead>
|
</thead>
|
||||||
<tbody class="list" id="project-list-table-body">
|
<tbody class="list" id="project-list-table-body">
|
||||||
{% for car in cars %}
|
{% for car in cars %}
|
||||||
<tr class="position-static">
|
<tr class="position-static">
|
||||||
<td class="align-middle white-space-nowrap">
|
|
||||||
<div class="form-check">
|
|
||||||
<input class="form-check-input car-checkbox" type="checkbox" name="car" id="car-{{car.pk}}">
|
|
||||||
</div>
|
|
||||||
</td>
|
|
||||||
<td class="align-middle white-space-nowrap ps-1">
|
<td class="align-middle white-space-nowrap ps-1">
|
||||||
<a class="fw-bold" href="{% url 'car_detail' car.slug %}">{{ car.vin }}</a>
|
<a class="fw-bold" href="{% url 'car_detail' car.slug %}">{{ car.vin }}</a>
|
||||||
</td>
|
</td>
|
||||||
@ -311,20 +297,5 @@
|
|||||||
document.querySelector('.car_status').removeAttribute('disabled')
|
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');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
{% endblock customJS %}
|
{% endblock customJS %}
|
||||||
|
|||||||
@ -1,35 +1,12 @@
|
|||||||
{% extends "base.html" %}
|
{% extends "base.html" %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="mt-4">
|
<h1>{{po.po_number}}</h1>
|
||||||
<h1><i class="fa-solid fa-cart-shopping me-1"></i>{{po.po_number}}</h1>
|
<h4>{{po.po_status|capfirst}}</h4>
|
||||||
|
<div class="table-responsive">
|
||||||
<div class="d-flex align-items-center">
|
|
||||||
<h4>Status:</h4>
|
|
||||||
{% comment %} Apply appropriate text color based on po.po_status {% endcomment %}
|
|
||||||
{% if po.po_status == 'draft' %}
|
|
||||||
<h4 class="ms-2 text-warning mb-0">{{ po.po_status|capfirst }}</h4>
|
|
||||||
{% elif po.po_status == 'in_review' %}
|
|
||||||
<h4 class="ms-2 text-primary mb-0">{{ po.po_status|capfirst }}</h4>
|
|
||||||
{% elif po.po_status == 'approved' %}
|
|
||||||
<h4 class="ms-2 text-info mb-0">{{ po.po_status|capfirst }}</h4>
|
|
||||||
{% elif po.po_status == 'fulfilled' %}
|
|
||||||
<h4 class="ms-2 text-success mb-0">{{ po.po_status|capfirst }}</h4>
|
|
||||||
{% elif po.po_status == 'void' %}
|
|
||||||
<h4 class="ms-2 text-danger mb-0">{{ po.po_status|capfirst }}</h4>
|
|
||||||
{% else %}
|
|
||||||
<h4 class="ms-2 text-muted mb-0">{{ po.po_status|capfirst }}</h4> {# Use muted for unknown/default status #}
|
|
||||||
{% endif %}
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="table-responsive mt-3">
|
|
||||||
<table class="table table-striped table-hover align-middle">
|
<table class="table table-striped table-hover align-middle">
|
||||||
<thead>
|
<thead>
|
||||||
<tr class="bg-body-highlight">
|
<tr>
|
||||||
<th scope="col">Name</th>
|
<th scope="col">Name</th>
|
||||||
<th scope="col">Quatnity</th>
|
<th scope="col">Quatnity</th>
|
||||||
<th scope="col">Unit Cost</th>
|
<th scope="col">Unit Cost</th>
|
||||||
@ -56,5 +33,4 @@
|
|||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
|
||||||
{% endblock content %}
|
{% endblock content %}
|
||||||