diff --git a/sge-frontend/src/views/DataSet/EmissionSource.js b/sge-frontend/src/views/DataSet/EmissionSource.js
index 130c048..07c9632 100644
--- a/sge-frontend/src/views/DataSet/EmissionSource.js
+++ b/sge-frontend/src/views/DataSet/EmissionSource.js
@@ -1,1245 +1,1245 @@
-import React, { useState, useEffect } from "react";
-import { ChevronDown, Edit, MoreVertical, Plus, Trash } from "react-feather";
-import {
- Card,
- CardHeader,
- CardTitle,
- Input,
- Label,
- Row,
- Col,
- Button,
- Modal,
- ModalHeader,
- ModalBody,
- ModalFooter,
- UncontrolledDropdown,
- DropdownToggle,
- DropdownMenu,
- DropdownItem,
-} from "reactstrap";
-import Select from "react-select";
-import DataTable from "react-data-table-component";
-import ReactPaginate from "react-paginate";
-import { useSnackbar } from "notistack";
-import { useDispatch, useSelector } from "react-redux";
-import withReactContent from "sweetalert2-react-content";
-import { default as SweetAlert } from "sweetalert2";
-import { useTranslation } from "react-i18next";
-import {
- getEmissionSourcesWithPaginate,
- addEmissionSource,
- updateEmissionSource,
- updateEmissionSourceOfWaste,
- deleteEmissionSource,
-} from "../../redux/actions/emissionSources/index";
-import {
- getSectors,
- getSectorById,
- getConsuptionUnits,
-} from "../../redux/actions/datas";
-import Factors from "../../components/emission-source/factors";
-import { permissionCheck } from "../../components/permission-check";
-import { customFilterForSelect } from "../../utility/Utils";
-
-const Swal = withReactContent(SweetAlert);
-
-const EmissionSource = () => {
- const { t } = useTranslation();
-
- const initialColumns = [
- {
- name: t("EmissionSources.emissionSourceName"),
- selector: (row) => row.tag,
- sortable: true,
- minWidth: "250px",
- },
- {
- name: t("EmissionSources.subSector"),
- selector: (row) => row.subsector,
- sortable: false,
- minWidth: "250px",
- cell: (row) => {row.subSector?.tag || "-"},
- },
- {
- name: t("EmissionSources.sector"),
- selector: (row) => row.subsector,
- sortable: false,
- minWidth: "250px",
- cell: (row) => {row.subSector?.sector?.tag || "-"},
- },
- {
- name: t("EmissionSources.emissionScopes"),
- selector: (row) => row.emissionScope,
- sortable: false,
- minWidth: "250px",
- cell: (row) => (
-
- {row.emissionScope && row.emissionScope != "null"
- ? "Kapsam-" + row.emissionScope
- : "-"}
-
- ),
- },
- {
- name: t("Actions"),
- allowOverflow: false,
- maxWidth: "100px",
- cell: (row) => {
- return (
-
-
-
-
-
-
- {permissionCheck("emission_source_update") && (
- handleEditEmissionSource(row)}
- >
-
-
- {t("Cruds.edit")}
-
-
- )}
- {permissionCheck("emission_source_delete") && (
- handleDeleteEmissionSource(row)}
- >
-
-
- {t("Cruds.delete")}
-
-
- )}
-
-
-
- );
- },
- },
- ];
-
- useEffect(() => {
- if (
- !(
- permissionCheck("emission_source_delete") ||
- permissionCheck("emission_source_update")
- )
- ) {
- const updatedColumns = initialColumns.filter(
- (column) => column.name !== ("Aksiyonlar" || "Actions")
- );
- setServerSideColumns(updatedColumns);
- }
- }, []);
-
- const dispatch = useDispatch();
- const { enqueueSnackbar } = useSnackbar();
-
- const [currentPage, setCurrentPage] = useState(1);
- const [rowsPerPage, setRowsPerPage] = useState(5);
- const [loading, setLoading] = useState(false);
-
- const [serverSideColumns, setServerSideColumns] = useState(initialColumns);
-
- const emissionSourceStore = useSelector((state) => state.emissionSources);
- const datasStore = useSelector((state) => state.datas);
- const [emissionSources, setEmissionSources] = useState([]);
- const [selectedSector, setSelectedSector] = useState(null);
- const [sectorsOptions, setSectorsOptions] = useState([]);
- const [subSectorsOptions, setSubSectorsOptions] = useState([]);
- const [showAddEmissionSourceModal, setShowAddEmissionSourceModal] =
- useState(false);
- const [editingEmissionSourceData, setEditingEmissionSourceData] = useState(
- {}
- );
- const [searchValue, setSearchValue] = useState("");
- const [selectedSectorFilter, setSelectedSectorFilter] = useState("");
- const [showDeletedEmissionSource, setShowDeletedEmissionSource] =
- useState(false);
-
- useEffect(() => {
- dispatch(
- getEmissionSourcesWithPaginate({
- currentPage,
- rowsPerPage,
- selectedSectorFilter,
- showDeletedEmissionSource,
- })
- );
- }, [
- currentPage,
- rowsPerPage,
- selectedSectorFilter,
- showDeletedEmissionSource,
- ]);
-
- useEffect(() => {
- dispatch(getSectors());
- dispatch(getConsuptionUnits({ sector: "Atık" }));
- }, []);
-
- useEffect(() => {
- if (selectedSector != null) dispatch(getSectorById(selectedSector));
- }, [selectedSector]);
-
- useEffect(() => {
- if (emissionSourceStore?.emissionSourcesWithPaginate?.content) {
- setEmissionSources(
- emissionSourceStore?.emissionSourcesWithPaginate?.content
- );
- }
- }, [emissionSourceStore.emissionSourcesWithPaginate?.content]);
-
- useEffect(() => {
- setSectorsOptions(
- datasStore?.sectors.map((sector) => {
- return {
- value: sector?.id,
- label: sector?.tag,
- };
- })
- );
- }, [datasStore?.sectors]);
-
- useEffect(() => {
- setSubSectorsOptions(
- datasStore?.sector?.subSectors?.map((subSector) => {
- return {
- value: subSector?.id,
- label: subSector?.tag,
- };
- })
- );
- }, [datasStore?.sector]);
-
- const handleFilter = (e) => {
- setSearchValue(e.target.value);
-
- if (e.target.value !== "") {
- setEmissionSources(
- emissionSourceStore.emissionSourcesWithPaginate?.content?.filter(
- (source) =>
- source.tag
- .toUpperCase()
- .normalize("NFD")
- .replace(/[\u0300-\u036f]/g, "")
- .includes(
- e.target.value
- .toUpperCase()
- .normalize("NFD")
- .replace(/[\u0300-\u036f]/g, "")
- )
- )
- );
- } else {
- setEmissionSources(
- emissionSourceStore.emissionSourcesWithPaginate?.content
- );
- }
- };
-
- const handlePagination = (page) => {
- setCurrentPage(page.selected + 1);
- setEmissionSources(emissionSources.emissionSourcesWithPaginate?.content);
- };
-
- const handlePerPage = (e) => {
- setCurrentPage(1);
- setRowsPerPage(parseInt(e.target.value));
- setEmissionSources(emissionSources.emissionSourcesWithPaginate?.content);
- };
-
- const CustomPagination = () => {
- const count = Number(
- (
- emissionSourceStore?.emissionSourcesWithPaginate?.pageInfo
- ?.totalElements / rowsPerPage
- ).toFixed(1)
- );
-
- return (
- handlePagination(page)}
- pageClassName={"page-item"}
- nextLinkClassName={"page-link"}
- nextClassName={"page-item next"}
- previousClassName={"page-item prev"}
- previousLinkClassName={"page-link"}
- pageLinkClassName={"page-link"}
- breakClassName="page-item"
- breakLinkClassName="page-link"
- containerClassName={
- "pagination react-paginate separated-pagination pagination-sm justify-content-end pr-1 mt-1"
- }
- />
- );
- };
-
- const onAddEmissionSourceButtonPressed = () => {
- setEditingEmissionSourceData({
- emissionSourceConvertUnits: datasStore?.consuptionUnits?.map(
- (consuptionUnit) => {
- return {
- unit: {
- id: consuptionUnit.id,
- tag: consuptionUnit.tag,
- },
- value: "",
- };
- }
- ),
- });
- setShowAddEmissionSourceModal(true);
- };
-
- function convertToDesiredFormatAndStringify(arr) {
- const cleanedArray = arr
- .filter((item) => item.unit.tag !== "TJ")
- .filter((item) => item.value !== "")
- .map((item) => ({
- unitId: item.unit?.id || "",
- convertValue: item.value || "",
- }));
-
- return JSON.stringify(cleanedArray).replace(/"([^"]+)":/g, "$1:");
- }
-
- const onAddEmissionSourceModalButtonPressed = () => {
- setLoading(true);
-
- if (!editingEmissionSourceData.id) {
- const newEmissionSourceData = {
- tag: editingEmissionSourceData?.tag,
- description: editingEmissionSourceData?.description || "-",
- emissionScope: editingEmissionSourceData?.emissionScope?.value,
- subSector: editingEmissionSourceData?.subSector?.value,
- co2: editingEmissionSourceData?.co2 || 0,
- ch4: editingEmissionSourceData?.ch4 || 0,
- n2o: editingEmissionSourceData?.n2o || 0,
- emissionSourceConvertUnits: convertToDesiredFormatAndStringify(
- editingEmissionSourceData.emissionSourceConvertUnits
- ),
- };
-
- dispatch(addEmissionSource(newEmissionSourceData))
- .then(() => {
- setLoading(false);
- setSelectedSector(null);
- setShowAddEmissionSourceModal(false);
- enqueueSnackbar(t("Warnings.addedSuccessfully"), {
- variant: "success",
- preventDuplicate: true,
- });
- })
- .catch(() => {
- setLoading(false);
- setShowAddEmissionSourceModal(false);
- enqueueSnackbar(t("Warnings.addedFail"), {
- variant: "error",
- preventDuplicate: true,
- });
- });
- } else {
- const updateEmissionSourceData = {
- id: editingEmissionSourceData.id,
- tag: editingEmissionSourceData?.tag,
- description: editingEmissionSourceData?.description || "-",
- emissionScope: editingEmissionSourceData?.emissionScope?.value,
- subSector: editingEmissionSourceData?.subSector?.value,
- co2: editingEmissionSourceData?.co2 || 0,
- ch4: editingEmissionSourceData?.ch4 || 0,
- n2o: editingEmissionSourceData?.n2o || 0,
- emissionSourceConvertUnits: convertToDesiredFormatAndStringify(
- editingEmissionSourceData.emissionSourceConvertUnits
- ),
- ...editingEmissionSourceData.wasteEmissionSourceSupplement,
- };
- dispatch(
- editingEmissionSourceData?.sector?.label != "Atık"
- ? updateEmissionSource(updateEmissionSourceData)
- : updateEmissionSourceOfWaste(updateEmissionSourceData)
- )
- .then(() => {
- enqueueSnackbar(t("Warnings.updatedSuccessfully"), {
- variant: "success",
- });
- setLoading(false);
- setSelectedSector(null);
- setEditingEmissionSourceData(null);
- setShowAddEmissionSourceModal(false);
- })
- .catch(() => {
- enqueueSnackbar(
- `${updateEmissionSourceData.tag}, ${t("Warnings.updatedFail")}`,
- {
- variant: "error",
- }
- );
- setLoading(false);
- });
- }
- };
-
- const renderEmissionSourceModal = () => {
- //Atık için Modal
- if (editingEmissionSourceData?.sector?.label === "Atık") {
- return (
-
- setShowAddEmissionSourceModal(!showAddEmissionSourceModal)
- }
- className="modal-dialog-centered"
- >
-
- setShowAddEmissionSourceModal(!showAddEmissionSourceModal)
- }
- >
- {editingEmissionSourceData?.id
- ? editingEmissionSourceData.tag
- : t("EmissionSources.addEmissionSource")}
-
-
-
-
-
- setEditingEmissionSourceData({
- ...editingEmissionSourceData,
- tag: e.target.value,
- })
- }
- />
-
-
-
-
-
-
-
-
-
-
-
- {editingEmissionSourceData?.subSector?.label !=
- "Yakma ve Açık Yanma" ? (
-
-
-
- {editingEmissionSourceData?.subSector?.label !=
- "Atık Su Arıtma ve Deşarjı" ? (
-
- ) : (
-
- )}
-
-
-
-
- {
- const inputValue = e.target.value;
- if (
- /^\d*\.?\d*$/.test(inputValue) ||
- inputValue === ""
- ) {
- setEditingEmissionSourceData({
- ...editingEmissionSourceData,
- wasteEmissionSourceSupplement: {
- ...editingEmissionSourceData.wasteEmissionSourceSupplement,
- dryWeightCH4: inputValue,
- },
- });
- }
- }}
- />
-
- {editingEmissionSourceData?.subSector?.label !=
- "Atık Su Arıtma ve Deşarjı" && (
-
-
- {
- const inputValue = e.target.value;
- if (
- /^\d*\.?\d*$/.test(inputValue) ||
- inputValue === ""
- ) {
- setEditingEmissionSourceData({
- ...editingEmissionSourceData,
- wasteEmissionSourceSupplement: {
- ...editingEmissionSourceData.wasteEmissionSourceSupplement,
- wetWeightCH4: inputValue,
- },
- });
- }
- }}
- />
-
- )}
-
-
-
-
- {editingEmissionSourceData?.subSector?.label !=
- "Atık Su Arıtma ve Deşarjı" ? (
-
- ) : (
-
- )}
-
-
-
-
- {
- const inputValue = e.target.value;
- if (
- /^\d*\.?\d*$/.test(inputValue) ||
- inputValue === ""
- ) {
- setEditingEmissionSourceData({
- ...editingEmissionSourceData,
- wasteEmissionSourceSupplement: {
- ...editingEmissionSourceData.wasteEmissionSourceSupplement,
- dryWeightN2O: inputValue,
- },
- });
- }
- }}
- />
-
- {editingEmissionSourceData?.subSector?.label !=
- "Atık Su Arıtma ve Deşarjı" && (
-
-
- {
- const inputValue = e.target.value;
- if (
- /^\d*\.?\d*$/.test(inputValue) ||
- inputValue === ""
- ) {
- setEditingEmissionSourceData({
- ...editingEmissionSourceData,
- wasteEmissionSourceSupplement: {
- ...editingEmissionSourceData.wasteEmissionSourceSupplement,
- wetWeightN2O: inputValue,
- },
- });
- }
- }}
- />
-
- )}
-
-
-
- ) : (
-
-
-
-
-
-
- {
- const inputValue = e.target.value;
- if (
- /^\d*\.?\d*$/.test(inputValue) ||
- inputValue === ""
- ) {
- setEditingEmissionSourceData({
- ...editingEmissionSourceData,
- wasteEmissionSourceSupplement: {
- ...editingEmissionSourceData.wasteEmissionSourceSupplement,
- dryWeightCH4:
- editingEmissionSourceData
- ?.wasteEmissionSourceSupplement
- .dryWeightCH4 != 0 && inputValue,
- dampWeightCH4:
- editingEmissionSourceData
- ?.wasteEmissionSourceSupplement
- .dampWeightCH4 != 0 && inputValue,
- },
- });
- }
- }}
- />
-
-
-
- {
- const inputValue = e.target.value;
- if (
- /^\d*\.?\d*$/.test(inputValue) ||
- inputValue === ""
- ) {
- setEditingEmissionSourceData({
- ...editingEmissionSourceData,
- wasteEmissionSourceSupplement: {
- ...editingEmissionSourceData.wasteEmissionSourceSupplement,
- wetWeightN2O: inputValue,
- },
- });
- }
- }}
- />
-
-
-
-
-
-
-
-
- {
- const inputValue = e.target.value;
- if (
- /^\d*\.?\d*$/.test(inputValue) ||
- inputValue === ""
- ) {
- setEditingEmissionSourceData({
- ...editingEmissionSourceData,
- wasteEmissionSourceSupplement: {
- ...editingEmissionSourceData.wasteEmissionSourceSupplement,
- wetWeightCH4: inputValue,
- },
- });
- }
- }}
- />
-
-
-
- {
- const inputValue = e.target.value;
- if (
- /^\d*\.?\d*$/.test(inputValue) ||
- inputValue === ""
- ) {
- setEditingEmissionSourceData({
- ...editingEmissionSourceData,
- wasteEmissionSourceSupplement: {
- ...editingEmissionSourceData.wasteEmissionSourceSupplement,
- dryWeightN2O: inputValue,
- },
- });
- }
- }}
- />
-
-
-
-
- )}
-
-
-
-
-
-
- );
- }
-
- //Atık hariç diğer sektörler için Modal
- const convertedUnits = handleConvertUnits(
- editingEmissionSourceData?.emissionSourceConvertUnits
- );
-
- return (
-
- setShowAddEmissionSourceModal(!showAddEmissionSourceModal)
- }
- className="modal-dialog-centered"
- >
-
- setShowAddEmissionSourceModal(!showAddEmissionSourceModal)
- }
- >
- {editingEmissionSourceData?.id
- ? editingEmissionSourceData.tag
- : t("EmissionSources.addEmissionSource")}
-
-
-
-
-
- setEditingEmissionSourceData({
- ...editingEmissionSourceData,
- tag: e.target.value,
- })
- }
- />
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {convertedUnits?.map((item, index) => {
- return (
-
- {
- return null;
- }}
- />
- {
- const inputValue = e.target.value;
- if (/^\d*\.?\d*$/.test(inputValue) || inputValue === "") {
- const updatedConvertUnits = [...convertedUnits];
- updatedConvertUnits[index] = {
- ...item,
- value: inputValue,
- };
- setEditingEmissionSourceData({
- ...editingEmissionSourceData,
- emissionSourceConvertUnits: updatedConvertUnits,
- });
- }
- }}
- />
-
- );
- })}
-
-
- {/* */}
-
-
-
-
-
- );
- };
-
- const handleConvertUnits = (emissionSourceConvertUnits) => {
- const existingUnitIds =
- emissionSourceConvertUnits?.map((item) => item.unit.id) || [];
- const missingUnits = datasStore.consuptionUnits.filter(
- (unit) => !existingUnitIds.includes(unit.id)
- );
- const convertUnitsOfSelectedSource = [
- ...(emissionSourceConvertUnits || []),
- ...missingUnits.map((unit) => ({
- unit: { id: unit.id, tag: unit.tag },
- value: "", // You can set the default value for missing units here
- })),
- ];
- return convertUnitsOfSelectedSource;
- };
-
- const handleEditEmissionSource = (selectedSource) => {
- const sectorOfSelectedSource = {
- value: selectedSource?.subSector?.sector?.id,
- label: selectedSource?.subSector?.sector?.tag,
- };
- const subSectorOfSelectedSource = {
- value: selectedSource?.subSector?.id,
- label: selectedSource?.subSector?.tag,
- };
- const emissionScopeOfSelectedSource = {
- value: selectedSource?.emissionScope,
- label: selectedSource?.emissionScope
- ? "Kapsam-" + selectedSource?.emissionScope
- : "",
- };
- const convertUnitsOfSelectedSource =
- selectedSource?.emissionSourceConvertUnits?.map((item) => ({
- ...item,
- value: item.value.toString(),
- }));
-
- const wasteEmissionSourceSupplementOfSelectedSource = {
- dryWeightCH4:
- selectedSource?.wasteEmissionSourceSupplement?.dryWeightCH4 || 0,
- wetWeightCH4:
- selectedSource?.wasteEmissionSourceSupplement?.wetWeightCH4 || 0,
- dryWeightN2O:
- selectedSource?.wasteEmissionSourceSupplement?.dryWeightN2O || 0,
- wetWeightN2O:
- selectedSource?.wasteEmissionSourceSupplement?.wetWeightN2O || 0,
- dampWeightCH4:
- selectedSource?.wasteEmissionSourceSupplement?.dampWeightCH4 || 0,
- };
- setSelectedSector(selectedSource?.subSector?.sector?.id);
- setShowAddEmissionSourceModal(true);
- setEditingEmissionSourceData({
- id: selectedSource.id,
- tag: selectedSource?.tag,
- description: selectedSource?.description || "-",
- subSector: selectedSource?.subSector,
- co2: selectedSource?.co2,
- ch4: selectedSource?.ch4,
- n2o: selectedSource?.n2o,
- sector: sectorOfSelectedSource,
- subSector: subSectorOfSelectedSource,
- emissionScope: emissionScopeOfSelectedSource,
- emissionSourceConvertUnits: convertUnitsOfSelectedSource,
- wasteEmissionSourceSupplement:
- wasteEmissionSourceSupplementOfSelectedSource,
- });
- };
-
- const handleDeleteEmissionSource = async (selectedSource) => {
- const result = await Swal.fire({
- title: `${selectedSource.tag}, ${t("Warnings.sureForDelete")}`,
- text: t("Warnings.notUndone"),
- icon: "warning",
- showCancelButton: true,
- confirmButtonText: t("Cruds.delete"),
- cancelButtonText: t("Cruds.cancel"),
- customClass: {
- confirmButton: "btn btn-primary",
- cancelButton: "btn btn-danger ml-1",
- },
- buttonsStyling: false,
- });
- if (result.value !== null && result.value === true) {
- dispatch(deleteEmissionSource(selectedSource.id));
- }
- };
-
- return (
-
- );
-};
-
-export default EmissionSource;
+import React, { useState, useEffect } from "react";
+import { ChevronDown, Edit, MoreVertical, Plus, Trash } from "react-feather";
+import {
+ Card,
+ CardHeader,
+ CardTitle,
+ Input,
+ Label,
+ Row,
+ Col,
+ Button,
+ Modal,
+ ModalHeader,
+ ModalBody,
+ ModalFooter,
+ UncontrolledDropdown,
+ DropdownToggle,
+ DropdownMenu,
+ DropdownItem,
+} from "reactstrap";
+import Select from "react-select";
+import DataTable from "react-data-table-component";
+import ReactPaginate from "react-paginate";
+import { useSnackbar } from "notistack";
+import { useDispatch, useSelector } from "react-redux";
+import withReactContent from "sweetalert2-react-content";
+import { default as SweetAlert } from "sweetalert2";
+import { useTranslation } from "react-i18next";
+import {
+ getEmissionSourcesWithPaginate,
+ addEmissionSource,
+ updateEmissionSource,
+ updateEmissionSourceOfWaste,
+ deleteEmissionSource,
+} from "../../redux/actions/emissionSources/index";
+import {
+ getSectors,
+ getSectorById,
+ getConsuptionUnits,
+} from "../../redux/actions/datas";
+import Factors from "../../components/emission-source/factors";
+import { permissionCheck } from "../../components/permission-check";
+import { customFilterForSelect } from "../../utility/Utils";
+
+const Swal = withReactContent(SweetAlert);
+
+const EmissionSource = () => {
+ const { t } = useTranslation();
+
+ const initialColumns = [
+ {
+ name: t("EmissionSources.emissionSourceName"),
+ selector: (row) => row.tag,
+ sortable: true,
+ minWidth: "250px",
+ },
+ {
+ name: t("EmissionSources.subSector"),
+ selector: (row) => row.subsector,
+ sortable: false,
+ minWidth: "250px",
+ cell: (row) => {row.subSector?.tag || "-"},
+ },
+ {
+ name: t("EmissionSources.sector"),
+ selector: (row) => row.subsector,
+ sortable: false,
+ minWidth: "250px",
+ cell: (row) => {row.subSector?.sector?.tag || "-"},
+ },
+ {
+ name: t("EmissionSources.emissionScopes"),
+ selector: (row) => row.emissionScope,
+ sortable: false,
+ minWidth: "250px",
+ cell: (row) => (
+
+ {row.emissionScope && row.emissionScope != "null"
+ ? "Kapsam-" + row.emissionScope
+ : "-"}
+
+ ),
+ },
+ {
+ name: t("Actions"),
+ allowOverflow: false,
+ maxWidth: "100px",
+ cell: (row) => {
+ return (
+
+
+
+
+
+
+ {permissionCheck("emission_source_update") && (
+ handleEditEmissionSource(row)}
+ >
+
+
+ {t("Cruds.edit")}
+
+
+ )}
+ {permissionCheck("emission_source_delete") && (
+ handleDeleteEmissionSource(row)}
+ >
+
+
+ {t("Cruds.delete")}
+
+
+ )}
+
+
+
+ );
+ },
+ },
+ ];
+
+ useEffect(() => {
+ if (
+ !(
+ permissionCheck("emission_source_delete") ||
+ permissionCheck("emission_source_update")
+ )
+ ) {
+ const updatedColumns = initialColumns.filter(
+ (column) => column.name !== ("Aksiyonlar" || "Actions")
+ );
+ setServerSideColumns(updatedColumns);
+ }
+ }, []);
+
+ const dispatch = useDispatch();
+ const { enqueueSnackbar } = useSnackbar();
+
+ const [currentPage, setCurrentPage] = useState(1);
+ const [rowsPerPage, setRowsPerPage] = useState(5);
+ const [loading, setLoading] = useState(false);
+
+ const [serverSideColumns, setServerSideColumns] = useState(initialColumns);
+
+ const emissionSourceStore = useSelector((state) => state.emissionSources);
+ const datasStore = useSelector((state) => state.datas);
+ const [emissionSources, setEmissionSources] = useState([]);
+ const [selectedSector, setSelectedSector] = useState(null);
+ const [sectorsOptions, setSectorsOptions] = useState([]);
+ const [subSectorsOptions, setSubSectorsOptions] = useState([]);
+ const [showAddEmissionSourceModal, setShowAddEmissionSourceModal] =
+ useState(false);
+ const [editingEmissionSourceData, setEditingEmissionSourceData] = useState(
+ {}
+ );
+ const [searchValue, setSearchValue] = useState("");
+ const [selectedSectorFilter, setSelectedSectorFilter] = useState("");
+ const [showDeletedEmissionSource, setShowDeletedEmissionSource] =
+ useState(false);
+
+ useEffect(() => {
+ dispatch(
+ getEmissionSourcesWithPaginate({
+ currentPage,
+ rowsPerPage,
+ selectedSectorFilter,
+ showDeletedEmissionSource,
+ })
+ );
+ }, [
+ currentPage,
+ rowsPerPage,
+ selectedSectorFilter,
+ showDeletedEmissionSource,
+ ]);
+
+ useEffect(() => {
+ dispatch(getSectors());
+ dispatch(getConsuptionUnits({ sector: "Atık" }));
+ }, []);
+
+ useEffect(() => {
+ if (selectedSector != null) dispatch(getSectorById(selectedSector));
+ }, [selectedSector]);
+
+ useEffect(() => {
+ if (emissionSourceStore?.emissionSourcesWithPaginate?.content) {
+ setEmissionSources(
+ emissionSourceStore?.emissionSourcesWithPaginate?.content
+ );
+ }
+ }, [emissionSourceStore.emissionSourcesWithPaginate?.content]);
+
+ useEffect(() => {
+ setSectorsOptions(
+ datasStore?.sectors.map((sector) => {
+ return {
+ value: sector?.id,
+ label: sector?.tag,
+ };
+ })
+ );
+ }, [datasStore?.sectors]);
+
+ useEffect(() => {
+ setSubSectorsOptions(
+ datasStore?.sector?.subSectors?.map((subSector) => {
+ return {
+ value: subSector?.id,
+ label: subSector?.tag,
+ };
+ })
+ );
+ }, [datasStore?.sector]);
+
+ const handleFilter = (e) => {
+ setSearchValue(e.target.value);
+
+ if (e.target.value !== "") {
+ setEmissionSources(
+ emissionSourceStore.emissionSourcesWithPaginate?.content?.filter(
+ (source) =>
+ source.tag
+ .toUpperCase()
+ .normalize("NFD")
+ .replace(/[\u0300-\u036f]/g, "")
+ .includes(
+ e.target.value
+ .toUpperCase()
+ .normalize("NFD")
+ .replace(/[\u0300-\u036f]/g, "")
+ )
+ )
+ );
+ } else {
+ setEmissionSources(
+ emissionSourceStore.emissionSourcesWithPaginate?.content
+ );
+ }
+ };
+
+ const handlePagination = (page) => {
+ setCurrentPage(page.selected + 1);
+ setEmissionSources(emissionSources.emissionSourcesWithPaginate?.content);
+ };
+
+ const handlePerPage = (e) => {
+ setCurrentPage(1);
+ setRowsPerPage(parseInt(e.target.value));
+ setEmissionSources(emissionSources.emissionSourcesWithPaginate?.content);
+ };
+
+ const CustomPagination = () => {
+ const count = Number(
+ (
+ emissionSourceStore?.emissionSourcesWithPaginate?.pageInfo
+ ?.totalElements / rowsPerPage
+ ).toFixed(1)
+ );
+//asdaasdasd
+ return (
+ handlePagination(page)}
+ pageClassName={"page-item"}
+ nextLinkClassName={"page-link"}
+ nextClassName={"page-item next"}
+ previousClassName={"page-item prev"}
+ previousLinkClassName={"page-link"}
+ pageLinkClassName={"page-link"}
+ breakClassName="page-item"
+ breakLinkClassName="page-link"
+ containerClassName={
+ "pagination react-paginate separated-pagination pagination-sm justify-content-end pr-1 mt-1"
+ }
+ />
+ );
+ };
+
+ const onAddEmissionSourceButtonPressed = () => {
+ setEditingEmissionSourceData({
+ emissionSourceConvertUnits: datasStore?.consuptionUnits?.map(
+ (consuptionUnit) => {
+ return {
+ unit: {
+ id: consuptionUnit.id,
+ tag: consuptionUnit.tag,
+ },
+ value: "",
+ };
+ }
+ ),
+ });
+ setShowAddEmissionSourceModal(true);
+ };
+
+ function convertToDesiredFormatAndStringify(arr) {
+ const cleanedArray = arr
+ .filter((item) => item.unit.tag !== "TJ")
+ .filter((item) => item.value !== "")
+ .map((item) => ({
+ unitId: item.unit?.id || "",
+ convertValue: item.value || "",
+ }));
+
+ return JSON.stringify(cleanedArray).replace(/"([^"]+)":/g, "$1:");
+ }
+
+ const onAddEmissionSourceModalButtonPressed = () => {
+ setLoading(true);
+
+ if (!editingEmissionSourceData.id) {
+ const newEmissionSourceData = {
+ tag: editingEmissionSourceData?.tag,
+ description: editingEmissionSourceData?.description || "-",
+ emissionScope: editingEmissionSourceData?.emissionScope?.value,
+ subSector: editingEmissionSourceData?.subSector?.value,
+ co2: editingEmissionSourceData?.co2 || 0,
+ ch4: editingEmissionSourceData?.ch4 || 0,
+ n2o: editingEmissionSourceData?.n2o || 0,
+ emissionSourceConvertUnits: convertToDesiredFormatAndStringify(
+ editingEmissionSourceData.emissionSourceConvertUnits
+ ),
+ };
+
+ dispatch(addEmissionSource(newEmissionSourceData))
+ .then(() => {
+ setLoading(false);
+ setSelectedSector(null);
+ setShowAddEmissionSourceModal(false);
+ enqueueSnackbar(t("Warnings.addedSuccessfully"), {
+ variant: "success",
+ preventDuplicate: true,
+ });
+ })
+ .catch(() => {
+ setLoading(false);
+ setShowAddEmissionSourceModal(false);
+ enqueueSnackbar(t("Warnings.addedFail"), {
+ variant: "error",
+ preventDuplicate: true,
+ });
+ });
+ } else {
+ const updateEmissionSourceData = {
+ id: editingEmissionSourceData.id,
+ tag: editingEmissionSourceData?.tag,
+ description: editingEmissionSourceData?.description || "-",
+ emissionScope: editingEmissionSourceData?.emissionScope?.value,
+ subSector: editingEmissionSourceData?.subSector?.value,
+ co2: editingEmissionSourceData?.co2 || 0,
+ ch4: editingEmissionSourceData?.ch4 || 0,
+ n2o: editingEmissionSourceData?.n2o || 0,
+ emissionSourceConvertUnits: convertToDesiredFormatAndStringify(
+ editingEmissionSourceData.emissionSourceConvertUnits
+ ),
+ ...editingEmissionSourceData.wasteEmissionSourceSupplement,
+ };
+ dispatch(
+ editingEmissionSourceData?.sector?.label != "Atık"
+ ? updateEmissionSource(updateEmissionSourceData)
+ : updateEmissionSourceOfWaste(updateEmissionSourceData)
+ )
+ .then(() => {
+ enqueueSnackbar(t("Warnings.updatedSuccessfully"), {
+ variant: "success",
+ });
+ setLoading(false);
+ setSelectedSector(null);
+ setEditingEmissionSourceData(null);
+ setShowAddEmissionSourceModal(false);
+ })
+ .catch(() => {
+ enqueueSnackbar(
+ `${updateEmissionSourceData.tag}, ${t("Warnings.updatedFail")}`,
+ {
+ variant: "error",
+ }
+ );
+ setLoading(false);
+ });
+ }
+ };
+
+ const renderEmissionSourceModal = () => {
+ //Atık için Modal
+ if (editingEmissionSourceData?.sector?.label === "Atık") {
+ return (
+
+ setShowAddEmissionSourceModal(!showAddEmissionSourceModal)
+ }
+ className="modal-dialog-centered"
+ >
+
+ setShowAddEmissionSourceModal(!showAddEmissionSourceModal)
+ }
+ >
+ {editingEmissionSourceData?.id
+ ? editingEmissionSourceData.tag
+ : t("EmissionSources.addEmissionSource")}
+
+
+
+
+
+ setEditingEmissionSourceData({
+ ...editingEmissionSourceData,
+ tag: e.target.value,
+ })
+ }
+ />
+
+
+
+
+
+
+
+
+
+
+
+ {editingEmissionSourceData?.subSector?.label !=
+ "Yakma ve Açık Yanma" ? (
+
+
+
+ {editingEmissionSourceData?.subSector?.label !=
+ "Atık Su Arıtma ve Deşarjı" ? (
+
+ ) : (
+
+ )}
+
+
+
+
+ {
+ const inputValue = e.target.value;
+ if (
+ /^\d*\.?\d*$/.test(inputValue) ||
+ inputValue === ""
+ ) {
+ setEditingEmissionSourceData({
+ ...editingEmissionSourceData,
+ wasteEmissionSourceSupplement: {
+ ...editingEmissionSourceData.wasteEmissionSourceSupplement,
+ dryWeightCH4: inputValue,
+ },
+ });
+ }
+ }}
+ />
+
+ {editingEmissionSourceData?.subSector?.label !=
+ "Atık Su Arıtma ve Deşarjı" && (
+
+
+ {
+ const inputValue = e.target.value;
+ if (
+ /^\d*\.?\d*$/.test(inputValue) ||
+ inputValue === ""
+ ) {
+ setEditingEmissionSourceData({
+ ...editingEmissionSourceData,
+ wasteEmissionSourceSupplement: {
+ ...editingEmissionSourceData.wasteEmissionSourceSupplement,
+ wetWeightCH4: inputValue,
+ },
+ });
+ }
+ }}
+ />
+
+ )}
+
+
+
+
+ {editingEmissionSourceData?.subSector?.label !=
+ "Atık Su Arıtma ve Deşarjı" ? (
+
+ ) : (
+
+ )}
+
+
+
+
+ {
+ const inputValue = e.target.value;
+ if (
+ /^\d*\.?\d*$/.test(inputValue) ||
+ inputValue === ""
+ ) {
+ setEditingEmissionSourceData({
+ ...editingEmissionSourceData,
+ wasteEmissionSourceSupplement: {
+ ...editingEmissionSourceData.wasteEmissionSourceSupplement,
+ dryWeightN2O: inputValue,
+ },
+ });
+ }
+ }}
+ />
+
+ {editingEmissionSourceData?.subSector?.label !=
+ "Atık Su Arıtma ve Deşarjı" && (
+
+
+ {
+ const inputValue = e.target.value;
+ if (
+ /^\d*\.?\d*$/.test(inputValue) ||
+ inputValue === ""
+ ) {
+ setEditingEmissionSourceData({
+ ...editingEmissionSourceData,
+ wasteEmissionSourceSupplement: {
+ ...editingEmissionSourceData.wasteEmissionSourceSupplement,
+ wetWeightN2O: inputValue,
+ },
+ });
+ }
+ }}
+ />
+
+ )}
+
+
+
+ ) : (
+
+
+
+
+
+
+ {
+ const inputValue = e.target.value;
+ if (
+ /^\d*\.?\d*$/.test(inputValue) ||
+ inputValue === ""
+ ) {
+ setEditingEmissionSourceData({
+ ...editingEmissionSourceData,
+ wasteEmissionSourceSupplement: {
+ ...editingEmissionSourceData.wasteEmissionSourceSupplement,
+ dryWeightCH4:
+ editingEmissionSourceData
+ ?.wasteEmissionSourceSupplement
+ .dryWeightCH4 != 0 && inputValue,
+ dampWeightCH4:
+ editingEmissionSourceData
+ ?.wasteEmissionSourceSupplement
+ .dampWeightCH4 != 0 && inputValue,
+ },
+ });
+ }
+ }}
+ />
+
+
+
+ {
+ const inputValue = e.target.value;
+ if (
+ /^\d*\.?\d*$/.test(inputValue) ||
+ inputValue === ""
+ ) {
+ setEditingEmissionSourceData({
+ ...editingEmissionSourceData,
+ wasteEmissionSourceSupplement: {
+ ...editingEmissionSourceData.wasteEmissionSourceSupplement,
+ wetWeightN2O: inputValue,
+ },
+ });
+ }
+ }}
+ />
+
+
+
+
+
+
+
+
+ {
+ const inputValue = e.target.value;
+ if (
+ /^\d*\.?\d*$/.test(inputValue) ||
+ inputValue === ""
+ ) {
+ setEditingEmissionSourceData({
+ ...editingEmissionSourceData,
+ wasteEmissionSourceSupplement: {
+ ...editingEmissionSourceData.wasteEmissionSourceSupplement,
+ wetWeightCH4: inputValue,
+ },
+ });
+ }
+ }}
+ />
+
+
+
+ {
+ const inputValue = e.target.value;
+ if (
+ /^\d*\.?\d*$/.test(inputValue) ||
+ inputValue === ""
+ ) {
+ setEditingEmissionSourceData({
+ ...editingEmissionSourceData,
+ wasteEmissionSourceSupplement: {
+ ...editingEmissionSourceData.wasteEmissionSourceSupplement,
+ dryWeightN2O: inputValue,
+ },
+ });
+ }
+ }}
+ />
+
+
+
+
+ )}
+
+
+
+
+
+
+ );
+ }
+
+ //Atık hariç diğer sektörler için Modal
+ const convertedUnits = handleConvertUnits(
+ editingEmissionSourceData?.emissionSourceConvertUnits
+ );
+
+ return (
+
+ setShowAddEmissionSourceModal(!showAddEmissionSourceModal)
+ }
+ className="modal-dialog-centered"
+ >
+
+ setShowAddEmissionSourceModal(!showAddEmissionSourceModal)
+ }
+ >
+ {editingEmissionSourceData?.id
+ ? editingEmissionSourceData.tag
+ : t("EmissionSources.addEmissionSource")}
+
+
+
+
+
+ setEditingEmissionSourceData({
+ ...editingEmissionSourceData,
+ tag: e.target.value,
+ })
+ }
+ />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {convertedUnits?.map((item, index) => {
+ return (
+
+ {
+ return null;
+ }}
+ />
+ {
+ const inputValue = e.target.value;
+ if (/^\d*\.?\d*$/.test(inputValue) || inputValue === "") {
+ const updatedConvertUnits = [...convertedUnits];
+ updatedConvertUnits[index] = {
+ ...item,
+ value: inputValue,
+ };
+ setEditingEmissionSourceData({
+ ...editingEmissionSourceData,
+ emissionSourceConvertUnits: updatedConvertUnits,
+ });
+ }
+ }}
+ />
+
+ );
+ })}
+
+
+ {/* */}
+
+
+
+
+
+ );
+ };
+
+ const handleConvertUnits = (emissionSourceConvertUnits) => {
+ const existingUnitIds =
+ emissionSourceConvertUnits?.map((item) => item.unit.id) || [];
+ const missingUnits = datasStore.consuptionUnits.filter(
+ (unit) => !existingUnitIds.includes(unit.id)
+ );
+ const convertUnitsOfSelectedSource = [
+ ...(emissionSourceConvertUnits || []),
+ ...missingUnits.map((unit) => ({
+ unit: { id: unit.id, tag: unit.tag },
+ value: "", // You can set the default value for missing units here
+ })),
+ ];
+ return convertUnitsOfSelectedSource;
+ };
+
+ const handleEditEmissionSource = (selectedSource) => {
+ const sectorOfSelectedSource = {
+ value: selectedSource?.subSector?.sector?.id,
+ label: selectedSource?.subSector?.sector?.tag,
+ };
+ const subSectorOfSelectedSource = {
+ value: selectedSource?.subSector?.id,
+ label: selectedSource?.subSector?.tag,
+ };
+ const emissionScopeOfSelectedSource = {
+ value: selectedSource?.emissionScope,
+ label: selectedSource?.emissionScope
+ ? "Kapsam-" + selectedSource?.emissionScope
+ : "",
+ };
+ const convertUnitsOfSelectedSource =
+ selectedSource?.emissionSourceConvertUnits?.map((item) => ({
+ ...item,
+ value: item.value.toString(),
+ }));
+
+ const wasteEmissionSourceSupplementOfSelectedSource = {
+ dryWeightCH4:
+ selectedSource?.wasteEmissionSourceSupplement?.dryWeightCH4 || 0,
+ wetWeightCH4:
+ selectedSource?.wasteEmissionSourceSupplement?.wetWeightCH4 || 0,
+ dryWeightN2O:
+ selectedSource?.wasteEmissionSourceSupplement?.dryWeightN2O || 0,
+ wetWeightN2O:
+ selectedSource?.wasteEmissionSourceSupplement?.wetWeightN2O || 0,
+ dampWeightCH4:
+ selectedSource?.wasteEmissionSourceSupplement?.dampWeightCH4 || 0,
+ };
+ setSelectedSector(selectedSource?.subSector?.sector?.id);
+ setShowAddEmissionSourceModal(true);
+ setEditingEmissionSourceData({
+ id: selectedSource.id,
+ tag: selectedSource?.tag,
+ description: selectedSource?.description || "-",
+ subSector: selectedSource?.subSector,
+ co2: selectedSource?.co2,
+ ch4: selectedSource?.ch4,
+ n2o: selectedSource?.n2o,
+ sector: sectorOfSelectedSource,
+ subSector: subSectorOfSelectedSource,
+ emissionScope: emissionScopeOfSelectedSource,
+ emissionSourceConvertUnits: convertUnitsOfSelectedSource,
+ wasteEmissionSourceSupplement:
+ wasteEmissionSourceSupplementOfSelectedSource,
+ });
+ };
+
+ const handleDeleteEmissionSource = async (selectedSource) => {
+ const result = await Swal.fire({
+ title: `${selectedSource.tag}, ${t("Warnings.sureForDelete")}`,
+ text: t("Warnings.notUndone"),
+ icon: "warning",
+ showCancelButton: true,
+ confirmButtonText: t("Cruds.delete"),
+ cancelButtonText: t("Cruds.cancel"),
+ customClass: {
+ confirmButton: "btn btn-primary",
+ cancelButton: "btn btn-danger ml-1",
+ },
+ buttonsStyling: false,
+ });
+ if (result.value !== null && result.value === true) {
+ dispatch(deleteEmissionSource(selectedSource.id));
+ }
+ };
+
+ return (
+
+ );
+};
+
+export default EmissionSource;