diff --git a/seed/analysis_pipelines/better/pipeline.py b/seed/analysis_pipelines/better/pipeline.py index 4eba337162..1a9538e00e 100644 --- a/seed/analysis_pipelines/better/pipeline.py +++ b/seed/analysis_pipelines/better/pipeline.py @@ -12,6 +12,7 @@ from celery import chain, shared_task from django.core.files.base import ContentFile from django.db.models import Count +from django.utils.timezone import make_aware from seed.analysis_pipelines.better.buildingsync import SEED_TO_BSYNC_RESOURCE_TYPE, _build_better_input from seed.analysis_pipelines.better.client import BETTERClient @@ -159,8 +160,8 @@ def get_meter_readings(property_id, preprocess_meters, config): value2 = value2 + timedelta(days=1) elif config.get("select_meters") == "select_cycle": cycle = Cycle.objects.get(pk=config["cycle_id"]) - value1 = dateutil.parser.parse(cycle.start.isoformat()) - value2 = dateutil.parser.parse(cycle.end.isoformat()) + timedelta(days=1) + value1 = make_aware(dateutil.parser.parse(cycle.start.isoformat())) + value2 = make_aware(dateutil.parser.parse(cycle.end.isoformat())) + timedelta(days=1) except Exception as err: raise AnalysisPipelineError(f"Analysis configuration error: invalid dates selected for meter readings: {err}") @@ -208,7 +209,6 @@ def get_meter_readings(property_id, preprocess_meters, config): "readings": readings, } ) - return selected_meters_and_readings @@ -295,8 +295,8 @@ def _start_analysis(self, analysis_id): pipeline = BETTERPipeline(analysis_id) progress_data = pipeline.set_analysis_status_to_running() progress_data.step("Sending requests to BETTER service") - analysis = Analysis.objects.get(id=analysis_id) + client = BETTERClient(analysis.organization.better_analysis_api_key) context = BETTERPipelineContext(analysis, progress_data, client) @@ -492,15 +492,14 @@ def _process_results(self, analysis_id): ) except Exception: if analysis.can_create(): - column, _created = Column.objects.create( + Column.objects.create( is_extra_data=True, column_name=column_data_path.column_name, organization=analysis.organization, table_name="PropertyState", + display_name=column_data_path.column_display_name, + column_description=column_data_path.column_display_name, ) - column.display_name = column_data_path.column_display_name - column.column_description = column_data_path.column_display_name - column.save() else: missing_columns = True diff --git a/seed/static/seed/js/controllers/inventory_detail_analyses_controller.js b/seed/static/seed/js/controllers/inventory_detail_analyses_controller.js index a1538b0b7f..b089953f12 100644 --- a/seed/static/seed/js/controllers/inventory_detail_analyses_controller.js +++ b/seed/static/seed/js/controllers/inventory_detail_analyses_controller.js @@ -157,7 +157,8 @@ angular.module('BE.seed.controller.inventory_detail_analyses', []).controller('i resolve: { inventory_ids: () => [$scope.inventory.view_id], cycles: () => cycle_service.get_cycles().then((result) => result.cycles), - current_cycle: () => $scope.cycle + current_cycle: () => $scope.cycle, + user: () => $scope.menu.user } }) .result.then((data) => { diff --git a/seed/static/seed/js/controllers/inventory_settings_controller.js b/seed/static/seed/js/controllers/inventory_settings_controller.js index 87f6acd8f4..04f805e786 100644 --- a/seed/static/seed/js/controllers/inventory_settings_controller.js +++ b/seed/static/seed/js/controllers/inventory_settings_controller.js @@ -290,23 +290,14 @@ angular.module('BE.seed.controller.inventory_settings', []).controller('inventor }; $scope.newProfile = () => { - const columns = []; - const derived_columns = []; - for (const column in currentColumns) { - if (column.derived_column) { - derived_columns.push(column); - } else { - columns.push(column); - } - } const modalInstance = $uibModal.open({ templateUrl: `${urls.static_url}seed/partials/settings_profile_modal.html`, controller: 'settings_profile_modal_controller', resolve: { action: () => 'new', data: { - columns, - derived_columns + columns: currentColumns(), + derived_columns: [] }, profile_location: () => 'List View Profile', inventory_type: () => ($scope.inventory_type === 'properties' ? 'Property' : 'Tax Lot') diff --git a/seed/tests/test_column_list_profiles_views.py b/seed/tests/test_column_list_profiles_views.py index f3ff1267a1..d0741ac4c4 100644 --- a/seed/tests/test_column_list_profiles_views.py +++ b/seed/tests/test_column_list_profiles_views.py @@ -11,6 +11,7 @@ from seed.landing.models import SEEDUser as User from seed.models import Column +from seed.models.derived_columns import DerivedColumn from seed.test_helpers.fake import FakeColumnListProfileFactory from seed.tests.util import AccessLevelBaseTestCase, DeleteModelsTestCase from seed.utils.organizations import create_organization @@ -74,6 +75,36 @@ def test_create_column_profile(self): self.assertEqual(data["data"]["inventory_type"], "Property") self.assertEqual(data["data"]["profile_location"], "List View Profile") + def test_create_column_profile_with_derived_column(self): + self.derived_column = DerivedColumn.objects.create( + name="dc", + expression="$a + 10", + organization=self.org, + inventory_type=0, + ) + self.payload_data["derived_columns"].append( + { + "column_name": "dc", + "derived_column": True, + "id": self.derived_column.id, + "order": 4, + "pinned": False, + "table_name": "PropertyState", + } + ) + + response = self.client.post( + reverse("api:v3:column_list_profiles-list") + "?organization_id=" + str(self.org.id), + data=json.dumps(self.payload_data), + content_type="application/json", + ) + data = json.loads(response.content) + self.assertEqual(data["status"], "success") + self.assertEqual(len(data["data"]["columns"]), 3) + self.assertEqual(len(data["data"]["derived_columns"]), 1) + self.assertEqual(data["data"]["inventory_type"], "Property") + self.assertEqual(data["data"]["profile_location"], "List View Profile") + def test_get_column_profile(self): # Create two list settings self.client.post( diff --git a/vendors/package-lock.json b/vendors/package-lock.json index 2f16a32763..80ebdfaf55 100644 --- a/vendors/package-lock.json +++ b/vendors/package-lock.json @@ -609,11 +609,11 @@ "integrity": "sha512-yzcHpPMLQl0232nDzm5P4iAFTFQ9dMw0QgFLuKYbDj9M0xJ62z0oudYD/Lvh1pWfRsukiytP4Xj6BHOSrSXP8A==" }, "node_modules/angular-ui-grid": { - "version": "4.12.4", - "resolved": "https://registry.npmjs.org/angular-ui-grid/-/angular-ui-grid-4.12.4.tgz", - "integrity": "sha512-CFVRxIWhF+TXGKqUoW8qWPj3l8Lq9Q2LsIpYU/0xi2xfVc/0bBN1lz5xvBE8/wotGcrJy9YlTS2k9bqjf+/Z+g==", + "version": "4.12.7", + "resolved": "https://registry.npmjs.org/angular-ui-grid/-/angular-ui-grid-4.12.7.tgz", + "integrity": "sha512-l00dhM2/48xfnPcIaQZgxVoK4oAVA2erxHjjYke8Xli0Q06VYf/LJ41SQfNp3tGk7NCk2mBdSFD2GXfHakXHlA==", "dependencies": { - "angular": ">=1.4.0 1.8.x" + "angular": ">=1.4.0" } }, "node_modules/angular-ui-notification": {