add: export excell sparepart
This commit is contained in:
@@ -1,43 +1,56 @@
|
|||||||
const SparepartService = require('../services/sparepart.service');
|
const SparepartService = require("../services/sparepart.service");
|
||||||
const { setResponse, setResponsePaging, checkValidate } = require('../helpers/utils');
|
const {
|
||||||
|
setResponse,
|
||||||
|
setResponsePaging,
|
||||||
|
checkValidate,
|
||||||
|
} = require("../helpers/utils");
|
||||||
|
|
||||||
|
const ExcelJS = require("exceljs");
|
||||||
|
|
||||||
const {
|
const {
|
||||||
insertSparepartSchema,
|
insertSparepartSchema,
|
||||||
updateSparepartSchema,
|
updateSparepartSchema,
|
||||||
} = require('../validate/sparepart.schema');
|
} = require("../validate/sparepart.schema");
|
||||||
|
|
||||||
class SparepartController {
|
class SparepartController {
|
||||||
static async getAll(req, res) {
|
static async getAll(req, res) {
|
||||||
const queryParams = req.query;
|
const queryParams = req.query;
|
||||||
const results = await SparepartService.getAllSparepart(queryParams);
|
const results = await SparepartService.getAllSparepart(queryParams);
|
||||||
const response = await setResponsePaging(queryParams, results, 'Sparepart found');
|
const response = await setResponsePaging(
|
||||||
|
queryParams,
|
||||||
|
results,
|
||||||
|
"Sparepart found"
|
||||||
|
);
|
||||||
res.status(response.statusCode).json(response);
|
res.status(response.statusCode).json(response);
|
||||||
}
|
}
|
||||||
|
|
||||||
static async getById(req, res) {
|
static async getById(req, res) {
|
||||||
const { id } = req.params;
|
const { id } = req.params;
|
||||||
const results = await SparepartService.getSparepartById(id);
|
const results = await SparepartService.getSparepartById(id);
|
||||||
const response = await setResponse(results, 'Sparepart found');
|
const response = await setResponse(results, "Sparepart found");
|
||||||
res.status(response.statusCode).json(response);
|
res.status(response.statusCode).json(response);
|
||||||
}
|
}
|
||||||
|
|
||||||
static async create(req, res) {
|
static async create(req, res) {
|
||||||
const { error, value } = await checkValidate(insertSparepartSchema, req);
|
const { error, value } = await checkValidate(insertSparepartSchema, req);
|
||||||
if (error) {
|
if (error) {
|
||||||
return res.status(400).json(setResponse(error, 'Validation failed', 400));
|
return res.status(400).json(setResponse(error, "Validation failed", 400));
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
if (req.file) {
|
if (req.file) {
|
||||||
const file = req.file;
|
const file = req.file;
|
||||||
const ext = require('path').extname(file.originalname).toLowerCase();
|
const ext = require("path").extname(file.originalname).toLowerCase();
|
||||||
const typeDoc = ext === ".pdf" ? "PDF" : "IMAGE";
|
const typeDoc = ext === ".pdf" ? "PDF" : "IMAGE";
|
||||||
const folder = typeDoc === "PDF" ? "pdf" : "images";
|
const folder = typeDoc === "PDF" ? "pdf" : "images";
|
||||||
const pathDocument = `${folder}/${file.filename}`;
|
const pathDocument = `${folder}/${file.filename}`;
|
||||||
value.sparepart_foto = pathDocument;
|
value.sparepart_foto = pathDocument;
|
||||||
}
|
}
|
||||||
value.userId = req.user.user_id
|
value.userId = req.user.user_id;
|
||||||
const results = await SparepartService.createSparepart(value);
|
const results = await SparepartService.createSparepart(value);
|
||||||
const response = await setResponse(results, 'Sparepart created successfully');
|
const response = await setResponse(
|
||||||
|
results,
|
||||||
|
"Sparepart created successfully"
|
||||||
|
);
|
||||||
return res.status(response.statusCode).json(response);
|
return res.status(response.statusCode).json(response);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
const response = setResponse([], err.message, err.statusCode || 500);
|
const response = setResponse([], err.message, err.statusCode || 500);
|
||||||
@@ -49,32 +62,137 @@ class SparepartController {
|
|||||||
const { id } = req.params;
|
const { id } = req.params;
|
||||||
const { error, value } = await checkValidate(updateSparepartSchema, req);
|
const { error, value } = await checkValidate(updateSparepartSchema, req);
|
||||||
if (error) {
|
if (error) {
|
||||||
return res.status(400).json(setResponse(error, 'Validation failed', 400));
|
return res.status(400).json(setResponse(error, "Validation failed", 400));
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
if (req.file) {
|
if (req.file) {
|
||||||
const file = req.file;
|
const file = req.file;
|
||||||
const ext = require('path').extname(file.originalname).toLowerCase();
|
const ext = require("path").extname(file.originalname).toLowerCase();
|
||||||
const typeDoc = ext === ".pdf" ? "PDF" : "IMAGE";
|
const typeDoc = ext === ".pdf" ? "PDF" : "IMAGE";
|
||||||
const folder = typeDoc === "PDF" ? "pdf" : "images";
|
const folder = typeDoc === "PDF" ? "pdf" : "images";
|
||||||
const pathDocument = `${folder}/${file.filename}`;
|
const pathDocument = `${folder}/${file.filename}`;
|
||||||
value.sparepart_foto = pathDocument;
|
value.sparepart_foto = pathDocument;
|
||||||
}
|
}
|
||||||
value.userId = req.user.user_id
|
value.userId = req.user.user_id;
|
||||||
const results = await SparepartService.updateSparepart(id, value);
|
const results = await SparepartService.updateSparepart(id, value);
|
||||||
const response = await setResponse(results, 'Sparepart updated successfully');
|
const response = await setResponse(
|
||||||
|
results,
|
||||||
|
"Sparepart updated successfully"
|
||||||
|
);
|
||||||
res.status(response.statusCode).json(response);
|
res.status(response.statusCode).json(response);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
const response = setResponse([], err.message, err.statusCode || 500);
|
const response = setResponse([], err.message, err.statusCode || 500);
|
||||||
res.status(response.statusCode).json(response);
|
res.status(response.statusCode).json(response);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static async exportExcel(req, res) {
|
||||||
|
try {
|
||||||
|
const queryParams = req.query || {};
|
||||||
|
queryParams.limit = null;
|
||||||
|
|
||||||
|
const results = await SparepartService.getAllSparepart(queryParams);
|
||||||
|
|
||||||
|
const ExcelJS = require("exceljs");
|
||||||
|
const fs = require("fs");
|
||||||
|
const path = require("path");
|
||||||
|
|
||||||
|
const workbook = new ExcelJS.Workbook();
|
||||||
|
const worksheet = workbook.addWorksheet("Sparepart Data");
|
||||||
|
|
||||||
|
worksheet.columns = [
|
||||||
|
{ header: "Name Sparepart", key: "sparepart_name", width: 30 },
|
||||||
|
{ header: "Code Sparepart", key: "sparepart_code", width: 20 },
|
||||||
|
{ header: "QTY Sparepart", key: "sparepart_qty", width: 15 },
|
||||||
|
{ header: "Merk", key: "sparepart_merk", width: 20 },
|
||||||
|
{ header: "Model", key: "sparepart_model", width: 20 },
|
||||||
|
{ header: "Unit", key: "sparepart_unit", width: 10 },
|
||||||
|
{ header: "Stock", key: "sparepart_stok", width: 10 },
|
||||||
|
{ header: "Foto", key: "sparepart_foto", width: 25 },
|
||||||
|
{ header: "Item Type", key: "sparepart_item_type", width: 25 },
|
||||||
|
{ header: "Dibuat Pada", key: "created_at", width: 20 },
|
||||||
|
];
|
||||||
|
|
||||||
|
worksheet.addRows(
|
||||||
|
results.data.map((item) => ({
|
||||||
|
sparepart_name: item.sparepart_name,
|
||||||
|
sparepart_code: item.sparepart_code,
|
||||||
|
sparepart_qty: item.sparepart_qty,
|
||||||
|
sparepart_merk: item.sparepart_merk,
|
||||||
|
sparepart_model: item.sparepart_model,
|
||||||
|
sparepart_unit: item.sparepart_unit,
|
||||||
|
sparepart_stok: item.sparepart_stok,
|
||||||
|
sparepart_foto: "",
|
||||||
|
sparepart_item_type: item.sparepart_item_type,
|
||||||
|
created_at: item.created_at,
|
||||||
|
}))
|
||||||
|
);
|
||||||
|
|
||||||
|
for (let i = 0; i < results.data.length; i++) {
|
||||||
|
const item = results.data[i];
|
||||||
|
const rowNumber = i + 2;
|
||||||
|
|
||||||
|
if (!item.sparepart_foto) continue;
|
||||||
|
|
||||||
|
let foto = item.sparepart_foto.trim();
|
||||||
|
|
||||||
|
foto = foto.replace(/^images\//, "");
|
||||||
|
|
||||||
|
const fullPath = path.resolve(process.cwd(), "uploads", "images", foto);
|
||||||
|
|
||||||
|
if (fs.existsSync(fullPath)) {
|
||||||
|
const ext = fullPath.split(".").pop().toLowerCase();
|
||||||
|
|
||||||
|
const imageId = workbook.addImage({
|
||||||
|
filename: fullPath,
|
||||||
|
extension: ext,
|
||||||
|
});
|
||||||
|
|
||||||
|
worksheet.addImage(imageId, {
|
||||||
|
tl: { col: 7, row: rowNumber - 1 },
|
||||||
|
ext: { width: 80, height: 80 },
|
||||||
|
});
|
||||||
|
|
||||||
|
worksheet.getRow(rowNumber).height = 70;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
worksheet.getRow(1).eachCell((cell) => {
|
||||||
|
cell.font = { bold: true };
|
||||||
|
cell.alignment = { horizontal: "center" };
|
||||||
|
});
|
||||||
|
|
||||||
|
const buffer = await workbook.xlsx.writeBuffer();
|
||||||
|
|
||||||
|
res.setHeader(
|
||||||
|
"Content-Type",
|
||||||
|
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
|
||||||
|
);
|
||||||
|
res.setHeader(
|
||||||
|
"Content-Disposition",
|
||||||
|
"attachment; filename=sparepart_data.xlsx"
|
||||||
|
);
|
||||||
|
|
||||||
|
return res.send(buffer);
|
||||||
|
} catch (error) {
|
||||||
|
console.log("Export Excel Error:", error);
|
||||||
|
return res.status(500).json({
|
||||||
|
message: error.message,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static async delete(req, res) {
|
static async delete(req, res) {
|
||||||
const { id } = req.params;
|
const { id } = req.params;
|
||||||
const results = await SparepartService.deleteSparepart(id, req.user.user_id);
|
const results = await SparepartService.deleteSparepart(
|
||||||
const response = await setResponse(results, 'Sparepart deleted successfully');
|
id,
|
||||||
|
req.user.user_id
|
||||||
|
);
|
||||||
|
const response = await setResponse(
|
||||||
|
results,
|
||||||
|
"Sparepart deleted successfully"
|
||||||
|
);
|
||||||
res.status(response.statusCode).json(response);
|
res.status(response.statusCode).json(response);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
module.exports = SparepartController;
|
module.exports = SparepartController;
|
||||||
|
|||||||
@@ -1,19 +1,45 @@
|
|||||||
const express = require('express');
|
const express = require("express");
|
||||||
const SparepartController = require('../controllers/sparepart.controller');
|
const SparepartController = require("../controllers/sparepart.controller");
|
||||||
const verifyToken = require('../middleware/verifyToken');
|
const verifyToken = require("../middleware/verifyToken");
|
||||||
const verifyAccess = require('../middleware/verifyAccess');
|
const verifyAccess = require("../middleware/verifyAccess");
|
||||||
const upload = require('../middleware/uploads');
|
const upload = require("../middleware/uploads");
|
||||||
const router = express.Router();
|
const router = express.Router();
|
||||||
|
|
||||||
router.route('/')
|
router.get(
|
||||||
.get(verifyToken.verifyAccessToken, SparepartController.getAll)
|
"/export",
|
||||||
.post(verifyToken.verifyAccessToken, verifyAccess(), upload.single('sparepart_foto')
|
verifyToken.verifyAccessToken,
|
||||||
, SparepartController.create);
|
SparepartController.exportExcel
|
||||||
|
);
|
||||||
|
|
||||||
router.route('/:id')
|
router
|
||||||
|
.route("/")
|
||||||
|
.get(verifyToken.verifyAccessToken, SparepartController.getAll)
|
||||||
|
.post(
|
||||||
|
verifyToken.verifyAccessToken,
|
||||||
|
verifyAccess(),
|
||||||
|
upload.single("sparepart_foto"),
|
||||||
|
SparepartController.create
|
||||||
|
);
|
||||||
|
|
||||||
|
router
|
||||||
|
.route("/:id")
|
||||||
.get(verifyToken.verifyAccessToken, SparepartController.getById)
|
.get(verifyToken.verifyAccessToken, SparepartController.getById)
|
||||||
.put(verifyToken.verifyAccessToken, verifyAccess(), upload.single('sparepart_foto')
|
.put(
|
||||||
, SparepartController.update)
|
verifyToken.verifyAccessToken,
|
||||||
.delete(verifyToken.verifyAccessToken, verifyAccess(), SparepartController.delete);
|
verifyAccess(),
|
||||||
|
upload.single("sparepart_foto"),
|
||||||
module.exports = router;
|
SparepartController.update
|
||||||
|
)
|
||||||
|
.delete(
|
||||||
|
verifyToken.verifyAccessToken,
|
||||||
|
verifyAccess(),
|
||||||
|
SparepartController.delete
|
||||||
|
);
|
||||||
|
|
||||||
|
router.get(
|
||||||
|
"/export",
|
||||||
|
verifyToken.verifyAccessToken,
|
||||||
|
SparepartController.exportExcel
|
||||||
|
);
|
||||||
|
|
||||||
|
module.exports = router;
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 113 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 113 KiB |
|
Before Width: | Height: | Size: 122 KiB After Width: | Height: | Size: 122 KiB |
Reference in New Issue
Block a user