856 lines
31 KiB
JavaScript
856 lines
31 KiB
JavaScript
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;
|
|
}
|
|
|