/*! * * Copyright (c) 2020-2023 Diality Inc. - All Rights Reserved. * \copyright * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. * * \file VTreatmentCreate.cpp * \author (last) Behrouz NematiPour * \date (last) 31-May-2023 * \author (original) Peter Lucia * \date (original) 22-Sep-2020 * */ // Qt // Project #include "ApplicationController.h" #include "VTreatmentCreate.h" #include "FileHandler.h" #include "MsgDefs.h" using namespace Gui; using namespace View; using namespace Storage; VTreatmentCreate::VTreatmentCreate(QObject *parent) : QObject(parent) { ADJUST_VIEW_CONNECTION(AdjustParametersValidationRequestData ) ACTION_VIEW_CONNECTION(AdjustParametersValidationResponseData ) ADJUST_VIEW_CONNECTION(AdjustParametersConfirmRequestData ) } /** * \brief VCreateTreatment::doValidation * Validates the treatment profile locally, then requests validation of it with FW */ void VTreatmentCreate::doValidation() { AdjustParametersValidationRequestData data; data.mBloodFlowRate = _bloodFlowRate ; data.mDialysateFlowRate = _dialysateFlowRate ; data.mTreatmentDuration = _treatmentDuration ; data.mHeparinDispensingRate = _heparinDispensingRate ; data.mHeparinBolusVolume = _heparinBolusVolume ; data.mHeparinStopTime = _heparinStopTime ; data.mSalineBolus = _salineBolusVolume ; data.mHeparinType = _heparinType ; data.mAcidConcentrate = _acidConcentrate ; data.mBicarbonateConcentrate = _bicarbonateConcentrate ; data.mDialyzerType = _dialyzerType ; data.mDialysateTemp = _dialysateTemp ; data.mArterialPressureLimitWindow = _arterialPressureLimitWindow ; data.mVenousPressureLimitWindow = _venousPressureLimitWindow ; data.mVenousPressureLimitAsymtrc = _venousPressureLimitAsymtrc ; data.mBloodPressureMeasureInterval = _bloodPressureMeasureInterval ; data.mRinsebackFlowRate = _rinsebackFlowRate ; emit didAdjustment(data); } /** * \brief VCreateTreatment::doConfirm * \details Emits treatment data to GUI controller, * who emits to application controller * \note Finished create treatment confirm... */ void VTreatmentCreate::doConfirm() { AdjustParametersConfirmRequestData confirmTreatmentRequest; confirmTreatmentRequest.requestedState = AdjustParametersConfirmRequestData::eConfirm; emit didAdjustment(confirmTreatmentRequest); } /** * \brief VCreateTreatment::doCancel * \details Notifies FW the user has canceled confirming the treatment parameters * \note Telling FW user is canceling confirm treatment parameters... */ void VTreatmentCreate::doCancel() { AdjustParametersConfirmRequestData confirmTreatmentRequest; confirmTreatmentRequest.requestedState = AdjustParametersConfirmRequestData::eCancel; emit didAdjustment(confirmTreatmentRequest); } /** * \brief VCreateTreatment::enumToString * Convenience function to convert an enum to a string * \param vEnum - the enum value * \return QString - the enum name */ QString VTreatmentCreate::enumToString(GuiRequestReasons vEnum) { return Gui::enumString(vEnum, "[%1] Unknown Rejection Reason"); } /** * \brief VCreateTreatment::onFWValidationResponse * Slot to handle a validation response from FW * \param actionType The action type must be a create treatment response * \param messageData The message data must contain the reject reason codes for all parameters * \returns True if FW OK's treatment parameters, false otherwise */ void VTreatmentCreate::onActionReceive(const AdjustParametersValidationResponseData &data) { if (! data.mAccepted) { bloodFlowRateRejectReason (data.mBloodFlowRate ); dialysateFlowRateRejectReason (data.mDialysateFlowRate ); treatmentDurationRejectReason (data.mDuration ); heparinDispensingRateRejectReason (data.mHeparinDispensingRate ); heparinBolusVolumeRejectReason (data.mHeparinBolusVolume ); heparinStopTimeRejectReason (data.mHeparinStopTime ); salineBolusVolumeRejectReason (data.mSalineBolus ); heparinTypeRejectReason (data.mHeparinType ); acidConcentrateRejectReason (data.mAcidConcentrate ); bicarbonateConcentrateRejectReason (data.mBicarbonateConcentrate ); dialyzerTypeRejectReason (data.mDialyzerType ); dialysateTempRejectReason (data.mDialysateTemp ); arterialPressureLimitWindowRejectReason (data.mArterialPressureLimitWindow ); venousPressureLimitWindowRejectReason (data.mVenousPressureLimitWindow ); venousPressureLimitAsymtrcRejectReason (data.mVenousPressureLimitAsymtrc ); bloodPressureMeasureIntervalRejectReason (data.mBloodPressureMeasureInterval); rinsebackFlowRateRejectReason (data.mRinsebackFlowRate ); emit didValidationFail(); } else { emit didValidationPass(); } } /*! * \brief VCreateTreatment::doGetPrescriptionParameterValues * \details Gets a list of the prescription parameter values * \return (QStringList) The list of parameter values with units */ QStringList VTreatmentCreate::doGetPrescriptionParameterValues() { return QStringList() << QString("%0 mL/min").arg(_bloodFlowRate) << QString("%0 mL/min").arg(_dialysateFlowRate) << QString("%0 min").arg(_treatmentDuration) << ( _heparinDispensingRate ? QString("%0 mL/hr").arg(_heparinDispensingRate) : tr("OFF") ) << ( _heparinBolusVolume ? QString("%0 mL" ).arg(_heparinBolusVolume ) : tr("OFF") ) << QString("%0 min").arg(_heparinStopTime) << QString("%0 mL").arg(_salineBolusVolume); } /*! * \brief VCreateTreatment::doGetOperatingParameterValues * \details Gets the operating parameter values * \return (QStringList) The list of operating parameter values with units where applicable */ QStringList VTreatmentCreate::doGetOperatingParameterValues() { QString mHeparinType ; QString mAcidConcentrate ; QString mBicarbonateConcentrate ; QString mDialyzerType ; QStringList mHeparinTypeOptions ; QStringList mAcidConcentrateOptions ; QStringList mBicarbonateConcentrateOptions ; QStringList mDialyzerTypeOptions ; QString mCategory = Storage::Settings_Category_ConfigurationsDataList; if ( heparinTypeSet () ) { mHeparinTypeOptions = _Settings.keys(mCategory, "Heparin Type Options" ); if ((int) _heparinType < mHeparinTypeOptions .length()) mHeparinType = mHeparinTypeOptions .at( _heparinType ); } else { mHeparinType = tr("NONE"); } if ( acidConcentrateSet () ) { mAcidConcentrateOptions = _Settings.keys(mCategory, "Acid Concentrate Options" ); if ((int) _acidConcentrate < mAcidConcentrateOptions .length()) mAcidConcentrate = mAcidConcentrateOptions .at( _acidConcentrate ); } else { mAcidConcentrate = tr("NONE"); } if ( bicarbonateConcentrateSet () ) { mBicarbonateConcentrateOptions = _Settings.keys(mCategory, "Bicarbonate Concentrate Options" ); if ((int) _bicarbonateConcentrate < mBicarbonateConcentrateOptions .length()) mBicarbonateConcentrate = mBicarbonateConcentrateOptions .at( _bicarbonateConcentrate ); } else { mBicarbonateConcentrate = tr("NONE"); } if ( dialyzerTypeSet () ) { mDialyzerTypeOptions = _Settings.keys(mCategory, "Dialyzer Type Options" ); if ((int) _dialyzerType < mDialyzerTypeOptions .length()) mDialyzerType = mDialyzerTypeOptions .at( _dialyzerType ); } else { mDialyzerType = tr("NONE"); } return QStringList() << mHeparinType << mAcidConcentrate << mBicarbonateConcentrate << mDialyzerType << QString("%0 °C" ).arg(_dialysateTemp ) << ( _bloodPressureMeasureInterval ? QString("%0 min").arg(_bloodPressureMeasureInterval) : tr("OFF") ) ; }