From 9a9e28dd55dcfbb0d1938862838902530c178897 Mon Sep 17 00:00:00 2001 From: mahyargdz Date: Wed, 19 Feb 2025 10:05:44 +0330 Subject: [PATCH] fix: bug in inserting guarantee serial and originality serial --- components/admin/TheSidebar.vue | 26 ++++------- server/controllers/serialsExelController.js | 43 ++++++++---------- server/controllers/transactionController.js | 9 ++-- .../serials/1/code-guaranty-dahua-512gb.xlsx | Bin 0 -> 10512 bytes .../serials_products/1/esalat-dahua-512G.xlsx | Bin 0 -> 10420 bytes 5 files changed, 34 insertions(+), 44 deletions(-) create mode 100644 static/uploads/serials/1/code-guaranty-dahua-512gb.xlsx create mode 100644 static/uploads/serials_products/1/esalat-dahua-512G.xlsx diff --git a/components/admin/TheSidebar.vue b/components/admin/TheSidebar.vue index 61bc26f..dc1f107 100644 --- a/components/admin/TheSidebar.vue +++ b/components/admin/TheSidebar.vue @@ -76,7 +76,7 @@ @@ -89,9 +89,6 @@ font-icon="fas fa-folder" @update:show="val => setDropdownState('adminS_CustomerM_Dropdown', val)" > - - - @@ -321,7 +318,7 @@ v-if="hasPermission('gps')" :show="getDropdownState('adminS_GpsM_Dropdown')" name="مدیریت پنل جی پی اس" - :font-icon="getDropdownState('adminS_GpsM_Dropdown') ? `fas fa-folder-open`:`fas fa-folder` " + :font-icon="getDropdownState('adminS_GpsM_Dropdown') ? `fas fa-folder-open` : `fas fa-folder`" @update:show="val => setDropdownState('adminS_GpsM_Dropdown', val)" > - - diff --git a/server/controllers/serialsExelController.js b/server/controllers/serialsExelController.js index 286224b..5b4741e 100644 --- a/server/controllers/serialsExelController.js +++ b/server/controllers/serialsExelController.js @@ -25,11 +25,12 @@ module.exports.addExel = [ checkValidations(validationResult), async (req, res) => { if (!req.files?.file) return res.status(422).json({ validation: { file: { msg: 'فایل را اضافه کنید' } } }) - if (!req.files?.file.name.split('.').some(item => ['xlsx', 'xltx', 'xlsm', 'xlsb'].includes(item))) return res.status(422).json({ validation: { file: { msg: 'فرمت فایل درست نمیباشد' } } }) + if (!req.files?.file.name.split('.').some(item => ['xlsx', 'xltx', 'xlsm', 'xlsb'].includes(item))) + return res.status(422).json({ validation: { file: { msg: 'فرمت فایل درست نمیباشد' } } }) const file = req.files.file const { type, g } = req.body try { - const exelFile = await readXlsxFile(Buffer.from(file.data)); + const exelFile = await readXlsxFile(Buffer.from(file.data)) const data = await creator(exelFile, type, g, file.name) const path = (type === 'guaranteeSerial' ? guaranteeSerialsPath : productSerialsPath) + `/${g}` @@ -42,8 +43,6 @@ module.exports.addExel = [ // res.status(201).json({ msg: _sr.fa.response.success_save, data }) res.status(201).json(data) - - } catch (err) { return res500(res, err) } @@ -72,7 +71,6 @@ module.exports.getAllExels = [ } ] - module.exports.removeExel = [ async (req, res) => { const type = req.query?.type @@ -82,7 +80,7 @@ module.exports.removeExel = [ const validValues = ['guaranteeSerial', 'orginality'] if (!validValues.includes(type)) return res500(res, 'choose type') const path = (type === 'guaranteeSerial' ? guaranteeSerialsPath : productSerialsPath) + `/${g}` - await Serial.deleteMany({ fileName: req.params.name }) + await Serial.deleteMany({ fileName: req.params.name }) fs.unlink(`${path}/${req.params.name}`, err => { if (err) return res404(res, _faSr.not_found.item_id) @@ -110,18 +108,19 @@ module.exports.checkSerial = [ try { const { serial, type, g } = req.body const code = serial.toString().trim().toLowerCase() + console.log(code) const serialStatus = await Serial.findOne({ code, type, kind: g }) + console.log(serialStatus) if (!serialStatus) { res404(res, 'این کد در سامانه وجود ندارد') } else { res.status(200).json({ message: serialStatus.message }) } - } catch (e) { console.log(e) return res500(res, e) @@ -135,9 +134,9 @@ const creator = (exel, type, g, name) => { for (const row of exel) { // eslint-disable-next-line no-constant-condition const code = row[1].toString().trim().toLowerCase() - const serial = await Serial.findOne({ code }) + const serial = await Serial.findOne({ code, type, kind: g }) if (serial) { - console.info("Repeated serial ", row[1]) + console.info('Repeated serial => ', row[1]) serial.model = row[0] serial.message = row[2] @@ -146,24 +145,22 @@ const creator = (exel, type, g, name) => { serial.fileName = name serial.save() } else { - await Serial.create( - { - code, - model: row[0], - message: row[2], - type, - fileName: name, - kind: g - } - ) + console.log('inserting new =>', row[1]) + await Serial.create({ + code, + model: row[0], + message: row[2], + type, + fileName: name, + kind: g + }) } - } - resolve("end") + resolve('end') } catch (error) { - console.log(error); + console.log(error) reject(error.message) } }) -} \ No newline at end of file +} diff --git a/server/controllers/transactionController.js b/server/controllers/transactionController.js index a496d12..bce5398 100644 --- a/server/controllers/transactionController.js +++ b/server/controllers/transactionController.js @@ -73,7 +73,7 @@ module.exports.add_transaction = [ ] return msgArray.join(' ') } - + // TODO: here arpa service if (agent === 'main') { const ArpaResponse = await saveTransactionToArpa(data, items, db_name) await TransactionDraft.findByIdAndRemove(draftId) @@ -107,7 +107,7 @@ module.exports.add_transaction = [ }) } } catch (e) { - console.log('there is an error in (Post Transaction to Arpa)', e, data) + console.log('there is an error in (Post Transaction to Arpa)', e, data) return res500(res, e) } } @@ -140,7 +140,7 @@ module.exports.get_all_transactions_for_agent = [ async (req, res) => { try { const { agent_id } = req - const transactions = await Transaction.find({ agent_id }).sort({created_at:-1}) + const transactions = await Transaction.find({ agent_id }).sort({ created_at: -1 }) return res.json(transactions) } catch (e) { return res500(res, e) @@ -291,7 +291,8 @@ module.exports.change_transaction_status_by_agent = [ module.exports.get_all_agents_inbox_for_admin = [ async (req, res) => { try { - const transactions = await Transaction.find().sort({created_at:-1}) + const transactions = await Transaction.find() + .sort({ created_at: -1 }) .populate('agent_id', 'agent_code full_name') .populate('user_id', 'province_id province_name city_id city_name') return res.json(transactions) diff --git a/static/uploads/serials/1/code-guaranty-dahua-512gb.xlsx b/static/uploads/serials/1/code-guaranty-dahua-512gb.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..448ed8f989a06a83852b279c360112357e563644 GIT binary patch literal 10512 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≫)rSWX$omyZZi|0)M&_b%>%3chGQjsPq< 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 literal 0 HcmV?d00001 diff --git a/static/uploads/serials_products/1/esalat-dahua-512G.xlsx b/static/uploads/serials_products/1/esalat-dahua-512G.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..cb32c9e89225c916494f26408ba7b7868466cd5b GIT binary patch literal 10420 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 literal 0 HcmV?d00001