From a1dc555c2088f61f76e6afc6288994a7f1ea4050 Mon Sep 17 00:00:00 2001
From: Ramesh Kumar <ramesh.p@matriotsolutions.com>
Date: Thu, 18 Aug 2022 12:52:23 +0530
Subject: [PATCH] TMSS-1934: Added reference pointing constraint columns to the
 SU set editor

---
 .../Scheduling/excelview.schedulingset.js     | 69 ++++++++++++++++++-
 .../tmss_webapp/src/utils/unit.converter.js   |  2 +-
 2 files changed, 68 insertions(+), 3 deletions(-)

diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Scheduling/excelview.schedulingset.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Scheduling/excelview.schedulingset.js
index fe38fc7e9dd..b416c90992a 100644
--- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Scheduling/excelview.schedulingset.js
+++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Scheduling/excelview.schedulingset.js
@@ -776,6 +776,11 @@ export class SchedulingSetCreate extends Component {
         this.agSUWithDefaultValue['min_calibrator_elevation'] = observStrategyContraints?.sky?.min_elevation && observStrategyContraints.sky.min_elevation.calibrator?((observStrategyContraints.sky.min_elevation.calibrator * 180) / Math.PI).toFixed(2):((this.resolvedConstraintSchema.properties.sky.properties.min_elevation.properties.calibrator.default * 180) / Math.PI).toFixed(2);
         this.agSUWithDefaultValue['offset_from'] = observStrategyContraints?.sky?.transit_offset.from?(observStrategyContraints.sky.transit_offset.from<0?'-':'')+UnitConverter.getSecsToHHmmss(observStrategyContraints.sky.transit_offset.from):"00:00:00";
         this.agSUWithDefaultValue['offset_to'] = observStrategyContraints?.sky?.transit_offset.to?(observStrategyContraints.sky.transit_offset.to<0?'-':'')+UnitConverter.getSecsToHHmmss(observStrategyContraints.sky.transit_offset.to):"00:00:00";
+        this.agSUWithDefaultValue['ref_pointing_enabled'] = observStrategyContraints?.sky?.reference_pointing?.enabled || this.resolvedConstraintSchema.properties.sky.properties.reference_pointing.properties.enabled.default;
+        this.agSUWithDefaultValue['ref_pointing_angle1'] = observStrategyContraints?.sky?.reference_pointing?.pointing?.angle1?UnitConverter.getAngleInput(observStrategyContraints.sky.reference_pointing.pointing.angle1,false):UnitConverter.getAngleInput(this.resolvedConstraintSchema.properties.sky.properties.reference_pointing.properties.pointing.default.angle1, false);
+        this.agSUWithDefaultValue['ref_pointing_angle2'] = observStrategyContraints?.sky?.reference_pointing?.pointing?.angle2?UnitConverter.getAngleInput(observStrategyContraints.sky.reference_pointing.pointing.angle2,true):UnitConverter.getAngleInput(this.resolvedConstraintSchema.properties.sky.properties.reference_pointing.properties.pointing.default.angle2, true);
+        this.agSUWithDefaultValue['ref_pointing_direction_type'] = observStrategyContraints?.sky?.reference_pointing?.pointing?.direction_type || this.resolvedConstraintSchema.properties.sky.properties.reference_pointing.properties.pointing.default.direction_type;
+        this.agSUWithDefaultValue['ref_pointing_target'] = observStrategyContraints?.sky?.reference_pointing?.pointing?.target || this.resolvedConstraintSchema.properties.sky.properties.reference_pointing.properties.pointing.default.target;
         this.agSUWithDefaultValue['md_sun'] = observStrategyContraints?.sky?.min_distance && !isNaN(observStrategyContraints.sky.min_distance.sun) ? ((observStrategyContraints.sky.min_distance.sun * 180)/Math.PI).toFixed(2): ((this.resolvedConstraintSchema.properties.sky.properties.min_distance.properties.sun.default * 180) / Math.PI).toFixed(2);
         this.agSUWithDefaultValue['md_moon'] = observStrategyContraints?.sky?.min_distance && !isNaN(observStrategyContraints.sky.min_distance.moon) ? ((observStrategyContraints.sky.min_distance.moon * 180)/Math.PI).toFixed(2): ((this.resolvedConstraintSchema.properties.sky.properties.min_distance.properties.moon.default * 180) / Math.PI).toFixed(2);
         this.agSUWithDefaultValue['md_jupiter'] = observStrategyContraints?.sky?.min_distance && !isNaN(observStrategyContraints.sky.min_distance.jupiter) ? ((observStrategyContraints.sky.min_distance.jupiter * 180)/Math.PI).toFixed(2): ((this.resolvedConstraintSchema.properties.sky.properties.min_distance.properties.jupiter.default * 180) / Math.PI).toFixed(2);
@@ -880,6 +885,19 @@ export class SchedulingSetCreate extends Component {
                         observationProps['md_moon'] =  constraint.sky.min_distance.moon; //constraint.sky.min_distance.moon:0;
                         observationProps['md_jupiter'] =  constraint.sky.min_distance.jupiter;//constraint.sky.min_distance.jupiter:0;
                     }
+                    if (constraint.sky.reference_pointing) {
+                        observationProps['ref_pointing_enabled'] = constraint.sky.reference_pointing.enabled;
+                        observationProps['ref_pointing_angle1'] = UnitConverter.getAngleInput(constraint.sky.reference_pointing.pointing.angle1, false);
+                        observationProps['ref_pointing_angle2'] = UnitConverter.getAngleInput(constraint.sky.reference_pointing.pointing.angle2, true);
+                        observationProps['ref_pointing_direction_type'] = constraint.sky.reference_pointing.pointing.direction_type;
+                        observationProps['ref_pointing_target'] = constraint.sky.reference_pointing.pointing.target;
+                    }   else {
+                        observationProps['ref_pointing_enabled'] = this.resolvedConstraintSchema.properties.sky.properties.reference_pointing.properties.enabled.default;
+                        observationProps['ref_pointing_angle1'] = UnitConverter.getAngleInput(this.resolvedConstraintSchema.properties.sky.properties.reference_pointing.properties.pointing.default.angle1, false);
+                        observationProps['ref_pointing_angle2'] = UnitConverter.getAngleInput(this.resolvedConstraintSchema.properties.sky.properties.reference_pointing.properties.pointing.default.angle2, true);
+                        observationProps['ref_pointing_direction_type'] = this.resolvedConstraintSchema.properties.sky.properties.reference_pointing.properties.pointing.default.direction_type;
+                        observationProps['ref_pointing_target'] = this.resolvedConstraintSchema.properties.sky.properties.reference_pointing.properties.pointing.default.target;
+                    }
                 }
                 observationProps['custId'] = this.custId++;
                 observationPropsList.push(observationProps);
@@ -1742,6 +1760,11 @@ export class SchedulingSetCreate extends Component {
         this.constraintVariables.push('min_calibrator_elevation');
         this.constraintVariables.push('offset_from');
         this.constraintVariables.push('offset_to');
+        this.constraintVariables.push('ref_pointing_enabled');
+        this.constraintVariables.push('ref_pointing_angle1');
+        this.constraintVariables.push('ref_pointing_angle2');
+        this.constraintVariables.push('ref_pointing_direction_type');
+        this.constraintVariables.push('ref_pointing_target');
         columnDefs.push({headerName: 'Daily', headerTooltip: 'Daily',field: 'daily',cellEditor: 'multiselector', valueSetter: function(params) {}},
             {headerName: 'Sky',headerTooltip: 'Sky',
                 children: [
@@ -1792,10 +1815,44 @@ export class SchedulingSetCreate extends Component {
                         }   else {
                             return { backgroundColor: ''};
                         }
-                    }},
+                    }}
                 ],
             });
-
+            // Add reference pointing constraint
+            columnDefs.push({headerName: `${this.resolvedConstraintSchema.properties.sky.properties.reference_pointing.title}`, 
+                                headerTooltip: `${this.resolvedConstraintSchema.properties.sky.properties.reference_pointing.description}`, children: [
+                {headerName: 'Enabled', headerTooltip: `${this.resolvedConstraintSchema.properties.sky.properties.reference_pointing.properties.enabled.description}`,field: 'ref_pointing_enabled', 
+                     cellEditor: 'agSelectCellEditor',
+                     cellEditorParams: {
+                        values: [true, false],
+                    }},
+                    {headerName: 'Angle1', headerTooltip: 'Reference Pointing - Angle1',field: 'ref_pointing_angle1', 
+                     type:'numberValueColumn', cellRenderer: 'timeInputMask',cellEditor: 'timeInputMask', valueSetter: 'valueSetter', 
+                     cellStyle: function(params) {
+                        if (params.value && !Validator.validateTimeAndAngle(params.value)) {     
+                            return { backgroundColor: BG_COLOR};
+                        } else {
+                            return { backgroundColor: ''};
+                        }
+                    }},
+                    {headerName: 'Angle2', headerTooltip: 'Reference Pointing - Angle2',field: 'ref_pointing_angle2',
+                     type:'numberValueColumn', cellRenderer: 'degreeInputMask',cellEditor: 'degreeInputMask', valueSetter: 'valueSetter',
+                     cellStyle: function(params) {
+                        if (params.value && !Validator.validateAngle(params.value)) {     
+                            return { backgroundColor: BG_COLOR};
+                        } else {
+                            return { backgroundColor: ''};
+                        }
+                    }},
+                    {headerName: 'Reference Frame', headerTooltip: 'Reference Pointing - Reference Frame',field: 'ref_pointing_direction_type',
+                        cellEditor: 'agSelectCellEditor',
+                        cellEditorParams: {
+                            values: this.resolvedConstraintSchema.definitions.pointing.properties.direction_type.enum,
+                        }
+                    },
+                    {headerName: 'Target', headerTooltip: 'Refernce Pointing - Target',field: 'ref_pointing_target'}
+                ]
+            });
             this.constraintVariables.push('md_sun');
             this.constraintVariables.push('md_moon');
             this.constraintVariables.push('md_jupiter');
@@ -2584,6 +2641,14 @@ export class SchedulingSetCreate extends Component {
         constraint.sky.min_elevation.target = isNaN(suRow.min_target_elevation)?0:suRow.min_target_elevation;
         constraint.sky.min_elevation.calibrator = isNaN(suRow.min_calibrator_elevation)?0:suRow.min_calibrator_elevation;
 
+        let ref_pointing = { enabled: false, pointing: {target:"-"}};
+        ref_pointing.enabled = suRow.ref_pointing_enabled;
+        ref_pointing.pointing.angle1 = UnitConverter.parseAngle(suRow.ref_pointing_angle1);
+        ref_pointing.pointing.angle2 = UnitConverter.parseAngle(suRow.ref_pointing_angle2);
+        ref_pointing.pointing.direction_type = suRow.ref_pointing_direction_type;
+        ref_pointing.pointing.target = suRow.ref_pointing_target;
+        constraint.sky.reference_pointing = ref_pointing;
+
         return constraint;
     }
 
diff --git a/SAS/TMSS/frontend/tmss_webapp/src/utils/unit.converter.js b/SAS/TMSS/frontend/tmss_webapp/src/utils/unit.converter.js
index db936c9cab9..63691a79a78 100644
--- a/SAS/TMSS/frontend/tmss_webapp/src/utils/unit.converter.js
+++ b/SAS/TMSS/frontend/tmss_webapp/src/utils/unit.converter.js
@@ -198,7 +198,7 @@ const UnitConverter = {
      */
     getAngleInputType(input) {
         input +='';
-        if (input.match(/^((\-?)|(\+?))((\d0?d(0?0m)(0?0(\.\d{1,4})?s))|(([0-9]?\d{2,3})d(([0-5]?\d)m)(([0-5]?\d)(\.\d{1,4})?s)))$/)) {
+        if (input.match(/^((\-?)|(\+?))((\d0?d(0?0m)(0?0(\.\d{1,4})?s))|(([0-9]?\d{0,1})d(([0-5]?\d)m)(([0-5]?\d)(\.\d{1,4})?s)))$/)) {
             return 'dms';
         } else if (input.match(/^((\-?)|(\+?))((\d0(.0{1,4})?)|([0-9]?\d{1,3})(\.\d{1,4})?) ?d(egree)?s?$/)) {
             return 'degrees';
-- 
GitLab