const Constants = require('../data_providers/constants'); class Vehicle { brand model color year category engine number vin1 vin2 sts pts isRightWheel isJapanese photos addedDate addedBy ownershipPeriods static fromAvtocod(report) { //console.log(JSON.stringify(report)); let tech = report.fields.tech_data; if(!tech) { throw Error('Empty report'); } let e = tech.engine; let v = new Vehicle(); v.brand = { name: tech.brand.name, logo: tech.brand?.logotype?.uri }; v.category = report.fields.additional_info.vehicle.category.code; v.engine = { number: e.number, volume: e.volume, powerHp: e.power.hp, powerKw: e.power.kw, fuelType: e.fuel?.type }; v.model = tech.model ? { name: tech.model.name } : null; v.year = tech.year; v.number = report.fields.identifiers.vehicle.reg_num; v.pts = report.fields.identifiers.vehicle.pts; v.sts = report.fields.identifiers.vehicle.sts; v.vin1 = report.fields.identifiers.vehicle.vin; v.photos = report.fields.images.photos.items.map(p => { return { brand: p.vehicle.brand.name, model: p.vehicle.model.name, date: Date.parse(p.date.issued), url: p.uri }; }); v.isRightWheel = tech.wheel.position != 'LEFT'; v.isJapanese = report.is_japanese_vehicle; v.addedDate = Date.now(); return v; } static fromVin01(report) { let main = report.RequestResult.vehicle; let v = new Vehicle(); v.brand = { name: { original: main.model } }; v.category = main.category; v.engine = { number: main.engineNumber, powerHp: main.powerHp, powerKw: main.powerKwt, volume: main.engineVolume }; v.year = main.year; v.vin1 = main.vin; v.vin2 = main.bodyNumber; v.color = main.color; v.ownershipPeriods = report.RequestResult.ownershipPeriods.ownershipPeriod.map(p => { let period = { lastOperation: Constants.typeOperation[p.lastOperation] ?? p.lastOperation, ownerType: p.simplePersonType.toLowerCase() == 'legal' ? 'legal' : 'individual', from: Date.parse(p.from), to: 0 }; if('to' in p) { period.to = Date.parse(p.to); } return period; }); v.addedDate = Date.now(); return v; } } module.exports = Vehicle;