handleSubmitWorkshop -- Add/edit workshop

PHOTO EMBED

Thu Sep 19 2024 04:47:27 GMT+0000 (Coordinated Universal Time)

Saved by @alfred.roshan

 handleSubmitWorkshop = async e => {
    const { workshops, workshopdata, surveyId, currentSurveyId, consultantId } = this.state;
    // const matrixWorkshopsRef = firebase
    //   .firestore()
    //   .collection(consultantId ? 'portfolio-surveys-consultants' : 'surveys')
    //   .doc(surveyId ? surveyId : currentSurveyId)
    //   .collection('workshops'); // -->

    e.preventDefault();

    this.setState({
      loading: true,
      workshopTabIndex: 0,
    });
    const formatDate = (date) => {
      if (!date) return null;
      const d = date.seconds ? new Date(date.seconds * 1000 + date.nanoseconds / 1000000) : new Date(date);
      const month = ('0' + (d.getMonth() + 1)).slice(-2);
      const day = ('0' + d.getDate()).slice(-2);
      const year = d.getFullYear();
      return `${month}/${day}/${year}`;
    };

    try {
      // Edit condition (check if id present in the current workshop displayed in the UI)
      if (workshopdata.id) {
        // const docRef = matrixWorkshopsRef.doc(workshopdata.id); // -->
        // const docSnapshot = await docRef.get(); // -->
        // const oldData = docSnapshot.data(); // --> 
        // console.log("old data from firebase", oldData);

        const workshopData = await getWorkshopById("workshops", {
          surveyId: surveyId,
          consultantId: consultantId,
          id: workshopdata.id,
        },)

        console.log("workshopdata", workshopData);


        // Get previous data from the workshops collection in DB
        const oldData = workshopData.data();

        const _date = workshopdata['Date of Workshop or Interview'];
        const payload = {
          ...workshopdata,
          answeredEntries: workshopdata?.answeredEntries ? workshopdata?.answeredEntries : [],
          ['Date of Workshop or Interview']:
            _date && _date.seconds
              ? new Date(_date.seconds * 1000 + _date.nanoseconds / 1000000)
              : _date,
        };

        // await matrixWorkshopsRef.doc(workshopdata.id).update(payload) // --> Replace with API call

        console.log("payload", payload);

        const response = await updateWorkshops(consultantId, workshopdata.id, payload);
        console.log("Response after editing workshop", response);

        const changes = [];
        // const oldDateFormatted = formatDate(oldData['Date of Workshop or Interview']);
        // const newDateFormatted = formatDate(workshopdata['Date of Workshop or Interview']);
        const oldDateFormatted = oldData['Date of Workshop or Interview'];
        const newDateFormatted = workshopdata['Date of Workshop or Interview'];

        if (workshopdata['Name of Person'] !== oldData['Name of Person']) {
          changes.push(`Name of Person changed from ${oldData['Name of Person']} to ${workshopdata['Name of Person']}`);
        }
        if (workshopdata['Stakeholder Type'] !== oldData['Stakeholder Type']) {
          changes.push(`Stakeholder Type changed from ${oldData['Stakeholder Type']} to ${workshopdata['Stakeholder Type']}`);
        }
        if (workshopdata['Type'] !== oldData['Type']) {
          changes.push(`Type changed from ${oldData['Type']} to ${workshopdata['Type']}`);
        }


        if (workshopdata['Interviewer Name'] !== oldData['Interviewer Name']) {
          changes.push(`Interviewer Name changed from ${oldData['Interviewer Name']} to ${workshopdata['Interviewer Name']}`);
        }

        if (newDateFormatted !== oldDateFormatted) {
          changes.push(`Date of Workshop or Interview changed from ${oldDateFormatted} to ${newDateFormatted}`);
        }

        if (workshopdata['Comments'] !== oldData['Comments']) {
          const oldcomment = oldData['Comments'] || 'Blank';
          changes.push(`Comments changed from ${oldcomment} to ${workshopdata['Comments']}`);
        }
        if (workshopdata['Recommendations'] !== oldData['Recommendations']) {
          const oldrec = oldData['Recommendations'] || 'Blank';
          changes.push(`Recommendations changed from ${oldrec} to ${workshopdata['Recommendations']}`);
        }

        this.handleAddAuditLog(
          'update',
          this.state.assessmentType,
          'Assessment',
          `${this.state.user.name} Updated worksheet of ${workshopdata['Name of Person']} (${workshopdata.id}) : ${changes} `,
          'worksheet',
        );

        const index = workshops.findIndex(item => item.id == workshopdata.id);

        workshops[index] = payload;
        this.setState({
          loading: false,
          workshopdata: {},
          workshops: [...workshops],
          selectedworkshop: payload,
          showworkshopmodal: false,
        });
        return;

      }

      // Add new workshop functionality
      const payload = {
        ...workshopdata,
        ['Date of Workshop or Interview']:
          workshopdata['Date of Workshop or Interview'] || new Date(),
        companyId: this.state.companyId,
        surveyId: surveyId,
        worksheet: [],
        date: new Date(),
      };

      // const { id } = await matrixWorkshopsRef.add(payload);
      // Submit new workshop to DB

      const response = await setWorkshops(consultantId, payload);

      const answeredTopics = this.sortAnsweredTopics(this.state.answeredTopics || []);
      const payloadfinal = {
        ...payload,
        id: response.data.data.id, // Find out what to enter here instead of id from firebase add call
        // id,
        worksheet:
          payload.worksheet && payload.worksheet.length > 0
            ? payload.worksheet
            : answeredTopics.map(itm => ({ ...itm, 'Scoring Comments': '' })),
      };

      console.log("payloadfinal", payloadfinal);

      this.handleAddAuditLog(
        'add',
        this.state.assessmentType,
        'Assessment',
        `${this.state.user.name} added worksheet for ${payloadfinal['Name of Person']} (${payloadfinal.id})`,
        'worksheet',
      );

      workshops.push(payloadfinal);
      console.log("workshops", workshops);

      this.setState({
        loading: false,
        workshopdata: {},
        workshops: [...workshops],
        showworkshopmodal: false,
        selectedworkshop: payloadfinal,
        workshopViewIndex: 1,
        answeredTopics: answeredTopics.map(itm => ({ ...itm, 'Scoring Comments': '' })),
      });
    } catch (ex) {
      console.log(ex?.message);
      this.setState({
        loading: false,
        workshopdata: {},
        showworkshopmodal: false,
      });
    }
  };
content_copyCOPY