/
home
/
infinitibizsol
/
.trash
/
controllers.2
/
File Upload :
llllll
Current File: /home/infinitibizsol/.trash/controllers.2/vehicleController.js
const { Op } = require("sequelize"); const db = require("../models"); const { col, literal, fn, transaction } = require("sequelize"); function calculateDateRange(timeRange) { const currentDate = new Date(); switch (timeRange) { case "currentweek": const currentWeekStartDate = new Date(currentDate); currentWeekStartDate.setDate( currentDate.getDate() - currentDate.getDay() ); currentWeekStartDate.setHours(0, 0, 0, 0); const currentWeekEndDate = new Date(currentDate); currentWeekEndDate.setDate( currentWeekEndDate.getDate() + (6 - currentWeekEndDate.getDay()) ); currentWeekEndDate.setHours(23, 59, 59, 999); return { startDate: currentWeekStartDate, endDate: currentWeekEndDate }; case "lastweek": const lastWeekStartDate = new Date(currentDate); lastWeekStartDate.setDate( lastWeekStartDate.getDate() - lastWeekStartDate.getDay() - 7 ); lastWeekStartDate.setHours(0, 0, 0, 0); const lastWeekEndDate = new Date(currentDate); lastWeekEndDate.setDate( lastWeekEndDate.getDate() - lastWeekEndDate.getDay() - 1 ); lastWeekEndDate.setHours(23, 59, 59, 999); return { startDate: lastWeekStartDate, endDate: lastWeekEndDate }; case "last4weeks": const last4WeeksStartDate = new Date(currentDate); last4WeeksStartDate.setDate(last4WeeksStartDate.getDate() - 28); last4WeeksStartDate.setHours(0, 0, 0, 0); const last4WeeksEndDate = new Date(currentDate); last4WeeksEndDate.setDate(last4WeeksEndDate.getDate()); last4WeeksEndDate.setHours(23, 59, 59, 999); return { startDate: last4WeeksStartDate, endDate: last4WeeksEndDate }; case "last12weeks": const last12WeeksStartDate = new Date(currentDate); last12WeeksStartDate.setDate(last12WeeksStartDate.getDate() - 84); last12WeeksStartDate.setHours(0, 0, 0, 0); const last12WeeksEndDate = new Date(currentDate); last12WeeksEndDate.setDate(last12WeeksEndDate.getDate()); last12WeeksEndDate.setHours(23, 59, 59, 999); return { startDate: last12WeeksStartDate, endDate: last12WeeksEndDate }; default: // Handle other cases or return an error return null; } } const getAllUserVehicles = async (req, res) => { try { const user_id = req.params.id; let timeRange; if (!req.body.timeRange) { timeRange = "currentweek"; } else { timeRange = req.body.timeRange; } timeRange = timeRange.replace(/\s/g, ""); timeRange = timeRange.toLowerCase(); const weekRange = calculateDateRange(timeRange); let { sortBy, orderDirection } = req.body; const result = await db.tblVehicle.findAll({ attributes: { exclude: [ "color", "color_name", "details", "createdAt", "updatedAt", "user_id", ], }, where: { user_id: user_id, createdAt: { [Op.between]: [weekRange.startDate, weekRange.endDate], }, }, order: [[sortBy || "vehicle_id", orderDirection || "ASC"]], }); return res.json({ status: 200, message: "Success", data: result, }); } catch (error) { return res.status(500).json({ status: 500, message: `${error.message}` }); } }; const sortVehicles = async (req, res) => { try { const user_id = req.params.id; let { sortBy, orderDirection } = req.body; // Define the base where clause let whereClause = { user_id: user_id, }; // Adjust the where clause based on sortBy if (sortBy == "sold_price") { sortBy = "vehicle_id"; /* whereClause.sold_price = { [Op.not]: null, }; */ } let result = await db.tblVehicle.findAll({ where: whereClause, order: [[sortBy || "vehicle_id", orderDirection || "ASC"]], }); return res.json({ status: 200, message: "Success", data: result }); } catch (error) { return res.status(500).json({ status: 500, message: `${error.message}` }); } }; const sortByYear = async (req, res) => { try { const user_id = req.params.id; let { orderDirection } = req.body; /* sortOrder = sortOrder.replace(/\s/g, ""); sortOrder = sortOrder.toLowerCase(); const orderDirection = sortOrder === "lowest" ? "ASC" : "DESC"; */ let result = await db.tblVehicle.findAll({ where: { user_id: user_id, }, order: [["year", orderDirection]], }); return res.json({ status: 200, message: "Success", data: result }); } catch (error) { return res.status(500).json({ status: 500, message: `${error.message}` }); } }; const sortByMileage = async (req, res) => { try { const user_id = req.params.id; let { orderDirection } = req.body; let result = await db.tblVehicle.findAll({ where: { user_id: user_id, mileage: { [Op.not]: null, // Exclude records with null sold_price }, }, order: [["mileage", orderDirection]], }); return res.json({ status: 200, message: "Success", data: result }); } catch (error) { return res.status(500).json({ status: 500, message: `${error.message}` }); } }; const filterByConditionLight = async (req, res) => { try { const { user_id, week_id } = req.body; let results; results = await db.sequelize.query( "CALL uFilterByConditionLight(:user_id,:week_id)", { replacements: { user_id, week_id }, type: db.Sequelize.QueryTypes.SELECT, } ); const data = results[0]; const formattedData = Object.values(data) .flat() .filter( (item) => typeof item === "object" && !item.hasOwnProperty("fieldCount") ); // return res.json(formattedData); const conditionLightValues = [0, 1, 2, 3, 4]; // Check for missing condition_light values const missingValues = conditionLightValues.filter((value) => { return !formattedData.some((item) => item.condition_light === value); }); // Add missing values to the existing data const newData = formattedData.concat( missingValues.map((value) => ({ condition_light: value, units: 0, })) ); const filteredData = newData.filter((item) => item.condition_light != 0); // # Sorting the list in-place in ascending order of 'condition_light' filteredData.sort((a, b) => a.condition_light - b.condition_light); return res.json({ status: 200, Message: "Success", filter_type: "condition_light", data: filteredData, }); } catch (error) { return res.status(500).json({ status: 500, message: "Internal Server Error", error: error.message, }); } }; const getConditionLightVehicles = async (req, res) => { try { const { condition_light, opportunity_id, sortBy = "vehicle_id", orderDirection = "ASC", } = req.body; const results = await db.tblVehicleRun.findAll({ where: { opportunity_id: opportunity_id, condition_light: condition_light, }, include: [ { model: db.tblVehicle, raw: true, }, { model: db.tblAuctionLane, attributes: ["name"], raw: true, // required: true, include: [ { model: db.tblAuction, attributes: ["auction_id", "name"], raw: true, required: false, }, ], }, ], order: [[db.tblVehicle, sortBy, orderDirection]], }); // return res.json({ status: 200, data: results }); const outputArray = results.map((vehicleRun) => { const vehicle = vehicleRun.tblVehicle || {}; const auctionLane = vehicleRun.tblAuctionLane || {}; const auction = auctionLane.tblAuction || {}; return { vehicle_id: vehicle.vehicle_id, year: vehicle.year, make: vehicle.make, model: vehicle.model, vin: vehicle.vin, mileage: vehicle.mileage, imageUrl: vehicle.imageUrl, color: vehicle.color, color_name: vehicle.color_name, vehicle_run_id: vehicleRun.vehicle_run_id, condition_light: vehicleRun.condition_light || 0, announcements: vehicleRun.announcements, reserve: vehicleRun.reserve || 0, sale_price: vehicleRun.sale_price || 0, auction_fee: vehicleRun.auction_fee || 300, net_proceed: vehicleRun.net_proceed || 0, vehicle_total_fee: vehicleRun.vehicle_total_fee || 0, sale_status: vehicleRun.sale_status || false, run_no: vehicleRun.run_no || null, lane_id: vehicleRun.lane_id || null, lane_name: auctionLane.name || null, auction_id: auction.auction_id || null, auction_name: auction.name || null, }; }); return res.json({ status: 200, message: "Success", data: outputArray }); } catch (error) { return res.status(500).json({ error: error.message }); } }; const filterBySaleStatus = async (req, res) => { try { const { user_id, week_id } = req.body; // Call the stored procedure and destructure the result. let results = await db.sequelize.query( "CALL uFilterBySaleStatus(:user_id, :week_id)", { replacements: { user_id, week_id }, type: db.Sequelize.QueryTypes.SELECT, } ); const data = results[0]; /* // return res.json(data); /* // Check if data received from the stored procedure is in an unexpected format. if (!Array.isArray(data) || data.length === 0) { return res.json({ status: 200, message: "No data found", data: [] }); } */ // Transform the data to the required flat array format. */ const formattedData = Object.values(data) .flat() .filter( (item) => typeof item === "object" && !item.hasOwnProperty("fieldCount") ); const saleStatusValues = ["true", "false"]; // Check for missing sale_status values const missingValues = saleStatusValues.filter((value) => { return !formattedData.some((item) => item.sale_status === value); }); // Add missing values to the existing data const newData = formattedData.concat( missingValues.map((value) => ({ opportunity_id: 0, auctioneer_id: 0, sale_status: value, units: 0, })) ); return res.json({ status: 200, message: "Success", data: newData }); } catch (error) { // Send back a structured error response with proper status code. return res.status(500).json({ status: 500, message: error.message }); } }; const getSaleStatusVehicles = async (req, res) => { try { const { sale_status, opportunity_id, sortBy, orderDirection } = req.body; const results = await db.tblVehicleRun.findAll({ where: { sale_status: sale_status, opportunity_id: opportunity_id }, include: [ { model: db.tblVehicle, raw: true, }, { model: db.tblAuctionLane, attributes: ["name"], raw: true, // required: true, include: [ { model: db.tblAuction, attributes: ["auction_id", "name"], raw: true, required: false, }, ], }, ], order: [[db.tblVehicle, sortBy || "vehicle_id", orderDirection || "ASC"]], }); // return res.json({ status: 200, message: results }); const outputArray = results.map((vehicleRun) => { const vehicle = vehicleRun.tblVehicle || {}; const auctionLane = vehicleRun.tblAuctionLane || {}; const auction = auctionLane.tblAuction || {}; return { vehicle_id: vehicle.vehicle_id, year: vehicle.year, make: vehicle.make, model: vehicle.model, vin: vehicle.vin, mileage: vehicle.mileage, imageUrl: vehicle.imageUrl, color: vehicle.color, color_name: vehicle.color_name, vehicle_run_id: vehicleRun.vehicle_run_id, condition_light: vehicleRun.condition_light || 0, announcements: vehicleRun.announcements, reserve: vehicleRun.reserve || 0, sale_price: vehicleRun.sale_price || 0, auction_fee: vehicleRun.auction_fee || 300, net_proceed: vehicleRun.net_proceed || 0, vehicle_total_fee: vehicleRun.vehicle_total_fee || 0, sale_status: vehicleRun.sale_status || false, run_no: vehicleRun.run_no || null, lane_id: vehicleRun.lane_id || null, lane_name: auctionLane.name || null, auction_id: auction.auction_id || null, auction_name: auction.name || null, }; }); return res.json({ status: 200, message: "Success", data: outputArray }); } catch (error) { return res.status(500).json({ error: error.message }); } }; const totalSalePrice = async (req, res) => { try { let days = 1; if (req.body.days) { days = req.body.days; } console.log(`days are ${days}`); const currentDate = new Date(); const last24Hours = new Date(currentDate - days * 24 * 60 * 60 * 1000); const user_id = req.params.id; const result = await db.tblVehicle.findAll({ attributes: ["sold_price"], where: { user_id: user_id, createdAt: { [Op.between]: [last24Hours, currentDate], }, }, order: [["createdAt", "ASC"]], }); const total_price = result .filter((item) => item.sold_price !== null) .reduce((sum, item) => sum + item.sold_price, 0); console.log("Total Price:", total_price); return res.json({ status: 200, message: "Success", data: total_price }); } catch (error) { return res.status(500).json({ status: 500, message: `${error.message}` }); } }; //testingsale const totalSaleAndNetProfit = async (req, res) => { try { let { user_id } = req.body; let timeRange; if (!req.body.timeRange) { timeRange = "currentweek"; } else { timeRange = req.body.timeRange; } timeRange = timeRange.replace(/\s/g, ""); timeRange = timeRange.toLowerCase(); /* const currentDate = new Date(); let startDate; let endDate; switch (timeRange) { case "currentweek": startDate = new Date(currentDate); startDate.setHours(0, 0, 0, 0 - currentDate.getDay()); startDate.setDate(startDate.getDate()); endDate = new Date(currentDate); endDate.setHours(23, 59, 59, 999 - currentDate.getDay()); break; case "lastweek": startDate = new Date(currentDate); startDate.setHours(0, 0, 0, 0 - currentDate.getDay()); startDate.setDate(startDate.getDate() - 7); endDate = new Date(currentDate); endDate.setDate(endDate.getDate() - endDate.getDay()); endDate.setHours(23, 59, 59, 999); break; case "last4weeks": startDate = new Date(currentDate); startDate.setDate(currentDate.getDate() - 28); endDate = new Date(currentDate); endDate.setDate(endDate.getDate() - endDate.getDay()); endDate.setHours(23, 59, 59, 999); break; default: startDate = new Date(currentDate); startDate.setHours(0, 0, 0, 0 - currentDate.getDay()); startDate.setDate(startDate.getDate() - 3); endDate = new Date(currentDate); endDate.setHours(23, 59, 59, 999 - endDate.getDay()); } */ const weekRange = calculateDateRange(timeRange); const results = await db.tblVehicle.findAll({ attributes: [ "vehicle_id", "user_id", /* [ db.sequelize.literal("SUM(`tblVehicleRuns`.`sale_price`)"), "total_sale", ], [ db.sequelize.literal("SUM(`tblVehicleRuns`.`net_profit`)"), "total_net_profit", ], */ ], include: [ { model: db.tblVehicleRun, attributes: [ "vehicle_run_id", "sale_price", "auction_fee", "net_profit", "sale_status", ], raw: true, where: { sale_price: { [Op.ne]: null }, }, }, ], where: { user_id: user_id, createdAt: { [Op.between]: [weekRange.startDate, weekRange.endDate], }, }, // order: [["createdAt", "ASC"]], }); if (results.length === 0) { return res.json({ status: 200, message: "Success", net_profit: 0, total_profit: 0, unit_sold: 0, }); } const transformedData = results.reduce((result, vehicle) => { const existingUser = result.find( (user) => user.user_id === vehicle.user_id ); if (existingUser) { // If user exists, update totals existingUser.total_profit += vehicle.tblVehicleRuns.reduce( (sum, run) => sum + run.sale_price, 0 ); existingUser.net_profit += vehicle.tblVehicleRuns.reduce( (sum, run) => sum + run.net_profit, 0 ); existingUser.sold_units += vehicle.tblVehicleRuns.length; } else { // If user doesn't exist, add a new user entry const newUser = { user_id: vehicle.user_id, total_profit: vehicle.tblVehicleRuns.reduce( (sum, run) => sum + run.sale_price, 0 ), net_profit: vehicle.tblVehicleRuns.reduce( (sum, run) => sum + run.net_profit, 0 ), sold_units: vehicle.tblVehicleRuns.length, }; result.push(newUser); } return result; }, []); return res.json({ status: 200, message: "Success", net_profit: transformedData[0]?.net_profit || 0, total_profit: transformedData[0]?.total_profit || 0, unit_sold: transformedData[0]?.sold_units || 0, }); } catch (error) { return res.status(500).json({ status: 500, error: error.message }); } }; /* const assignVehicleToAuctioneerCtrl = async (req, res) => { try { const { car_ids, auctioneerId, userId, weekId } = req.body; const week_id = parseInt(weekId); const [opportunity_id] = await db.tblOpportunity.findAll({ where: { [Op.and]: [ { week_id: week_id, }, { auctioneer_id: auctioneerId, }, { user_id: userId, }, ], }, attributes: ["opportunity_id"], }); const data = { opportunity_id: opportunity_id.opportunity_id, }; let isExisted; const promises = car_ids.map(async (item) => { // Assuming db.tblVehicleRun.findAll returns an array isExisted = await db.tblVehicleRun.findAll({ where: { vehicle_id: item }, }); if (isExisted.length <= 0) { // No vehicles found with the given id, so create a new record await db.tblVehicleRun.create({ opportunity_id: data.opportunity_id, vehicle_id: item, }); } else { // Vehicle exists, perform an update await db.tblVehicleRun.update(data, { where: { vehicle_id: item, }, }); } }); await Promise.all(promises); return res.json({ status: 200, message: "assigned vehicles successfully" }); } catch (error) { console.log(error); return res.json(error.message); } }; */ const assignVehicleToAuctioneerCtrl = async (req, res) => { try { const { car_ids, auctioneerId, userId, weekId } = req.body; // Find the opportunity_id just once outside of the loop const opportunity = await db.tblOpportunity.findOne({ where: { week_id: parseInt(weekId), auctioneer_id: auctioneerId, user_id: userId, }, attributes: ["opportunity_id"], }); if (!opportunity) { return res .status(404) .json({ status: 404, message: "Opportunity not found." }); } const data = { opportunity_id: opportunity.opportunity_id, }; // Create or update vehicles in parallel const promises = car_ids.map((item) => { return db.tblVehicleRun .findOrCreate({ where: { vehicle_id: item }, defaults: { // Used only if a new instance is created vehicle_id: item, ...data, }, }) .then(([vehicleRun, created]) => { if (!created) { // Update the record only if it's necessary. // You might want to add logic to check if an update is required return db.tblVehicleRun.update(data, { where: { vehicle_id: item, }, }); } }); }); await Promise.all(promises); return res .status(200) .json({ status: 200, message: "Assigned vehicles successfully" }); } catch (error) { console.error(error); return res.status(500).json({ message: error.message }); } }; const createVehicleController = async (req, res) => { try { // return res.json({data:req.body}); const { user_id } = req.body; const userId = parseInt(user_id); let imageFiles; req.body.user_id = userId; if (req.files.length > 0) { console.log(req.files); imageFiles = req.files; const mainImageUrl = imageFiles[0].filename; req.body.imageUrl = mainImageUrl; } let result = await db.tblVehicle.create(req.body); const car_id = result.vehicle_id; if (req.files.length > 0) { console.log("Images Files Existed"); await Promise.all( imageFiles.map(async (item) => db.tblVehicleImage.create({ vehicle_id: car_id, imageUrl: item.filename, }) ) ); } if (!result) { return res.status(500).json({ status: 500, message: "Operation Failed" }); } return res .status(200) .json({ status: 200, message: "data created successfully" }); } catch (error) { console.log(error.message); return res.status(500).json({ status: 500, message: `${error.message}` }); } }; const createVehicleControllerWithoutImages = async (req, res) => { try { const body = req.body; return res.json({status:200,message:"success",data:req.body}); const result = await db.tblVehicle.create(body); if(result.length<=0){ return res.json({ status: 200, message: "Failure" ,data:result}); } return res.json({ status: 200, message: "Success", data: result }); } catch (error) { return res.status(500).json({ status: 500, message: `${error.message}` }); } }; const getVehicleDetailsById = async (req, res) => { try { const vehicle_id = req.params.id; let result = await db.tblVehicle.findAll({ attributes:[ "vehicle_id", "vin", "year", "make", "model", "mileage", "trim", "color", "color_name", "details", "imageUrl", ], where: { vehicle_id: vehicle_id, }, }); return res .status(200) .json({ status: 200, message: "success", data: result }); } catch (error) { return res.status(500).json({ status: 500, message: `${error.message}` }); } }; const getUserCarsData = async (req, res) => { try { const userId = req.params.id; const result = await db.tblVehicle.findAll({ where: { user_id: userId, }, }); return res .status(200) .json({ status: 200, message: "success", data: result }); } catch (error) { return res.status(500).json({ status: 500, message: `${error.message}` }); } }; const getVehicleImagesByCarId = async (req, res) => { try { const vehicle_id = req.params.id; let result = await db.tblVehicleImage.findAll({ where: { vehicle_id: vehicle_id, }, }); return res .status(200) .json({ status: 200, message: "success", data: result }); } catch (error) { return res.status(500).json({ status: 500, message: `${error.message}` }); } }; const updateVehicleDetails = async (req, res) => { try { const vehicle_id = req.params.id; console.log(req.body); const { imagesListIds } = req.body; let result = await db.tblVehicle.update(req.body, { where: { vehicle_id: vehicle_id, }, }); const promises = imagesListIds.map(async (id) => { try { result = await db.tblVehicleImage.destroy({ where: { image_id: id }, }); } catch (error) { console.error(error); return res .status(500) .json({ status: 500, message: "Internal Server Error" }); } }); await Promise.all(promises); console.log(result); return res.json({ status: 200, message: "succes", data: result }); } catch (error) { return res.json(error.message); } }; const removeCarFromAuctioneer = async (req, res) => { try { const { carIds } = req.body; const results = await Promise.all( carIds.map(async (vehicle_id) => { let result; await db.sequelize.transaction(async (t) => { // Update tblVehicleRunFee const vehicle_run_id = await db.tblVehicleRun.findOne({ where: { vehicle_id: vehicle_id }, transaction: t, }); await db.tblVehicleRunFee.destroy({ where: { vehicle_run_id: vehicle_run_id.vehicle_run_id, }, transaction: t, }); // Update tblVehicleRun result = await db.tblVehicleRun.destroy({ where: { vehicle_id: vehicle_id, }, transaction: t, }); // Update tblVehicle await db.tblVehicle.update( { opportunity_id: null, }, { where: { vehicle_id: vehicle_id, }, transaction: t, } ); }); return result; }) ); return res.json({ status: 200, message: "Success", data: results }); } catch (error) { return res.status(500).json({ status: 500, message: "Internal Server Error", error: error.message, }); } }; const updateCarStatus = async (req, res) => { try { // const { vehicle_id, anoucements, reserve } = req.body; // console.log(req.body); let result; const vehicle_id = req.body.vehicle_id; [result] = await db.tblVehicleRun.findAll({ where: { vehicle_id: vehicle_id, }, }); if (!result) { await db.tblVehicleRun.create(req.body); } else { await db.tblVehicleRun.update(req.body, { where: { vehicle_id: vehicle_id, }, }); } return res.json({ status: 200, message: "Success" }); } catch (error) { console.log(error); return res.json(error.message); } }; const deleteInventoryVehicle = async (req, res) => { // const vehicle_id = parseInt(req.params.id); // // Validate if vehicle ID is a number // if (isNaN(vehicle_id)) { // return res.status(400).json({ // status: 400, // message: "Invalid vehicle ID", // }); // } // // Start a transaction // const transaction = await db.sequelize.transaction(); // try { // // Get vehicle_run_id using the transaction // const vehicle_run = await db.tblVehicleRun.findOne({ // attributes: ["vehicle_run_id"], // where: { vehicle_id }, // transaction, // }); // if (vehicle_run) { // const { vehicle_run_id } = vehicle_run; // // Perform all destroy operations within the transaction // const [vehicleRunFeeRmvdCount, vehicleRunRmvdCount] = await Promise.all([ // db.tblVehicleRunFee.destroy({ // where: { vehicle_run_id }, // transaction, // }), // db.tblVehicleRun.destroy({ // where: { vehicle_run_id }, // transaction, // }), // ]); // const vehicleRmvdCount = await db.tblVehicle.destroy({ // where: { vehicle_id }, // transaction, // }); // // Commit the transaction // await transaction.commit(); // // Respond with the results of the destructions // return res.json({ // status: 200, // message: "Success" // // vehicleRmvdCount: vehicleRmvdCount || 0, // // vehicleRunRmvdCount: vehicleRunRmvdCount || 0, // // vehicleRunFeeRmvdCount: vehicleRunFeeRmvdCount || 0, // }); // } else { // // If no associated vehicle run exists, nothing further to do // await transaction.commit(); // return res.json({ // status: 200, // message: "No associated vehicle runs found.No action taken.", // }); // } // } catch (error) { // // Rollback the transaction in case of error // await transaction.rollback(); // return res.status(500).json({ // status: 500, // message: "Internal Server Error", // error: error.message, // }); // } }; const insertYears = async (req, res) => { try { const startingYear = 1990; const currentYear = new Date().getFullYear(); let result; for (let year = startingYear; year <= currentYear; year++) { result = await db.tblYear.create({ vehicle_year: year }); } console.log("Years added successfully."); return res.json({ status: 200, message: "Success", data: result }); } catch (error) { console.error("Error adding years:", error); } }; const getYears = async (req, res) => { try { let result; result = await db.tblYear.findAll(); const convertedData = result.map((entry) => parseInt(entry.vehicle_year)); return res.json({ status: 200, message: "Success", data: convertedData }); } catch (error) { console.error("Error adding years:", error); return res.json({ status: 502, errorMessage: error }); } }; module.exports = { getAllUserVehicles, createVehicleControllerWithoutImages, createVehicleController, getVehicleImagesByCarId, getVehicleDetailsById, updateVehicleDetails, assignVehicleToAuctioneerCtrl, getUserCarsData, removeCarFromAuctioneer, updateCarStatus, totalSalePrice, totalSaleAndNetProfit, sortByYear, sortVehicles, sortByMileage, filterByConditionLight, filterBySaleStatus, deleteInventoryVehicle, getConditionLightVehicles, getSaleStatusVehicles, insertYears, getYears, };
Copyright ©2k19 -
Hexid
|
Tex7ure