DMA Helper file

PHOTO EMBED

Thu Sep 19 2024 12:35:53 GMT+0000 (Coordinated Universal Time)

Saved by @alfred.roshan

import Axios from 'axios';
import CONFIG from '../../../config/config';
import moment from 'moment';

const url = {
  getPortfolioSurveysConsultants:
    CONFIG.BASE_URL + 'double-materiality/getPortfolioSurveysConsultants',
  getSurveys: CONFIG.BASE_URL + 'double-materiality/getSurveys',
};
/*
 Desc: Api to create double materiality
 Params: Data:- will be save on collection based on consultantId
*/ const localUrl =
  'http://localhost:17538/api/v1/';

const createDoubleMaterialitySurvey = async data => {
  let url = CONFIG.BASE_URL + 'createSurveyResult';
  const response = await Axios.post(url, data, {
    headers: {
      'x-api-key': CONFIG.X_API_KEY,
    },
    mode: 'no-cors',
  });
  return response;
};

/*
 Desc: Api to update double materiality
 Params: Data:- will be save on collection based on consultantId
 consultantId:- to identity collection
 currentSurveyId:- id to update doc in collection
 surveyId:- id to update doc in collection
*/
const updateDoubleMaterialitySurvey = async (data, consultantId, currentSurveyId, surveyId) => {
  let url =
    CONFIG.BASE_URL +
      'double-materiality/portfolio-surveys-consultants' +
      '?currentSurveyId=' +
      currentSurveyId ??
    '' + '&surveyId=' + surveyId ??
    '' + '&consultantId=' + consultantId;
  const response = await Axios.put(url, data, {
    headers: {
      'x-api-key': CONFIG.X_API_KEY,
    },
    mode: 'no-cors',
  });
  return response;
};

/*
 Desc: Api to get double materiality details
 Params: 
 consultantId:- to identity collection
 surveyId:- id to update doc in collection
*/
const getbysurveyid = async (surveyId,consultantId) => {
  const response = await Axios.get(`${CONFIG.BASE_URL}getbysurveyid?surveyId=${surveyId}&consultantId=${consultantId || ''}`, {
    headers: {
      'x-api-key': CONFIG.X_API_KEY,
    },
    mode: 'no-cors'
})
if(response?.data?.data['survey-results']) {
  delete response?.data?.data['survey-results'];
}
if(response?.data?.data['workshops']) {
  delete response?.data?.data['workshops'];
}
if(response?.data?.data['financial-workshops']) {
  delete response?.data?.data['financial-workshops'];
}

  return { response, data: () => response?.data?.data || {}, id: response?.data?.data?.id ?? '' };
};

/*
 Desc: Api to get surveyresults details
 Params: 
 consultantId:- to identity collection
 surveyId:- fetch data based on surveyId
*/
const getsurveyresultsbysurveyId = (surveyId,consultantId) => {
  return Axios.get(`${CONFIG.BASE_URL}getsurveyresultsbysurveyId?surveyId=${surveyId}&consultantId=${consultantId || ''}`, {
    headers: {
      'x-api-key': CONFIG.X_API_KEY,
    },
    mode: 'no-cors'
  })
}

/*
 Desc: Api to get workshops details
 Params: 
 consultantId:- to identity collection
surveyId:- fetch data based on surveyId
*/
const getworkshopsbysurveyId = (surveyId,consultantId) => {
  return Axios.get(`${CONFIG.BASE_URL}getworkshopsbysurveyId?surveyId=${surveyId}&consultantId=${consultantId || ''}`, {
    headers: {
      'x-api-key': CONFIG.X_API_KEY,
    },
    mode: 'no-cors'
  })
}

/*
 Desc: Api to get financialworkshops details
 Params: 
 consultantId:- to identity collection
surveyId:- fetch data based on surveyId
*/
const getfinancialworkshopsbysurveyid = (surveyId,consultantId) => {
  return Axios.get(`${CONFIG.BASE_URL}getfinancialworkshopsbysurveyid?surveyId=${surveyId}&consultantId=${consultantId || ''}`, {
    headers: {
      'x-api-key': CONFIG.X_API_KEY,
    },
    mode: 'no-cors'
  })
}

/*
 Desc: function to get subcollection details
 Params: 
 consultantId:- to identity collection
 surveyId:- fetch data based on surveyId
 collectionName: indicate collection name
*/
const getSurveyResultForSubcollection = async (surveyId, consultantId, collectionName) => {
  try {
    if(collectionName == 'survey-results') {
      const response = await getsurveyresultsbysurveyId(surveyId,consultantId);
      const [surveyResult = []] =  response?.data?.data;

      let value = parseSnapShortData(response,collectionName);
      return value;
    }
    if(collectionName == 'workshops') {
      const response = await getworkshopsbysurveyId(surveyId,consultantId);
      const [surveyResult = []] =  response?.data?.data;

      let value = parseSnapShortData(response,collectionName);
      debugger
      return value;
    }
    if(collectionName == 'financial-workshops') {
      const response = await getfinancialworkshopsbysurveyid(surveyId,consultantId);
      const [surveyResult = []] =  response?.data?.data;

      let value = parseSnapShortData(response,collectionName);
      return value;
    }
    if (collectionName == 'dashboard-worksheet-audit-logs') {
      let url = 'getsurveyDashboardWorksheetAuditLogs';
      if (consultantId) {
        url = 'getportfolioSurveyDashboardWorksheetAuditLogs';
      }
      const response = await Axios.get(
        `${CONFIG.AUDIT_LOG_URL}${url}?surveyId=${surveyId}&consultantId=${consultantId || ''}`,
        {
          headers: {
            'x-api-key': CONFIG.X_API_KEY,
          },
          mode: 'no-cors',
        },
      );
      // const [surveyResult = []] =  response?.data?.data;
      let value = parseLogSnapShortData(response, collectionName);
      return value;
    }
    if (collectionName == 'methodology-logs') {
      let url = 'getSurveyMethodologyLogs';
      if (consultantId) {
        url = 'getportfolioSurveyMethodologyLogs';
      }
      const response = await Axios.get(
        `${CONFIG.AUDIT_LOG_URL}${url}?surveyId=${surveyId}&consultantId=${consultantId || ''}`,
        {
          headers: {
            'x-api-key': CONFIG.X_API_KEY,
          },
          mode: 'no-cors',
        },
      );
      // const [surveyResult = []] =  response?.data?.data;

      let value = parseLogSnapShortData(response, collectionName);
      return value;
    }
    if (collectionName == 'methodology-task-logs') {
      let url = 'getsurveyMethodologyTaskAuditLogModel';
      if (consultantId) {
        url = 'getportfolioSurveyMethodologyTaskAuditLogModel';
      }

      const response = await Axios.get(
        `${CONFIG.AUDIT_LOG_URL}${url}?surveyId=${surveyId}&consultantId=${consultantId || ''}`,
        {
          headers: {
            'x-api-key': CONFIG.X_API_KEY,
          },
          mode: 'no-cors',
        },
      );
      // const [surveyResult = []] =  response?.data?.data;
      let value = parseLogSnapShortData(response, collectionName);
      return value;
    }
    if (collectionName == 'action-report-task-logs') {
      let url = 'getsurveyActionReportLogs';
      if (consultantId) {
        url = 'getportfolioSurveyActionReportLogs';
      }

      const response = await Axios.get(
        `${CONFIG.AUDIT_LOG_URL}${url}?surveyId=${surveyId}&consultantId=${consultantId || ''}`,
        {
          headers: {
            'x-api-key': CONFIG.X_API_KEY,
          },
          mode: 'no-cors',
        },
      );
      // const [surveyResult = []] =  response?.data?.data;
      let value = parseLogSnapShortData(response, collectionName);
      return value;
    }
    if (collectionName == 'audit-log') {
      let url = 'getbysurveyId';
      if (consultantId) {
        url = 'getbyportfolioSurveyConsultantId';
      }

      const response = await Axios.get(
        `${CONFIG.AUDIT_LOG_URL}${url}?surveyId=${surveyId}&consultantId=${consultantId || ''}`,
        {
          headers: {
            'x-api-key': CONFIG.X_API_KEY,
          },
          mode: 'no-cors',
        },
      );
      // const [surveyResult = []] =  response?.data?.data;
      let value = parseLogSnapShortData(response, collectionName);
      return value;
    }
  } catch (error) {
    console.log(error, 'error');
  }
};

const getsubmittedSurveyResult = async (surveyId,consultantId) => {
  const response = await Axios.get(`${CONFIG.BASE_URL}getsubmittedSurveyResult?surveyId=${surveyId}&consultantId=${consultantId || ''}`, {
    headers: {
      'x-api-key': CONFIG.X_API_KEY,
    },
    mode: 'no-cors'
  })
  let value = [];
  if (response?.data?.data?.length && response?.data?.data[0]['survey-results']?.length) {
    value = response?.data?.data[0]['survey-results'].map((v, i) => {
      return {
        data: () => v,
        id: v.id || i,
      };
    });
  }
 
  return value;
}

/*
 Desc: function to parse the response and return in expected formate
 Params: 
 response: Response from collection
*/
const parseSnapShortData = response => {
  const surveyResult = response?.data?.data ?? [];
  let value = [];
  if (surveyResult?.length) {
    value = surveyResult.map((v, i) => {
      return {
        data: () => v || {},
        id: v.id || v?._id?.toString() || i,
      };
    });
  }
  return value;
};

const parseLogSnapShortData = (response, collectionName) => {
  const surveyResult = response?.data?.data ?? [];
  let value = [];
  if (surveyResult?.length) {
    value = surveyResult.map((v, i) => {
      return {
        data: () => v || {},
        id: v.id || v?._id?.toString() || i,
      };
    });
  }
  return value;
};

/*
 Desc: Api to update double materiality
 Params: 
 consultantId:- to identity collection
 surveyId:- fetch data based on surveyId
*/
const updateSurveyById =  (consultantId,surveyId,currentSurveyId) => {
  let url = CONFIG.BASE_URL+'double-materiality/portfolio-surveys-consultants'+'?surveyId='+surveyId ?? '';
  url += '&consultantId='+consultantId ?? '';
  url += '&currentSurveyId='+currentSurveyId ?? '';

  const update = async (data, url) => {
    const response = await Axios.put(url, data, {
      headers: {
        'x-api-key': CONFIG.X_API_KEY,
      },
      mode: 'no-cors',
    });
    return response;
  };

  return { update: data => update(data, url), consultantId, surveyId, currentSurveyId };
};

const addToMethodologyLogs = (consultantId, surveyId, currentSurveyId) => {
  let url = CONFIG.AUDIT_LOG_URL + 'setSurveyMethodologyLogs';
  if (consultantId) {
    url = CONFIG.AUDIT_LOG_URL + 'setportfolioSurveyMethodologyLogs';
  }
  
  const add  = async (data,url) => {
    const id =  surveyId ? surveyId :  currentSurveyId;
    console.log(url)
    data = {
      data,
      surveyId: id,
      currentSurveyId,
    };

    const response = await Axios.post(url, data, {
      headers: {
        'x-api-key': CONFIG.X_API_KEY,
      },
      mode: 'no-cors',
    });
    return response;
  }
  
  return {add : (data) => add(data,url) , consultantId, surveyId,currentSurveyId};
}


const setWorkshops = async (consultantId,data) => {
  let url = CONFIG.BASE_URL+'double-materiality/set-workshops?';
    url += '&consultantId='+consultantId ?? '';
    const response = await Axios.post(url,data, {
      headers: {
        'x-api-key': CONFIG.X_API_KEY,
      },
      mode: 'no-cors',
    });
    return response;
}

const updateWorkshops = async (consultantId,id,data) => {
  let url = CONFIG.BASE_URL+'double-materiality/update-workshops?';
    url += '&consultantId='+consultantId ?? '';
    url += '&id='+id ?? '';
    const response = await Axios.put(url,data, {
      headers: {
        'x-api-key': CONFIG.X_API_KEY,
      },
      mode: 'no-cors',
    });
    return response;
}

const setFinancialWorkshops = async (consultantId,data) => {
  let url = CONFIG.BASE_URL+'double-materiality/set-financial-workshops?';
    url += '&consultantId='+consultantId ?? '';
    const response = await Axios.post(url,data, {
      headers: {
        'x-api-key': CONFIG.X_API_KEY,
      },
      mode: 'no-cors',
    });
    return response;
}

const updateFinancialWorkshops = async (consultantId,id,data) => {
  let url = CONFIG.BASE_URL+'double-materiality/update-financial-workshops?';
    url += '&consultantId='+consultantId ?? '';
    url += '&id='+id ?? '';
    const response = await Axios.put(url,data, {
      headers: {
        'x-api-key': CONFIG.X_API_KEY,
      },
      mode: 'no-cors',
    });
    return response;
}


/**
 * Desc: Api to get survey result by id
 * Params: 
    surveyResultId:- to fetch data based on the survey result
 */
const getSurveyResultById = async surveyResId => {
  const response = await Axios.get(
    `${CONFIG.BASE_URL}getsurveyresultsbyId?surveyResultId=${surveyResId}`,
    {
      headers: {
        'x-api-key': CONFIG.X_API_KEY,
      },
      mode: 'no-cors',
    },
  );
  return { response, data: () => response?.data?.data || {}, id: response?.data?.data?.id ?? '' };
};

/**
 * Desc: Api to update survey result
 * Params: 
    consultantId: to identify the collection
    data: to be added in survey-results
 */
const setSurveyResult = async (consultantId, data) => {
  let url = CONFIG.BASE_URL + 'double-materiality/set-survey-results?';
  url += '&consultantId=' + consultantId ?? '';
  const response = await Axios.post(url, data, {
    headers: {
      'x-api-key': CONFIG.X_API_KEY,
    },
    mode: 'no-cors',
  });
  return response;
};

/**
 * Desc: Api to update survey result
 * Params: 
    consultantId: to identify the collection
    id: id of the survey-result to be updated
    data: to be updated against the survey-result selected
 */
const updateSurveyResultData = async (consultantId, id, data) => {
  let url = CONFIG.BASE_URL + 'double-materiality/update-survey-results?';
  url += 'consultantId=' + consultantId ?? '';
  url += '&id=' + id ?? '';
  const response = await Axios.put(url, data, {
    headers: {
      'x-api-key': CONFIG.X_API_KEY,
    },
    mode: 'no-cors',
  });
  return response;
};

const addToSurveyResults = (surveyId, currentSurveyId) => {
  const url = CONFIG.BASE_URL + 'insertIntoSurveyResults';
  const add = async (payload, url) => {
    const id = surveyId ? surveyId : currentSurveyId;

    const data = {
      data: payload,
      surveyId: id,
    };

    const response = await Axios.post(url, data, {
      headers: {
        'x-api-key': CONFIG.X_API_KEY,
      },
      mode: 'no-cors',
    });
    return response;
  };

  return { add: payload => add(payload, url), surveyId, currentSurveyId };
};

const addToAuditLogs = (consultantId, surveyId, currentSurveyId) => {
  let url = CONFIG.AUDIT_LOG_URL + 'addauditstosurveys';
  if (consultantId) {
    url = CONFIG.AUDIT_LOG_URL + 'addauditstoportfoilosurveysconsultants';
  }
 
  const add = async (data, url) => {
    const id = surveyId ? surveyId : currentSurveyId;
    console.log(url);
    data = {
      data,
      surveyId: id,
      currentSurveyId,
    };
 
    const response = await Axios.post(url, data, {
      headers: {
        'x-api-key': CONFIG.X_API_KEY,
      },
      mode: 'no-cors',
    });
    return response;
  };
 
  return { add: data => add(data, url), consultantId, surveyId, currentSurveyId };
};

/**
 * Adds a new comment to an answered topic.
 * @param {Object} params - an object containing surveyId and consultantId.
 * @param {Object} body - data to be sent in the request body.
 * @returns {Object} - an object containing response, data and status.
 * @throws {Error} - if unable to fetch the workshop.
 */

const addAnsweredTopicComment = async (params, body) => {
  const { surveyId, consultantId } = params;
  let URL = `${localUrl}addAnsweredTopic?surveyId=${surveyId}&consultantId=${consultantId || ""}`;

  try {
    const response = await Axios.post(URL, body, {
      headers: {
        'x-api-key': CONFIG.X_API_KEY,
      },
      mode: 'no-cors',
    });

    return {
      response: response?.data?.data || {},
      data: () => response?.data?.data,
      status: response?.status,
    };
  } catch (error) {
    console.log(error);
    throw new Error('Failed to fetch workshop');
  }
};

const editAnsweredTopicComment = async (params, body) => {
  const { surveyId, consultantId, workshopId } = params;
  console.log("workshopId", workshopId)
  let URL = `${localUrl}updateAnsweredTopic?surveyId=${surveyId}&consultantId=${consultantId || ""}&workshopId=${workshopId || ""}`;
  console.log("URL", URL)
  try {
    const response = await Axios.put(URL, body, {
      headers: {
        'x-api-key': CONFIG.X_API_KEY,
      },
      mode: 'no-cors',
    });

    return {
      response: response?.data?.data || {},
      data: () => response?.data?.data,
      status: response?.status,
    };
  } catch (error) {
    console.log(error);
    throw new Error('Failed to fetch workshop');
  }
};

/**
 * Updates a workshop property based on given endpoint, params and data.
 * @param {Object} params - an object containing surveyId, consultantId, workshopId, type and property.
 * @param {Object} data - data to be sent in the request body.
 * @returns {Object} - an object containing response and a function to get the data.
 * @throws {Error} - if unable to fetch the workshop.
 */
const updateWorkshopProperty = async (params, body) => {
  const { surveyId, consultantId, workshopId, type, property } = params;
  console.log('workshopId', workshopId);
  let URL = `${localUrl}double-materiality/update-workshop-property?surveyId=${surveyId}&consultantId=${consultantId ||
    ''}&workshopId=${workshopId || ''}&type=${type}`;

  if (property) URL += `&property=${property}`;

  console.log('URL', URL);

  try {
    const response = await Axios.post(URL, body, {
      headers: {
        'x-api-key': CONFIG.X_API_KEY,
      },
      mode: 'no-cors',
    });

    return {
      response: response?.data?.data || {},
      data: () => response?.data?.data,
      status: response?.status,
    };
  } catch (error) {
    console.log(error);
    throw new Error('Failed to fetch workshop');
  }
};

/*
 * Updates consultants or survey Model property based on given endpoint, params and data.
 * @param {Object} params - an object containing surveyId, consultantId and property.
 * @param {Object} data - data to be sent in the request body.
 * @returns {Object} - an object containing response and a function to get the data.
 * @throws {Error} - if unable to fetch the workshop.
 */
const updateConsultantsOrSurveyProperty = async (params, body) => {
  const { surveyId, consultantId, property } = params;
  let URL = `${localUrl}double-materiality/updateConsultantsOrSurvey?surveyId=${surveyId}&consultantId=${consultantId ||
    ''}`;

  if (property) URL += `&property=${property}`;

  try {
    const response = await Axios.post(URL, body, {
      headers: {
        'x-api-key': CONFIG.X_API_KEY,
      },
      mode: 'no-cors',
    });

    return {
      response: response?.data?.data || {},
      data: () => response?.data?.data,
      status: response?.status,
    };
  } catch (error) {
    console.log(error);
    throw new Error('Failed to fetch workshop');
  }
}


/**
 * Creates a new document with the action report task audit log details based on the data provided.
 * @param {String} consultantId - consultantId to identify the collection
 * @param {String} surveyId - surveyId to fetch data based on
 * @param {String} currentSurveyId - currentSurveyId to fetch data based on if surveyId is not provided
 * @returns {Object} - an object containing add function and consultantId, surveyId, currentSurveyId
 * @throws {Error} - if unable to created the document.
 */
const addToActionReportTaskAuditLogs = (consultantId, surveyId, currentSurveyId) => {
  let url = CONFIG.AUDIT_LOG_URL + 'setSurveyActionReportLogs';
  if (consultantId) {
    url = CONFIG.AUDIT_LOG_URL + 'setportfolioSurveyActionReportLogs';
  }

  const add = async (data, url) => {
    const id = surveyId ? surveyId : currentSurveyId;
    data = {
      data,
      surveyId: id,
      currentSurveyId
    }

    const response = await Axios.post(url, data, {
      headers: {
        'x-api-key': CONFIG.X_API_KEY,
      },
      mode: 'no-cors',
    });
    return response;
  }

  return { add: (data) => add(data, url), consultantId, surveyId, currentSurveyId };
}

/**
 * Creates a new document with the double materiality audit log details based on the data provided.
 * @param {data} params - contains surveyId, consultantId, field and updated by details
 * @returns {Object} - an object with status
 * @throws {Error} - if unable to created the document.
 */
const addToDoubleMaterialityAuditLog = (consultantId, surveyId) => {
  let url = CONFIG.AUDIT_LOG_URL + 'setDoubleMaterialityAuditLogs';

  const add = async (data, url) => {
    const response = await Axios.post(url, data, {
      headers: {
        'x-api-key': CONFIG.X_API_KEY,
      },
      mode: 'no-cors',
    });
    return response;
  }

  return { add: (data) => add(data, url), consultantId, surveyId };
}

/**
 * Fetches the double materiality audit logs by its surveyId.
 * @param {surveyId} params - contains the surveyId of which the details are to be fetched.
 * @returns {Object} - an object containing audit log details.
 * @throws {Error} - if unable to fetch the details.
 */
const getDoubleMaterialityAuditLogs = async (surveyId) => {
  const response = await Axios.get(`${CONFIG.AUDIT_LOG_URL}getDoubleMaterialityAuditLogs?surveyId=${surveyId}`, {
    headers: {
      'x-api-key': CONFIG.X_API_KEY,
    },
    mode: 'no-cors'
  })
  let value = [];
  if (response?.data?.data?.length && response?.data?.data[0]['survey-results']?.length) {
    value = response?.data?.data[0]['survey-results'].map((v, i) => {
      return {
        data: () => v,
        id: v.id || i
      }
    })
  }

  return value;
}


export {
    parseSnapShortData,
    getsurveyresultsbysurveyId,
    getworkshopsbysurveyId,
    getfinancialworkshopsbysurveyid,
    getsubmittedSurveyResult,
    getSurveyResultForSubcollection,
    addToMethodologyLogs,
    updateSurveyById,
    getbysurveyid,
    createDoubleMaterialitySurvey,
    updateDoubleMaterialitySurvey,
    setWorkshops,
    updateWorkshops,
    setFinancialWorkshops,
    updateFinancialWorkshops,
    getSurveyResultById,
    setSurveyResult,
    updateSurveyResultData,
    addToAuditLogs,
    addToSurveyResults,
};
content_copyCOPY