From 5a725d5b8ec8815fbe27707081c70b74146db797 Mon Sep 17 00:00:00 2001 From: 18alantom <2.alan.tom@gmail.com> Date: Thu, 2 Dec 2021 14:50:32 +0530 Subject: [PATCH] patch: convert existing currency values to precision adjusted int strings --- patches/0.0.4/convertCurrencyToStrings.js | 41 +++++++++++++++++++++++ patches/patches.json | 5 +++ 2 files changed, 46 insertions(+) create mode 100644 patches/0.0.4/convertCurrencyToStrings.js diff --git a/patches/0.0.4/convertCurrencyToStrings.js b/patches/0.0.4/convertCurrencyToStrings.js new file mode 100644 index 000000000..f798cbe6b --- /dev/null +++ b/patches/0.0.4/convertCurrencyToStrings.js @@ -0,0 +1,41 @@ +import frappe from 'frappejs'; + +function getTablesToConvert() { + // Do not change loops to map, doesn't work for some reason. + const toConvert = []; + for (let key in frappe.models) { + const model = frappe.models[key]; + + const fieldsToConvert = []; + for (let i in model.fields) { + const field = model.fields[i]; + + if (field.fieldtype === 'Currency') { + fieldsToConvert.push(field.fieldname); + } + } + + if (fieldsToConvert.length > 0 && !model.isSingle && !model.basedOn) { + toConvert.push({ name: key, fields: fieldsToConvert }); + } + } + + return toConvert; +} + +export default async function execute() { + const toConvert = getTablesToConvert(); + for (let { name, fields } of toConvert) { + const rows = await frappe.db.knex(name); + const convertedRows = rows.map((row) => { + for (let field of fields) { + if (row[field] === null) { + continue; + } + row[field] = frappe.pesa(row[field]).internal.bigint.toString(); + } + return row; + }); + await frappe.db.prestigeTheTable(name, convertedRows); + } +} diff --git a/patches/patches.json b/patches/patches.json index 31ad50ee0..e450d7076 100644 --- a/patches/patches.json +++ b/patches/patches.json @@ -3,5 +3,10 @@ "version": "0.0.3", "fileName": "makePaymentRefIdNullable", "beforeMigrate": true + }, + { + "version": "0.0.4", + "fileName": "convertCurrencyToStrings", + "beforeMigrate": true } ]