Sindbad~EG File Manager

Current Path : /home/infinitibizsol/autocrm.infinitibizsol.com/migrations/
Upload File :
Current File : /home/infinitibizsol/autocrm.infinitibizsol.com/migrations/20240122082110-store-procedures.js

"use strict";

/** @type {import('sequelize-cli').Migration} */
module.exports = {
  async up(queryInterface, Sequelize) {
    
        //user-side
    //uAucUncatUnitCount
    await queryInterface.sequelize.query(`
  DROP PROCEDURE IF EXISTS uAucUncatUnitCount;
`);
    await queryInterface.sequelize.query(`
  CREATE PROCEDURE uAucUncatUnitCount(IN user_id INT, IN week_id INT)
  BEGIN
  SELECT 
    0 as auction_id,
    COALESCE(vr.lane_id, 'Not Provided') AS auction_name,
    COUNT(vr.vehicle_run_id) AS units
FROM tblOpportunities AS o
LEFT JOIN tblVehicleRuns AS vr ON vr.opportunity_id = o.opportunity_id 
WHERE o.user_id=user_id AND o.week_id=week_id  AND vr.lane_id IS NULL
GROUP BY  COALESCE(vr.lane_id, 'Not Provided');
 END
`);

    //uFilterByAuction
    await queryInterface.sequelize.query(`
  DROP PROCEDURE IF EXISTS uFilterByAuction;
`);
    await queryInterface.sequelize.query(`
  CREATE PROCEDURE uFilterByAuction(IN user_id INT, IN week_id INT)
  BEGIN
  SELECT au.auction_id,
    au.name as auction_name,
    a.auctioneer_id,
    IFNULL(COUNT(vr.lane_id), 0) AS units 
FROM tblOpportunities AS o
JOIN tblAuctioneers AS a ON o.auctioneer_id = a.auctioneer_id
JOIN tblAuctionLanes AS al ON a.auctioneer_id = al.auctioneer_id
JOIN tblAuctions AS au ON al.auction_id = au.auction_id
LEFT JOIN tblVehicleRuns AS vr ON al.lane_id = vr.lane_id AND vr.opportunity_id = o.opportunity_id 
WHERE o.user_id=user_id AND o.week_id=week_id
GROUP BY au.auction_id,a.auctioneer_id;
 END
`);

    //user-side
    //uFilterByConditionLight
    await queryInterface.sequelize.query(`
  DROP PROCEDURE IF EXISTS uFilterByConditionLight;
`);
    await queryInterface.sequelize.query(`
  CREATE PROCEDURE uFilterByConditionLight(IN user_id INT, IN week_id INT)
  BEGIN
  SELECT
  vr.condition_light condition_light,
  COUNT(vr.vehicle_run_id) AS units
FROM tblOpportunities AS o
JOIN tblAuctioneers AS a ON o.auctioneer_id = a.auctioneer_id
LEFT JOIN tblVehicleRuns AS vr ON o.opportunity_id = vr.opportunity_id
LEFT JOIN tblVehicles AS v ON vr.vehicle_id = v.vehicle_id 
WHERE o.user_id=user_id AND o.week_id=week_id AND v.user_id=user_id
GROUP BY vr.condition_light;
 END
`);
    //user-side
    //filterBySaleStatus
    await queryInterface.sequelize.query(`
    DROP PROCEDURE IF EXISTS uFilterBySaleStatus;
  `);
    await queryInterface.sequelize.query(`
    CREATE PROCEDURE uFilterBySaleStatus(IN user_id INT, IN week_id INT)
    BEGIN
    SELECT 
    CASE
        WHEN vr.sale_status = 1 THEN 'true'
        WHEN vr.sale_status = 0 THEN 'false'
        ELSE 'unknown'
    END AS sale_status,
    COUNT(vr.vehicle_run_id) AS units
FROM
    tblOpportunities AS o
	JOIN tblAuctioneers AS a ON o.auctioneer_id = a.auctioneer_id
	LEFT JOIN tblVehicleRuns AS vr ON o.opportunity_id = vr.opportunity_id
	LEFT JOIN tblVehicles AS v ON vr.vehicle_id = v.vehicle_id
WHERE o.user_id = user_id AND o.week_id = week_id AND v.user_id = user_id AND vr.sale_status IS NOT NULL
GROUP BY vr.sale_status;
   END
  `);

    //user-side
    //UserStats
    await queryInterface.sequelize.query(`
    DROP PROCEDURE IF EXISTS UserStats;
  `);
    await queryInterface.sequelize.query(`
    CREATE PROCEDURE UserStats(IN user_id INT,IN start_date date,IN end_date date)
    BEGIN
    select v.user_id,
    IFNULL(count(v.vehicle_id) ,0)as units,
    IFNULL(sum(vr.sale_price),0) as total_sales,
    IFNULL(sum(vr.net_proceeds),0) as net_proceeds
    from tblVehicles as v
    inner join tblUsers as u on u.user_id=v.user_id 
    inner join tblVehicleRuns as vr on vr.vehicle_id=v.vehicle_id
    where v.user_id=user_id AND Date(vr.createdAt) BETWEEN start_date AND end_date AND vr.sale_status=true
    group by v.user_id;
   END
  `);

    //auctioneer-side
    //aFilterByAuction
    await queryInterface.sequelize.query(`
 DROP PROCEDURE IF EXISTS aAucUncatUnitCount;
`);
    await queryInterface.sequelize.query(`
 CREATE PROCEDURE aAucUncatUnitCount(IN auctioneer_id INT, IN week_id INT)
 BEGIN
 SELECT 
0 as auction_id,
    COALESCE(vr.lane_id, 'Not Provided') AS auction_name,
    COUNT(vr.vehicle_run_id) AS units
FROM 
    tblOpportunities AS o
LEFT JOIN 
    tblVehicleRuns AS vr ON vr.opportunity_id = o.opportunity_id
WHERE 
    o.auctioneer_id = auctioneer_id AND o.week_id = week_id AND vr.lane_id IS NULL
GROUP BY 
    COALESCE(vr.lane_id, 'Not Provided'); 
END
`);
    //aFilterByAuction
    await queryInterface.sequelize.query(`
 DROP PROCEDURE IF EXISTS aFilterByAuction;
`);
    await queryInterface.sequelize.query(`
 CREATE PROCEDURE aFilterByAuction(IN auctioneer_id INT, IN week_id INT)
 BEGIN
 SELECT
 au.auction_id,
 au.name as auction_name,
 COUNT(vr.vehicle_run_id) AS units
FROM tblOpportunities AS o
JOIN tblAuctioneers AS a ON o.auctioneer_id = a.auctioneer_id
JOIN tblAuctionLanes AS al ON a.auctioneer_id = al.auctioneer_id
JOIN tblAuctions AS au ON al.auction_id = au.auction_id
LEFT JOIN tblVehicleRuns AS vr ON al.lane_id = vr.lane_id AND vr.opportunity_id = o.opportunity_id 
WHERE o.auctioneer_id=auctioneer_id AND o.week_id=week_id
GROUP BY au.auction_id;
END
`);

    //auctioneer-side
    //aFilterByConditionLight
    await queryInterface.sequelize.query(`
 DROP PROCEDURE IF EXISTS aFilterByConditionLight;
`);
    await queryInterface.sequelize.query(`
 CREATE PROCEDURE aFilterByConditionLight(IN auctioneer_id INT, IN week_id INT)
 BEGIN
 SELECT
  vr.condition_light AS condition_light,
  COUNT(vr.vehicle_run_id) AS units
FROM tblOpportunities AS o
JOIN tblAuctioneers AS a ON o.auctioneer_id = a.auctioneer_id
LEFT JOIN tblVehicleRuns AS vr ON o.opportunity_id = vr.opportunity_id
WHERE o.auctioneer_id = auctioneer_id AND o.week_id = week_id
GROUP BY vr.condition_light
ORDER BY condition_light DESC;
END
`);
    //auctioneer-side
    //aFilterBySaleStatus
    await queryInterface.sequelize.query(`
 DROP PROCEDURE IF EXISTS aFilterBySaleStatus;
`);
    await queryInterface.sequelize.query(`
 CREATE PROCEDURE aFilterBySaleStatus(IN auctioneer_id INT, IN week_id INT)
 BEGIN
 SELECT
        CASE
            WHEN vr.sale_status = 1 THEN 'true'
            WHEN vr.sale_status = 0 THEN 'false'
            ELSE 'unknown'
        END AS sale_status,
        COUNT(vr.vehicle_run_id) AS units
    FROM tblOpportunities AS o
    JOIN tblAuctioneers AS a ON o.auctioneer_id = a.auctioneer_id
    LEFT JOIN tblVehicleRuns AS vr ON o.opportunity_id = vr.opportunity_id
    WHERE o.auctioneer_id = auctioneer_id AND o.week_id = week_id AND vr.sale_status IS NOT NULL
    GROUP BY vr.sale_status;
END
`);

    //Auctioneer-side
    //AuctioneerStats
    await queryInterface.sequelize.query(`
    DROP PROCEDURE IF EXISTS AuctioneerStats;
  `);
    await queryInterface.sequelize.query(`
    CREATE PROCEDURE AuctioneerStats( IN auctioneer_id INT,
      IN start_date DATE,
      IN end_date DATE)
    BEGIN
    SELECT 
    COUNT(vr.sale_status) AS sold_units,
    SUM(vr.sale_price) AS total_sales,
    SUM(vr.net_proceeds) AS net_proceeds
FROM tblOpportunities AS o
INNER JOIN tblAuctioneers AS a ON a.auctioneer_id = o.auctioneer_id
INNER JOIN tblVehicleRuns AS vr ON vr.opportunity_id = o.opportunity_id
WHERE o.auctioneer_id = auctioneer_id 
  AND DATE(vr.createdAt) BETWEEN start_date AND end_date
  AND vr.sale_status = TRUE
GROUP BY vr.sale_status;
   END
  `);
  },

  async down(queryInterface, Sequelize) {
    //UserSide
    await queryInterface.sequelize.query(`
      DROP PROCEDURE IF EXISTS uAucUncatUnitCount;
    `);
    await queryInterface.sequelize.query(`
      DROP PROCEDURE IF EXISTS uFilterByAuction;
    `);
    await queryInterface.sequelize.query(`
      DROP PROCEDURE IF EXISTS uFilterByConditionLight;
    `);
    await queryInterface.sequelize.query(`
      DROP PROCEDURE IF EXISTS uFilterBySaleStatus;
    `);
    await queryInterface.sequelize.query(`
      DROP PROCEDURE IF EXISTS UserStats;
    `);
    //AuctioneerSide
    await queryInterface.sequelize.query(`
      DROP PROCEDURE IF EXISTS aAucUncatUnitCount;
    `);
    await queryInterface.sequelize.query(`
      DROP PROCEDURE IF EXISTS aFilterByAuction;
    `);
    await queryInterface.sequelize.query(`
      DROP PROCEDURE IF EXISTS aFilterByConditionLight;
    `);
    await queryInterface.sequelize.query(`
      DROP PROCEDURE IF EXISTS aFilterBySaleStatus;
    `);
    await queryInterface.sequelize.query(`
      DROP PROCEDURE IF EXISTS AuctioneerStats;
    `);
  },
};

Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists