const { sequelize, Financials , Itemsmaster , Entities , Entityfinyear} = require('../models') const { Op } = require("sequelize"); const { logMsg } = require('../services/logger.js'); function lineItemFetching(financials_data) { try { return new Promise((resolve, reject) => { let data = []; financials_data.forEach((value, index, array) => { if(value.nature == "STANDALONE" && index == 0 || index == 1 || index == 2) { let object = {}; current_year_in_object = value.year; fin_data_year = current_year_in_object.substring(0, 4); let year = {"year": fin_data_year }; // get balance sheet line items here let balance_sheet = value.bs; for (const [bs_key, bs_value ] of Object.entries(balance_sheet)) { if(bs_key === "assets" || bs_key === "liabilities" || bs_key === "subTotals") { Object.assign(object, year, bs_value) } } // end of balance_sheet object for loop // get profit and loss line items here let profit_and_loss = value.pnl; for (const [pnl_key, pnl_value ] of Object.entries(profit_and_loss)) { if(pnl_key === "lineItems" || pnl_key === "subTotals") { Object.assign(object, year, pnl_value) } } // end of profit_and_loss object for loop setTimeout(() => { data.push(object); }, 100); } // end of if condition }); // end of financials data foreach setTimeout(() => { resolve(data); }, 500); }); } catch (error) { console.log(error); } } function lineItemMapping(financials_lineitems_data_object,entityid) { try { return new Promise((resolve, reject) => { Itemsmaster.findAll({where : { pvtltditemkey: {[Op.ne]: 'NULL'} } , attributes: [ 'id','pvtltditemkey' ] }) .then(ItemsmasterData => { let data = []; year = financials_lineitems_data_object.year; ItemsmasterData.forEach((element , key) => { for (const [key, item_value ] of Object.entries(financials_lineitems_data_object)) { remove_underscore = key.replace(/_/g, ""); converted_item_key = remove_underscore.toLowerCase(); if(element.dataValues.pvtltditemkey === converted_item_key) { let obj = {entityid : entityid ,itemid : element.dataValues.id , value : item_value , year : year}; data.push(obj); } } }); setTimeout(() => { resolve(data); }, 500); }); }); } catch (error) { console.log(error); } } function lineItemUpdate(update_array_data) { try { entityid = update_array_data[0].entityid; fy = update_array_data[0].year; var LineItemUpdate = new Promise((resolve, reject) => { update_array_data.forEach((value,index) => { if(value.value != null) { Financials.update( { value: value.value , is_editable : 0 } , { where: { entity_id: value.entityid , itemid: value.itemid , fy:value.year} }) .then(data => { logMsg.info("update success : "+ data); }) .catch(err => { logMsg.info("update failed : " + err); }); } if (index === update_array_data.length -1) { resolve(); } }); }); LineItemUpdate.then((Query_data)=>{ //Entities.update({ "probe42_data_status": 0 },{ where: { id: entityid }}); Entityfinyear.update({ probe42_data_status : 1 } , {where : {entityid:entityid , FY :fy}}) .then(async (data) => { logMsg.info("Probe42 data updated for EntityId = "+entityid+" Year = "+fy); Entityfinyear.findAll({where : {entityid:300},rew:true}) .then(async (EntityfinyearData) =>{ let count = 0; for(const value of EntityfinyearData) { count = count + value.probe42_data_status; } if(EntityfinyearData.length == count) { Entities.update({ "probe42_data_status": 0 },{ where: { id: entityid }}); } else if(count >=1) { Entities.update({ "probe42_data_status": 3 },{ where: { id: entityid }}); } }); }).catch(err => { logMsg.info("Probe42 data update failed for EntityId = "+entityid+" Year = "+fy); }); }); } catch (error) { console.log(error); } } module.exports = { lineItemFetching : lineItemFetching , lineItemMapping : lineItemMapping , lineItemUpdate :lineItemUpdate }