first commit
This commit is contained in:
@@ -0,0 +1,855 @@
|
||||
import React, { useState, useEffect } from 'react';
|
||||
import moment from 'moment';
|
||||
import { get_item, set_item, clear_item } from '../components/localStorage';
|
||||
import { db } from '../constants/constants';
|
||||
import { getMethodName, METHODS } from '../constants/methodNames';
|
||||
import { getDownloadJson1 } from '../controller/functions';
|
||||
import { AppName, PerformicsIRAppName } from '../../../AppSpecificContant';
|
||||
import { Platform } from 'react-native';
|
||||
|
||||
export const PJP_colList = ['MID', 'ChannelId', 'StoreId', 'StoreCode', 'EmpId', 'VisitDate', 'ChainId', 'ChainName', 'StoreName', 'Address', 'Location', 'Landmark', 'CityId', 'CityName', 'StateId', 'StateName', 'RegionId', 'StoreTypeId', 'StoreType', 'Pincode', 'Latitude', 'Longitude', 'Phone', 'Mobile', 'ContactPerson', 'Email', 'UploadStatus', 'GeoTag', 'GeoFenceRadius', 'ExpiryStock', 'InTime', 'OutTime', 'CameraAllow', 'AddVisiAllow', 'LastVisitDate', 'Score', 'MinTimeTaken', 'StoreCategoryId', 'StoreCategory', 'StoreClassId', 'StoreClass', 'TaxType', 'GSTno', 'GSTImage', 'MTDMerchandised', 'DistributorId'];
|
||||
|
||||
export function getDownloadDataTask() {
|
||||
var DownloadTasks = ["Table_Structure"]; // not required in redownload
|
||||
DownloadTasks.push("Mapping_JourneyPlan"); // not required in redownload
|
||||
DownloadTasks.push("Adhoc_JourneyPlan"); // not required in redownload
|
||||
DownloadTasks.push("NonProgram_JourneyPlan"); // not required in redownload
|
||||
DownloadTasks.push("Master_Distributor"); // not required in redownload
|
||||
// DownloadTasks.push("Master_Route"); // not required in redownload
|
||||
DownloadTasks.push("Master_MenuAppDashboard");
|
||||
|
||||
DownloadTasks.push("Product_Master");
|
||||
DownloadTasks.push("Report_AferCheckIn"),
|
||||
|
||||
DownloadTasks.push("Non_Working_Reason"); // not required in redownload
|
||||
DownloadTasks.push("Menu_Master"); // not required in redownload
|
||||
DownloadTasks.push("Mapping_Menu");
|
||||
DownloadTasks.push("Mapping_MenuConfiguration"); // not required in redownload
|
||||
DownloadTasks.push("Mapping_MenuDistributorPoint");
|
||||
DownloadTasks.push("Master_Category"); // not required in redownload
|
||||
DownloadTasks.push("Master_Competitor"); // not required in redownload && only used in competition vis, comp promo, sampling
|
||||
DownloadTasks.push("Master_NonVisibility"); // not required in redownload
|
||||
DownloadTasks.push("Master_Display"); // not required in redownload
|
||||
DownloadTasks.push("Mapping_ProductAssortmentStorewise");
|
||||
DownloadTasks.push("Mapping_ProductAssortment");
|
||||
DownloadTasks.push("Mapping_Visibility");
|
||||
DownloadTasks.push("LastVisit_ClosingStock");
|
||||
|
||||
DownloadTasks.push("Master_Feedback"); // not required in redownload
|
||||
DownloadTasks.push("Master_IssueCategory");
|
||||
DownloadTasks.push("Master_IssueType"); // not required in redownload
|
||||
DownloadTasks.push("Master_PromoType"); // not required in redownload
|
||||
DownloadTasks.push("Master_WindowDefinition");
|
||||
DownloadTasks.push("Mapping_StoreWindow");
|
||||
DownloadTasks.push("Master_WindowQuestion");
|
||||
DownloadTasks.push("Mapping_WindowQuestion");
|
||||
DownloadTasks.push("Master_WindowReason");
|
||||
DownloadTasks.push("Master_WindowStockDefinition");
|
||||
DownloadTasks.push("Master_POSMDefinition");
|
||||
DownloadTasks.push("Mapping_StorePOSM");
|
||||
DownloadTasks.push("Master_POSMReason");
|
||||
DownloadTasks.push("Master_POSMQuestion");
|
||||
DownloadTasks.push("Mapping_POSMQuestion");
|
||||
// DownloadTasks.push("User_CurrentPosmStock");
|
||||
DownloadTasks.push("Master_VisibilityDefinition");
|
||||
DownloadTasks.push("Mapping_StoreVisibility");
|
||||
DownloadTasks.push("Master_VisibilityQuestion");
|
||||
DownloadTasks.push("Mapping_VisibilityQuestion");
|
||||
DownloadTasks.push("Master_VisibilityStockDefinition");
|
||||
DownloadTasks.push("Master_VisibilityReason");
|
||||
DownloadTasks.push("Master_PromotionDefinition");
|
||||
DownloadTasks.push("Mapping_StorePromotion");
|
||||
DownloadTasks.push("Master_PromotionQuestion");
|
||||
DownloadTasks.push("Mapping_PromotionQuestion");
|
||||
DownloadTasks.push("Master_PromotionStockDefinition");
|
||||
DownloadTasks.push("Master_PromotionReason");
|
||||
DownloadTasks.push("Master_ShareOfShelfDefinition");
|
||||
DownloadTasks.push("Mapping_StoreShareOfShelf");
|
||||
DownloadTasks.push("Mapping_ShareOfShelfTarget");
|
||||
DownloadTasks.push("Mapping_StoreShareOfShelfTarget");
|
||||
DownloadTasks.push("Master_ImageType"); // not required in redownload
|
||||
DownloadTasks.push("Report_PromoterMerchandiserPerformance"); // not required in redownload
|
||||
DownloadTasks.push("Master_Checklist");
|
||||
DownloadTasks.push("Mapping_DisplayChecklist");
|
||||
DownloadTasks.push("Master_SurveyQuestion");
|
||||
DownloadTasks.push("Master_FeedbackQuestion");
|
||||
DownloadTasks.push("Mapping_Survey");
|
||||
DownloadTasks.push("Master_CategoryDefinition");
|
||||
DownloadTasks.push("Mapping_StoreCategory");
|
||||
DownloadTasks.push("Master_CategoryQuestion");
|
||||
DownloadTasks.push("Mapping_CategoryQuestion");
|
||||
DownloadTasks.push("Master_CategoryStockDefinition");
|
||||
DownloadTasks.push("Master_CategoryReason");
|
||||
DownloadTasks.push("Master_PosSaleDefinition");
|
||||
DownloadTasks.push("Mapping_PosSaleDefinition");
|
||||
DownloadTasks.push("Mapping_StorePosSaleDefinition");
|
||||
DownloadTasks.push("Master_PosSaleReason");
|
||||
DownloadTasks.push("Report_ComplianceScore"); // not required in redownload
|
||||
DownloadTasks.push("Master_Document"); // not required in redownload
|
||||
DownloadTasks.push("Master_StoreChecklist");
|
||||
DownloadTasks.push("Master_MenuReports"); // not required in redownload
|
||||
DownloadTasks.push("Master_City"); // not required in redownload
|
||||
DownloadTasks.push("Master_StoreType"); // not required in redownload
|
||||
DownloadTasks.push("Master_Chain"); // not required in redownload
|
||||
DownloadTasks.push("Master_StoreCategory"); // not required in redownload
|
||||
DownloadTasks.push("Master_StoreClass"); // not required in redownload
|
||||
DownloadTasks.push("Non_Working_ReasonDistributor"); // not required in redownload
|
||||
DownloadTasks.push("Master_Channel"); // not required in redownload
|
||||
DownloadTasks.push("PriviousVisit_Orders");
|
||||
DownloadTasks.push("NonMerchandising_JourneyPlan"); // not required in redownload
|
||||
DownloadTasks.push("Master_VisitorFeedbackQuestion");
|
||||
DownloadTasks.push("Master_VisitorLoginQuestion");
|
||||
DownloadTasks.push("Mapping_StoreVisibilitySpecific");
|
||||
DownloadTasks.push("Master_SamplingDefinition");
|
||||
DownloadTasks.push("Master_SamplingStockDefinition");
|
||||
DownloadTasks.push("Mapping_StoreSampling");
|
||||
DownloadTasks.push("Master_SamplingQuestion");
|
||||
DownloadTasks.push("Mapping_SamplingQuestion");
|
||||
DownloadTasks.push("Master_SamplingReason");
|
||||
DownloadTasks.push("Master_Program");
|
||||
DownloadTasks.push("Master_ProgramDefinition");
|
||||
DownloadTasks.push("Mapping_StoreProgram");
|
||||
DownloadTasks.push("Master_ProgramQuestion");
|
||||
DownloadTasks.push("Mapping_ProgramQuestion");
|
||||
DownloadTasks.push("Master_ProgramStockDefinition");
|
||||
DownloadTasks.push("Master_ProgramReason");
|
||||
DownloadTasks.push("Mapping_StoreAuditGrading");
|
||||
DownloadTasks.push("Mapping_StoreTargetBased");
|
||||
DownloadTasks.push("Master_TargetBasedQuestion");
|
||||
DownloadTasks.push("Mapping_TargetBasedQuestion");
|
||||
DownloadTasks.push("Master_ContractFormQuestion");
|
||||
DownloadTasks.push("Mapping_ContractForm");
|
||||
DownloadTasks.push("Master_NonContractFromReason");
|
||||
DownloadTasks.push("Master_ShareOfShelfEyeLevelDefinition");
|
||||
DownloadTasks.push("Mapping_StoreShareOfShelfEyeLevel");
|
||||
DownloadTasks.push("Master_DistributorFilter");
|
||||
DownloadTasks.push("Master_CityFilter");
|
||||
DownloadTasks.push("Master_StoreTypeFilter");
|
||||
DownloadTasks.push("Master_DetailerContent"); // not required in redownload
|
||||
DownloadTasks.push("Master_UserHomeLocation");
|
||||
// DownloadTasks.push("Mapping_WarehouseItem");
|
||||
DownloadTasks.push("Master_WarehouseItem");
|
||||
DownloadTasks.push("Master_WarehouseItemQuestion");
|
||||
DownloadTasks.push("Mapping_WarehouseItemQuestion");
|
||||
DownloadTasks.push("Master_WarehouseNonDeployReason");
|
||||
DownloadTasks.push("Mapping_WarehouseCampaignItem");
|
||||
DownloadTasks.push("Mapping_WarehouseCampaignItemQuestion");
|
||||
DownloadTasks.push("Mapping_WarehouseCampaignDeployment");
|
||||
DownloadTasks.push("Mapping_WarehousePrimaryItem");
|
||||
DownloadTasks.push("Report_WarehouseStockInHand");
|
||||
DownloadTasks.push("Warehouse_InwardData");
|
||||
DownloadTasks.push("Master_WarehouseReason");
|
||||
DownloadTasks.push("Master_StockPromoType");
|
||||
DownloadTasks.push("Training_Document");
|
||||
DownloadTasks.push("Mapping_AddStoreConfiguration");
|
||||
|
||||
DownloadTasks.push("KYC_StoreList");
|
||||
DownloadTasks.push("Mapping_KYCConfiguration");
|
||||
DownloadTasks.push("KYC_StoreListRejected");
|
||||
DownloadTasks.push("Mapping_KYCUploaded");
|
||||
let DownloadTasks1 = [];
|
||||
for (let i = 0; i < DownloadTasks.length; i++) {
|
||||
let key = DownloadTasks[i];
|
||||
let index = i + 1;
|
||||
let IsMandatory = (key == 'Table_Structure' || key == 'Mapping_JourneyPlan') ? true : false;
|
||||
let obj = { "KeyId": index, "DownloadKey": key, "IsMandatory": IsMandatory, "DevActive": true, "ProdActive": true, "DownloadSequence": index };
|
||||
DownloadTasks1.push(obj);
|
||||
if (i == DownloadTasks.length - 1) {
|
||||
return DownloadTasks1;
|
||||
}
|
||||
}
|
||||
// return DownloadTasks;
|
||||
}
|
||||
|
||||
export const devDownloadKeys = (availableTables = []) => {
|
||||
const allDevKeys = [
|
||||
// "Master_MenuReportStoreWise",
|
||||
// "Mapping_SideMenuMiscellaneous",
|
||||
// "StoreList_OfflineOrder",
|
||||
// "Master_NonOrderReason",
|
||||
// "Mapping_AdditionalVisibilityProduct",
|
||||
// "Gyancast_TrainingContent",
|
||||
// "Gyancast_TrainingContentQuestion",
|
||||
// "Gyancast_PopupMessage"
|
||||
];
|
||||
|
||||
// ✅ Filter only those keys which exist in Table_Structure
|
||||
const filteredKeys = allDevKeys.filter(key => availableTables.includes(key));
|
||||
|
||||
return filteredKeys.map((key, index) => {
|
||||
const IsMandatory = (key === 'Table_Structure' || key === 'Mapping_JourneyPlan');
|
||||
return {
|
||||
KeyId: index + 1,
|
||||
DownloadKey: key,
|
||||
IsMandatory,
|
||||
DevActive: true,
|
||||
ProdActive: true,
|
||||
DownloadSequence: index + 1
|
||||
};
|
||||
});
|
||||
};
|
||||
|
||||
// export const devDownloadKeys = (availableTables = []) => {
|
||||
// const allDevKeys = [
|
||||
// "Mapping_ProductPTR"
|
||||
// ];
|
||||
|
||||
// const shouldFilter = Array.isArray(availableTables) && availableTables.length > 0;
|
||||
// console.log("AvailbleFilterTable:",shouldFilter)
|
||||
|
||||
// const filteredKeys = shouldFilter
|
||||
// ? allDevKeys.filter(key => availableTables.includes(key))
|
||||
// : allDevKeys; // 🔥 fallback
|
||||
|
||||
// return filteredKeys.map((key, index) => ({
|
||||
// KeyId: index + 1000,
|
||||
// DownloadKey: key,
|
||||
// IsMandatory: false,
|
||||
// DevActive: true,
|
||||
// ProdActive: true,
|
||||
// DownloadSequence: index + 100
|
||||
// }));
|
||||
// };
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
export async function getReDDownloadTask(AddKeys = []) {
|
||||
return await new Promise((resolve, reject) => {
|
||||
let myd = [];
|
||||
myd.push("Mapping_ProductAssortmentStorewise");
|
||||
myd.push("Mapping_ProductAssortment");
|
||||
myd.push("LastVisit_ClosingStock");
|
||||
myd.push("Mapping_StoreWindow");
|
||||
myd.push("Mapping_WindowQuestion");
|
||||
myd.push("Mapping_StorePOSM");
|
||||
myd.push("Mapping_POSMQuestion");
|
||||
myd.push("Mapping_StoreVisibility");
|
||||
myd.push("Mapping_VisibilityQuestion");
|
||||
myd.push("Mapping_StorePromotion");
|
||||
myd.push("Mapping_PromotionQuestion");
|
||||
myd.push("Mapping_StoreShareOfShelf");
|
||||
myd.push("Mapping_DisplayChecklist");
|
||||
myd.push("Mapping_Survey");
|
||||
myd.push("Mapping_StoreCategory");
|
||||
myd.push("Mapping_CategoryQuestion");
|
||||
myd.push("Mapping_StoreVisibilitySpecific");
|
||||
myd.push("Mapping_ShareOfShelfTarget");
|
||||
myd.push("Product_Master");
|
||||
myd.push("Mapping_Menu");
|
||||
myd.push("Mapping_MenuDistributorPoint");
|
||||
myd.push("Master_WindowDefinition");
|
||||
myd.push("Master_WindowQuestion");
|
||||
myd.push("Master_WindowReason");
|
||||
myd.push("Master_WindowStockDefinition");
|
||||
myd.push("Master_POSMDefinition");
|
||||
myd.push("Master_POSMReason");
|
||||
myd.push("Master_POSMQuestion");
|
||||
myd.push("User_CurrentPosmStock");
|
||||
myd.push("Master_VisibilityDefinition");
|
||||
myd.push("Master_VisibilityQuestion");
|
||||
myd.push("Master_VisibilityStockDefinition");
|
||||
myd.push("Master_VisibilityReason");
|
||||
myd.push("Master_PromotionDefinition");
|
||||
myd.push("Master_PromotionQuestion");
|
||||
myd.push("Master_PromotionStockDefinition");
|
||||
myd.push("Master_PromotionReason");
|
||||
myd.push("Master_ShareOfShelfDefinition");
|
||||
myd.push("Master_Checklist");
|
||||
myd.push("Master_SurveyQuestion");
|
||||
myd.push("Master_FeedbackQuestion");
|
||||
myd.push("Master_CategoryDefinition");
|
||||
myd.push("Master_CategoryQuestion");
|
||||
myd.push("Master_CategoryStockDefinition");
|
||||
myd.push("Master_CategoryReason");
|
||||
myd.push("Master_PosSaleDefinition");
|
||||
myd.push("Mapping_PosSaleDefinition");
|
||||
myd.push("Master_PosSaleReason");
|
||||
myd.push("Master_StoreChecklist");
|
||||
myd.push("PriviousVisit_Orders");
|
||||
myd.push("Master_VisitorFeedbackQuestion");
|
||||
myd.push("Master_SamplingDefinition");
|
||||
myd.push("Master_SamplingStockDefinition");
|
||||
myd.push("Mapping_StoreSampling");
|
||||
myd.push("Master_SamplingQuestion");
|
||||
myd.push("Master_Program");
|
||||
myd.push("Master_ProgramDefinition");
|
||||
myd.push("Mapping_StoreProgram");
|
||||
myd.push("Master_ProgramQuestion");
|
||||
myd.push("Mapping_ProgramQuestion");
|
||||
myd.push("Master_ProgramStockDefinition");
|
||||
myd.push("Mapping_StoreTargetBased");
|
||||
myd.push("Master_TargetBasedQuestion");
|
||||
myd.push("Mapping_TargetBasedQuestion");
|
||||
var DownloadTasks = AddKeys.concat(myd);
|
||||
|
||||
let DownloadTasks1 = [];
|
||||
for (let i = 0; i < DownloadTasks.length; i++) {
|
||||
let key = DownloadTasks[i];
|
||||
let index = i + 1;
|
||||
let IsMandatory = (key == 'Table_Structure' || key == 'Mapping_JourneyPlan') ? true : false;
|
||||
let obj = { "KeyId": index, "DownloadKey": key, "IsMandatory": IsMandatory, "DevActive": true, "ProdActive": true, "DownloadSequence": index };
|
||||
DownloadTasks1.push(obj);
|
||||
if (i == DownloadTasks.length - 1) {
|
||||
// console.log('DownloadTasks1:',DownloadTasks1);
|
||||
resolve(DownloadTasks1);
|
||||
}
|
||||
}
|
||||
}).catch((Err) => {
|
||||
console.log(Err);
|
||||
return [];
|
||||
})
|
||||
|
||||
|
||||
}
|
||||
|
||||
export async function getReDownloadTasks1(props) {
|
||||
console.log('getReDownloadTasks1');
|
||||
return new Promise(async (resolve, reject) => {
|
||||
var DownloadTasks1 = [];
|
||||
console.log('chekc 1', props.DownloadKey);
|
||||
if (props.DownloadKey != null && props.DownloadKey != '') {
|
||||
console.log('props.DownloadKey');
|
||||
let prop_dk = JSON.parse(props.DownloadKey);
|
||||
let AllDTs = prop_dk['DownloadKey'] || [];
|
||||
console.log('set server d keys', AllDTs.length);
|
||||
if (AllDTs.length > 0) {
|
||||
for (let i = 0; i < AllDTs.length; i++) {
|
||||
let item = AllDTs[i];
|
||||
if (item.ReDownload == 1 || item.ReDownload == 'true' || item.ReDownload == '1') {
|
||||
DownloadTasks1.push(item);
|
||||
}
|
||||
if (i == AllDTs.length - 1) {
|
||||
console.log('set server d2 keys', DownloadTasks1.length);
|
||||
let sortedDTs = await SortDownloadkeys(DownloadTasks1);
|
||||
resolve(sortedDTs);
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
resolve([]);
|
||||
}
|
||||
}
|
||||
else {
|
||||
DownloadTasks1 = getDownloadDataTask();
|
||||
resolve(DownloadTasks1);
|
||||
}
|
||||
|
||||
}).catch((Err) => {
|
||||
console.log('getDTasks err', Err);
|
||||
return [];
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
export async function SortDownloadkeys(AllDTs) {
|
||||
return await new Promise.all(AllDTs.sort((a, b) => {
|
||||
if (a.DownloadSequence < b.DownloadSequence) {
|
||||
return -1;
|
||||
}
|
||||
if (a.DownloadSequence > b.DownloadSequence) {
|
||||
return 1;
|
||||
}
|
||||
// a must be equal to b
|
||||
return 0;
|
||||
})).then((val) => {
|
||||
return AllDTs;
|
||||
});
|
||||
}
|
||||
|
||||
export async function getBeatDownloadTask() {
|
||||
let DownloadTasks = ["JourneyPlan_RouteWise"];
|
||||
return await getReDDownloadTask(DownloadTasks);
|
||||
}
|
||||
|
||||
export async function getNewStoresDownloadTask(PJP_Table) {
|
||||
let DownloadTasks = ["Mapping_JourneyPlan", "Adhoc_JourneyPlan"];
|
||||
return await getReDDownloadTask(DownloadTasks);
|
||||
}
|
||||
|
||||
|
||||
export async function onNoData(data = [], shouldStop = false, tbname = '', props, showErrorModal = () => { }, res) {
|
||||
console.log("res on no data in ReDownloadTask:", res);
|
||||
const ST = props.StaticText || {};
|
||||
if (tbname != '') {
|
||||
db.transaction(function (txn) {
|
||||
// delete all today data
|
||||
txn.executeSql(`delete from ${tbname} where 1=1`, [], function (txn1, txnres) {
|
||||
console.log('deleted all data for ' + tbname);
|
||||
}, function (Etxn, err) {
|
||||
console.log('err:', err);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
if (shouldStop == true) {
|
||||
let msg = '';
|
||||
// res should be set only when there is network or other related issue
|
||||
if (res == '') {
|
||||
msg = ST.Nodatafoundfor + tbname + '';
|
||||
if (tbname == 'Mapping_JourneyPlan') {
|
||||
msg = ST.Youhavenojourneyplanfortoday;
|
||||
}
|
||||
}
|
||||
else {
|
||||
msg = res + " Please ensure you are connected to the internet and retry downloading! ";
|
||||
}
|
||||
console.log("msg :", msg);
|
||||
// set is Data downloaded to false so that no other parts of app can be accessed if data is not downloaded
|
||||
// update download status on local async storage
|
||||
let dateWiseDataDownload = await get_item('dateWiseDataDownload');
|
||||
let dateWiseDataDownload1 = dateWiseDataDownload != null ? JSON.parse(dateWiseDataDownload) : {};
|
||||
let todayDate = moment(new Date()).format('DD/MM/YYYY');
|
||||
dateWiseDataDownload1[todayDate] = false;
|
||||
set_item('dateWiseDataDownload', JSON.stringify(dateWiseDataDownload1));
|
||||
// update downloaed status on redux props
|
||||
props.setTodayDataExists(false);
|
||||
props.setGlobalData({ isDataDownloaded: false })
|
||||
// notify(msg);
|
||||
// show error msg
|
||||
let obj = { "ErrorMsg": "!! Error in downloading data !!", "ErrorSubMsg": tbname, "ErrorDetail": msg }
|
||||
props.set_startDownload({ startDownload: false });
|
||||
//hide download modal and show Error in Download modal with details
|
||||
showErrorModal(obj);
|
||||
}
|
||||
else {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
export async function insert_TaskDownloadedData(
|
||||
res,
|
||||
D_key,
|
||||
D_ColList = [],
|
||||
props,
|
||||
showErrorModal = () => {},
|
||||
setTaskResponse = () => {}
|
||||
) {
|
||||
console.log('insert_TaskDownloadedData:', D_key);
|
||||
let r_obj = { r: false, data_arr: [] };
|
||||
|
||||
try {
|
||||
if (res && typeof res === 'object' && res[D_key] != null && res[D_key] !== '') {
|
||||
const jsonData = res[D_key] || [];
|
||||
|
||||
if (!Array.isArray(jsonData) || jsonData.length === 0) {
|
||||
console.warn(`⚠️ No data to insert in table: ${D_key}`);
|
||||
return { r: true, data_arr: [] };
|
||||
}
|
||||
|
||||
const columns = Array.from(
|
||||
new Set(jsonData.flatMap(row => Object.keys(row)))
|
||||
);
|
||||
|
||||
const normalizedData = jsonData.map(row => {
|
||||
const normalizedRow = {};
|
||||
columns.forEach(col => {
|
||||
normalizedRow[col] = row.hasOwnProperty(col) ? row[col] : null;
|
||||
});
|
||||
return normalizedRow;
|
||||
});
|
||||
|
||||
console.log("normalizedData", normalizedData);
|
||||
|
||||
const valuesArray = normalizedData.map(row => {
|
||||
const valueList = columns.map(col => {
|
||||
const val = row[col];
|
||||
if (val === null || val === undefined) return 'NULL';
|
||||
if (typeof val === 'number') return val;
|
||||
if (typeof val === 'boolean') return val ? 1 : 0;
|
||||
|
||||
return `'${val.toString().replace(/'/g, "")}'`;
|
||||
|
||||
});
|
||||
return `(${valueList.join(',')})`;
|
||||
});
|
||||
|
||||
const sql = `INSERT INTO ${D_key} (${columns.join(',')}) VALUES ${valuesArray.join(',')};`;
|
||||
|
||||
await new Promise((resolve, reject) => {
|
||||
db.transaction((txn) => {
|
||||
txn.executeSql(`DELETE FROM ${D_key}`, [], () => {
|
||||
txn.executeSql(sql, [], () => {
|
||||
setTaskResponse(jsonData);
|
||||
console.log(`✅ Inserted data into table: ${D_key}`);
|
||||
resolve();
|
||||
}, (tx, error) => {
|
||||
console.error(`❌ Insert failed in table: ${D_key}`, error);
|
||||
reject(error);
|
||||
});
|
||||
}, (tx, error) => {
|
||||
console.error(`❌ Delete failed in table: ${D_key}`, error);
|
||||
reject(error);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
return { r: true, data_arr: jsonData };
|
||||
}
|
||||
|
||||
if (res && typeof res === 'object' && res[0]?.Result === "No Data") {
|
||||
console.log('No data found');
|
||||
return { r: true, data_arr: [] };
|
||||
}
|
||||
|
||||
if (res && typeof res === 'object' && res.success === false) {
|
||||
console.log('Error in downloading network', res);
|
||||
return { r: false, data_arr: [] };
|
||||
}
|
||||
|
||||
console.log('Error in downloading else', res);
|
||||
return { r: false, data_arr: [] };
|
||||
|
||||
} catch (err) {
|
||||
console.log('err:', err);
|
||||
return { r: false, data_arr: [] };
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
export async function checkIfDataAvlbl(storeData, D_key, cols = 'StoreId') {
|
||||
console.log('checkIfDataAvlbl', D_key)
|
||||
let { StoreId, ChannelId, RegionId, StoreTypeId } = storeData;
|
||||
let colsToCompare = cols.split(',');
|
||||
if (cols != '' && cols != null && storeData != null && colsToCompare.length > 0) {
|
||||
return new Promise((resolve, reject) => {
|
||||
let q = '', whereq = '';
|
||||
q = `Select * from ${D_key}`;
|
||||
for (let i = 0; i < colsToCompare.length; i++) {
|
||||
let column = colsToCompare[i];
|
||||
if (column != null && column != '' && storeData[column] != null && storeData[column] != '') {
|
||||
whereq += whereq == '' ? ` Where ` : ' and ';
|
||||
whereq += ` ${column}=${storeData[column]} `;
|
||||
}
|
||||
}
|
||||
q += ' ' + whereq;
|
||||
console.log('query to check store data:', q)
|
||||
db.transaction(function (txn) {
|
||||
// delete all today data
|
||||
txn.executeSql(q, [], function (txn1, txnres) {
|
||||
console.log(D_key + ' data length:', txnres.rows.length);
|
||||
if (txnres.rows.length > 0) {
|
||||
resolve(true);
|
||||
}
|
||||
else {
|
||||
resolve(false);
|
||||
}
|
||||
}, function (txnE, txnerr) {
|
||||
console.log(txnerr);
|
||||
resolve(false);
|
||||
});
|
||||
});
|
||||
}).catch((err) => {
|
||||
console.log('error:', err);
|
||||
return false;
|
||||
})
|
||||
}
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
//************************** download functionallity*******************
|
||||
export async function startRedownload(props, DownloadTasks, dowloadedCount, totalCount, setDowloadedCount = () => { }, setTotalCount = () => { }) {
|
||||
console.log('startRedownload', DownloadTasks);
|
||||
if (totalCount == (DownloadTasks.length - 1) && totalCount > 0) {
|
||||
console.log('setDowloadedCount', dowloadedCount, 0);
|
||||
setDowloadedCount(0);
|
||||
}
|
||||
else {
|
||||
console.log('setTotalCount', totalCount, (DownloadTasks.length - 1));
|
||||
setTotalCount((DownloadTasks.length - 1));
|
||||
}
|
||||
return DownloadTasks;
|
||||
}
|
||||
|
||||
export async function executeTasks(props, storeData, DownloadTasks, dowloadedCount, totalCount, setDowloadedCount = () => { }, setDownloadingText = () => { }, onDownloadComplete = () => { }, setTaskResponse = () => { }, showErrorModal = () => { }) {
|
||||
// var DownloadTasks=getDownloadDataTask();
|
||||
let loginInfo = await get_item('loginInfo');
|
||||
const loginDetails = JSON.parse(loginInfo);
|
||||
var currentIndex = dowloadedCount;
|
||||
console.log('currentIndex:', currentIndex);
|
||||
if (currentIndex >= 0) {
|
||||
let dk_data = DownloadTasks[currentIndex];
|
||||
console.log('dk_data', dk_data);
|
||||
let key = dk_data.DownloadKey || '';
|
||||
setDownloadingText(key);
|
||||
let IsDataExists = await CheckIfRequiredDownload(storeData, currentIndex, DownloadTasks);
|
||||
if (!IsDataExists) {
|
||||
var data = await getPostData(DownloadTasks, currentIndex);
|
||||
var url = props.baseurl + getMethodName(METHODS.DOWNLOADJSON_METHOD);
|
||||
console.log(url, data);
|
||||
await getDownloadJson1(url, data)
|
||||
.then(async (res) => {
|
||||
console.log('res of download get');
|
||||
let isAdded = await updateTaskRes(props, storeData, res, currentIndex, DownloadTasks, setTaskResponse, true, showErrorModal);
|
||||
if (isAdded == true) {
|
||||
if (currentIndex == DownloadTasks.length - 1) {
|
||||
console.log('last found all downloaded');
|
||||
onDownloadComplete();
|
||||
}
|
||||
else {
|
||||
console.log('all downloaded but last not found ');
|
||||
}
|
||||
}
|
||||
else {
|
||||
console.log('Cannot download all Data');
|
||||
}
|
||||
})
|
||||
.catch(err => {
|
||||
console.log('onPage Team error', err);
|
||||
});
|
||||
}
|
||||
else {
|
||||
let isAdded = await updateTaskRes(props, storeData, [{ "Result": "No Data" }], currentIndex, DownloadTasks, setTaskResponse, false, showErrorModal);
|
||||
if (isAdded == true) {
|
||||
if (currentIndex == DownloadTasks.length - 1) {
|
||||
console.log('last found all downloaded');
|
||||
onDownloadComplete();
|
||||
}
|
||||
else {
|
||||
console.log('all downloaded but last not found ');
|
||||
}
|
||||
}
|
||||
else {
|
||||
console.log('Cannot download all Data');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
////need to optimize this function
|
||||
export async function CheckIfRequiredDownload(storeData, index, DownloadTasks) {
|
||||
let dk_data = DownloadTasks[index];
|
||||
let key = dk_data.DownloadKey || '';
|
||||
return new Promise(async (resolve, reject) => {
|
||||
switch (key) {
|
||||
case 'Mapping_Menu': {
|
||||
let IsDataAvlbl = await checkIfDataAvlbl(storeData, key, 'ChannelId,RegionId,StoreTypeId,StoreCategoryId');
|
||||
console.log('IsDataAvlbl:', IsDataAvlbl);
|
||||
resolve(IsDataAvlbl);
|
||||
break;
|
||||
}
|
||||
case 'Mapping_Visibility': {
|
||||
let IsDataAvlbl = await checkIfDataAvlbl(storeData, key, 'StoreId');
|
||||
console.log('IsDataAvlbl:', IsDataAvlbl);
|
||||
resolve(IsDataAvlbl);
|
||||
break;
|
||||
}
|
||||
|
||||
case 'Mapping_Promotion': {
|
||||
let IsDataAvlbl = await checkIfDataAvlbl(storeData, key, 'StateId,ChainId,StoreTypeId');
|
||||
console.log('IsDataAvlbl:', IsDataAvlbl);
|
||||
resolve(IsDataAvlbl);
|
||||
break;
|
||||
}
|
||||
case 'Mapping_ProductAssortmentStorewise': {
|
||||
let IsDataAvlbl = await checkIfDataAvlbl(storeData, key, 'StoreId,ProductId,MSL,MBQ');
|
||||
console.log('IsDataAvlbl:', IsDataAvlbl);
|
||||
resolve(IsDataAvlbl);
|
||||
break;
|
||||
}
|
||||
|
||||
case 'Mapping_ProductAssortment': {
|
||||
let IsDataAvlbl = await checkIfDataAvlbl(storeData, key, 'StoreId,ProductId,MSL,MBQ');
|
||||
console.log('IsDataAvlbl:', IsDataAvlbl);
|
||||
resolve(IsDataAvlbl);
|
||||
break;
|
||||
}
|
||||
|
||||
case 'LastVisit_ClosingStock': {
|
||||
let IsDataAvlbl = await checkIfDataAvlbl(storeData, key, 'StoreId');
|
||||
console.log('IsDataAvlbl:', IsDataAvlbl);
|
||||
resolve(IsDataAvlbl);
|
||||
break;
|
||||
}
|
||||
|
||||
case 'Mapping_StoreWindow': {
|
||||
let IsDataAvlbl = await checkIfDataAvlbl(storeData, key, 'StoreId');
|
||||
console.log('IsDataAvlbl:', IsDataAvlbl);
|
||||
resolve(IsDataAvlbl);
|
||||
break;
|
||||
}
|
||||
case 'Mapping_StorePOSM': {
|
||||
let IsDataAvlbl = await checkIfDataAvlbl(storeData, key, 'StoreId');
|
||||
console.log('IsDataAvlbl:', IsDataAvlbl);
|
||||
resolve(IsDataAvlbl);
|
||||
break;
|
||||
}
|
||||
case 'Mapping_StoreShelfTalker': {
|
||||
let IsDataAvlbl = await checkIfDataAvlbl(storeData, key, 'StoreId');
|
||||
console.log('IsDataAvlbl:', IsDataAvlbl);
|
||||
resolve(IsDataAvlbl);
|
||||
break;
|
||||
}
|
||||
|
||||
case 'Mapping_StoreVisibility': {
|
||||
let IsDataAvlbl = await checkIfDataAvlbl(storeData, key, 'StoreId');
|
||||
console.log('IsDataAvlbl:', IsDataAvlbl);
|
||||
resolve(IsDataAvlbl);
|
||||
break;
|
||||
}
|
||||
|
||||
case 'Mapping_StorePromotion': {
|
||||
let IsDataAvlbl = await checkIfDataAvlbl(storeData, key, 'StoreId');
|
||||
console.log('IsDataAvlbl:', IsDataAvlbl);
|
||||
resolve(IsDataAvlbl);
|
||||
break;
|
||||
}
|
||||
|
||||
case 'Mapping_StoreShareOfShelf': {
|
||||
let IsDataAvlbl = await checkIfDataAvlbl(storeData, key, 'StoreId');
|
||||
console.log('IsDataAvlbl:', IsDataAvlbl);
|
||||
resolve(IsDataAvlbl);
|
||||
break;
|
||||
}
|
||||
case 'Mapping_Survey': {
|
||||
let IsDataAvlbl = await checkIfDataAvlbl(storeData, key, 'StoreId');
|
||||
console.log('IsDataAvlbl:', IsDataAvlbl);
|
||||
resolve(IsDataAvlbl);
|
||||
break;
|
||||
}
|
||||
case 'Mapping_StoreCategory': {
|
||||
let IsDataAvlbl = await checkIfDataAvlbl(storeData, key, 'StoreId');
|
||||
console.log('IsDataAvlbl:', IsDataAvlbl);
|
||||
resolve(IsDataAvlbl);
|
||||
break;
|
||||
}
|
||||
case 'Mapping_StoreVisibilitySpecific': {
|
||||
let IsDataAvlbl = await checkIfDataAvlbl(storeData, key, 'StoreId');
|
||||
console.log('IsDataAvlbl:', IsDataAvlbl);
|
||||
resolve(IsDataAvlbl);
|
||||
break;
|
||||
}
|
||||
case 'Mapping_ShareOfShelfTarget': {
|
||||
let IsDataAvlbl = await checkIfDataAvlbl(storeData, key, 'StateId');
|
||||
console.log('IsDataAvlbl:', IsDataAvlbl);
|
||||
resolve(IsDataAvlbl);
|
||||
break;
|
||||
}
|
||||
|
||||
case 'Mapping_MenuDistributorPoint': {
|
||||
let IsDataAvlbl = await checkIfDataAvlbl(storeData, key, 'MenuId');
|
||||
console.log('IsDataAvlbl:', IsDataAvlbl);
|
||||
resolve(IsDataAvlbl);
|
||||
break;
|
||||
}
|
||||
|
||||
case 'PriviousVisit_Orders': {
|
||||
let IsDataAvlbl = await checkIfDataAvlbl(storeData, key, 'StoreId');
|
||||
console.log('IsDataAvlbl:', IsDataAvlbl);
|
||||
resolve(IsDataAvlbl);
|
||||
break;
|
||||
}
|
||||
case 'Mapping_StoreSampling': {
|
||||
let IsDataAvlbl = await checkIfDataAvlbl(storeData, key, 'StoreId');
|
||||
console.log('IsDataAvlbl:', IsDataAvlbl);
|
||||
resolve(IsDataAvlbl);
|
||||
break;
|
||||
}
|
||||
case 'Mapping_StoreAuditGrading': {
|
||||
let IsDataAvlbl = await checkIfDataAvlbl(storeData, key, 'StoreId');
|
||||
console.log('IsDataAvlbl:', IsDataAvlbl);
|
||||
resolve(IsDataAvlbl);
|
||||
break;
|
||||
}
|
||||
case 'Mapping_StoreProgram': {
|
||||
let IsDataAvlbl = await checkIfDataAvlbl(storeData, key, 'StoreId');
|
||||
console.log('IsDataAvlbl:', IsDataAvlbl);
|
||||
resolve(IsDataAvlbl);
|
||||
break;
|
||||
}
|
||||
case 'Mapping_StoreTargetBased': {
|
||||
let IsDataAvlbl = await checkIfDataAvlbl(storeData, key, 'StoreId');
|
||||
console.log('IsDataAvlbl:', IsDataAvlbl);
|
||||
resolve(IsDataAvlbl);
|
||||
break;
|
||||
}
|
||||
|
||||
default: resolve(false); break;
|
||||
|
||||
}
|
||||
|
||||
}).catch((err) => {
|
||||
console.log('error in check', err);
|
||||
return false;
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
////need to optimize this function
|
||||
export async function updateTaskRes(
|
||||
props,
|
||||
storeData,
|
||||
res,
|
||||
index,
|
||||
DownloadTasks,
|
||||
setTaskResponse = () => {},
|
||||
isDownloadExists = true,
|
||||
showErrorModal = () => {}
|
||||
) {
|
||||
try {
|
||||
const dk_data = DownloadTasks[index];
|
||||
const key = dk_data?.DownloadKey || '';
|
||||
const IsMandatory = dk_data?.IsMandatory === 'true' || dk_data?.IsMandatory === 1;
|
||||
console.log("res-------", key);
|
||||
const i_res = await insert_TaskDownloadedData(res, key, {}, props, showErrorModal);
|
||||
const { data_arr, r } = i_res;
|
||||
if (r) {
|
||||
setTaskResponse(data_arr);
|
||||
}
|
||||
console.log('r:', r);
|
||||
return r;
|
||||
} catch (err) {
|
||||
console.log('error in downloading', err);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
export async function getPostData(DownloadTasks, index = 0) {
|
||||
// var DownloadTasks=getDownloadDataTask();
|
||||
// let token=await get_item('loginToken');
|
||||
let dk_data = DownloadTasks[index];
|
||||
let key = dk_data.DownloadKey || '';
|
||||
let loginInfo = await get_item('loginInfo');
|
||||
const loginDetails = JSON.parse(loginInfo);
|
||||
const todate = new Date();
|
||||
const today = moment(todate).format("HH:mm:ss");
|
||||
let projectInfo = await get_item('projectInfo');
|
||||
let projectDetails = projectInfo != null ? JSON.parse(projectInfo) : {};
|
||||
var postdata = {};
|
||||
if (index >= 0) {
|
||||
postdata = {
|
||||
Downloadtype: key,
|
||||
Username: loginDetails.UserId,
|
||||
Param1: '',
|
||||
Param2: (key == "Gyancast_TrainingContent" || key == "Gyancast_PopupMessage") ? projectDetails?.ProjectCode : (Platform.OS == "ios" ? "iOS" : "Android"),
|
||||
|
||||
};
|
||||
}
|
||||
return postdata;
|
||||
}
|
||||
|
||||
export async function getPostData2(key = '') {
|
||||
let loginInfo = await get_item('loginInfo');
|
||||
const loginDetails = JSON.parse(loginInfo);
|
||||
var postdata = {};
|
||||
if (key != '') {
|
||||
postdata = {
|
||||
Downloadtype: key,
|
||||
Username: loginDetails.UserId,
|
||||
Param1: '',
|
||||
Param2: Platform.OS == "ios" ? "iOS" : "Android",
|
||||
};
|
||||
}
|
||||
|
||||
return postdata;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user