AutoCatBackend/models/vehicle.js
2020-10-25 20:31:01 +03:00

158 lines
3.7 KiB
JavaScript

const Constants = require('../data_providers/constants');
class Vehicle {
brand
model
color
year
category
engine
number
currentNumber
vin1
vin2
sts
pts
isRightWheel
isJapanese
photos
addedDate
addedBy
ownershipPeriods
events
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.identifiers_query.query;
v.currentNumber = 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
};
});
if(tech?.wheel?.position) {
v.isRightWheel = tech?.wheel?.position == 'RIGHT';
} else {
v.isRightWheel = null;
}
v.isJapanese = report.is_japanese_vehicle;
v.addedDate = Date.now();
v.events = [];
return v;
}
static fromVin01History(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: parseFloat(main.powerHp),
powerKw: parseFloat(main.powerKwt),
volume: parseInt(main.engineVolume)
};
v.year = parseInt(main.year, 10);
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();
v.events = [];
return v;
}
static fromVin01Base(report) {
let first = report[0];
let v = new Vehicle();
v.brand = { name: { original: first.brandmark, normalized: first.brand } };
v.model = { normalized: first.model };
v.category = first.ts_category;
v.year = parseInt(first.year);
v.vin1 = first.vin;
v.vin2 = first.body;
v.engine = {
powerHp: parseFloat(first.engine_power),
volume: parseInt(first.engine_volume),
number: first.engine
};
v.ownershipPeriods = report.map(p => {
let dateParams = p.last_operation_date.split('.').reverse().map(n => parseInt(n, 10));
dateParams[1] -= 1;
let date = (new Date(...dateParams)).getTime();
let period = {
from: date,
to: 0,
region: p.region,
registrationRegion: p.ts_registration_region,
locality: p.ts_locality,
lastOperation: Constants.typeOperation[p.tech_operation_code] ?? p.tech_operation_code,
ownerType: p.owner_category == '2' ? 'individual' : 'legal',
code: p.code
};
if(p.street && p.street != '-') {
period.street = p.street;
}
if(p.building && p.building != '-') {
period.building = p.building;
}
if(p.entity_inn && p.entity_inn != '-') {
period.inn = p.entity_inn;
}
return period;
});
v.addedDate = Date.now();
v.events = [];
return v;
}
}
module.exports = Vehicle;