handleSubmitFinancialWorkshop -- FWS add and Edit

PHOTO EMBED

Thu Sep 19 2024 08:40:51 GMT+0000 (Coordinated Universal Time)

Saved by @alfred.roshan

handleSubmitFinancialWorkshop = async e => {
    const {
      financialworkshops,
      financialworkshopdata,
      surveyId,
      currentSurveyId,
      consultantId,
    } = this.state;
    // const matrixFinancialWorkshopsRef = firebase
    //   .firestore()
    //   .collection(consultantId ? 'portfolio-surveys-consultants' : 'surveys')
    //   .doc(surveyId ? surveyId : currentSurveyId)
    //   .collection('financial-workshops');

    e.preventDefault();

    this.setState({
      loading: true,
      financialWorkshopTabIndex: 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 (if id exists)
      if (financialworkshopdata.id) {
        // const docRef = matrixFinancialWorkshopsRef.doc(financialworkshopdata.id);
        // const docSnapshot = await docRef.get();
        // const oldData = docSnapshot.data();

        const workshopData = await getWorkshopById("financial-workshops", {
          surveyId: surveyId,
          consultantId: consultantId,
          id: financialworkshopdata.id,
        });

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

        // await matrixFinancialWorkshopsRef.doc(financialworkshopdata.id).update(payload)
        // )

        await updateFinancialWorkshops(consultantId, financialworkshopdata.id, payload)

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

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


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

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

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

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

        const index = financialworkshops.findIndex(item => item.id == financialworkshopdata.id);

        financialworkshops[index] = payload;
        this.setState({
          loading: false,
          financialworkshopdata: {},
          financialworkshops: [...financialworkshops],
          selectedfinancialworkshop: payload,
          showfinancialworkshopmodal: false,
        });

        return;

      }


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

      // const { id } = await matrixFinancialWorkshopsRef.add(payload);

      const response = await setFinancialWorkshops(consultantId, payload)

      const answeredTopics = this.sortAnsweredTopics(this.state.answeredTopics || []);
      const payloadfinal = {
        ...payload,
        id: response.data.data.id,
        worksheet:
          payload.worksheet && payload.worksheet.length > 0
            ? payload.worksheet
            : answeredTopics.map(itm => ({ ...itm, 'Scoring Comments': '' })),
      };

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

      financialworkshops.push(payloadfinal);

      this.setState({
        loading: false,
        financialworkshopdata: {},
        financialworkshops: [...financialworkshops],
        showfinancialworkshopmodal: false,
        selectedfinancialworkshop: payloadfinal,
        financialWorkshopViewIndex: 1,
        answeredTopics: answeredTopics.map(itm => ({ ...itm, 'Scoring Comments': '' })),
      });
    } catch (ex) {
      console.log(ex.message);
      this.setState({
        loading: false,
        financialworkshopdata: {},
        showfinancialworkshopmodal: false,
      });
    }
  };
content_copyCOPY