Skip to content

Commit

Permalink
Tracking pull request to merge release-1.66.0 to master (#2447)
Browse files Browse the repository at this point in the history
* initial updates for 1.66.0

* add oc-client image

* feat: update organization sales/supplied average to display sales if less than 3 years of supplied (#2451)

* feat: if less than 3 years of records exist for supplied, passes sales instead
-new @Property to display whether its a sales or supplied average
-updates frontend to display whether its sales or supplied

* chore: removes duplicate code

* chore: updates code as per Tim's request!

* chore: removes unnecessary None, None

* fix: fixes woopsie

* fix typo

---------

Co-authored-by: tim738745 <[email protected]>

* 2439, 2440 Bug-fix: "year" at backend may not be int (#2452)

* Bug-fix: "year" at backend may not be int

* Ensure "year" is int in get_avg_ldv_sales

---------

Co-authored-by: Emily <[email protected]>
Co-authored-by: tim738745 <[email protected]>
Co-authored-by: Roger Leung <[email protected]>
  • Loading branch information
4 people authored Feb 11, 2025
1 parent 85a516e commit 4e1216c
Show file tree
Hide file tree
Showing 8 changed files with 123 additions and 39 deletions.
12 changes: 6 additions & 6 deletions .github/workflows/pr-build.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ on:
pull_request:
types: [labeled, synchronize]
branches:
- release-1.65.0
- release-1.66.0
paths:
- frontend/**
- backend/**
Expand Down Expand Up @@ -33,7 +33,7 @@ jobs:
id: cache
uses: actions/[email protected]
with:
path: /usr/local/bin/oc # Path where the `oc` binary will be installed
path: /usr/local/bin/oc # Path where the `oc` binary will be installed
key: oc-cli-${{ runner.os }}

- name: Install OpenShift CLI (if not cached)
Expand Down Expand Up @@ -72,7 +72,7 @@ jobs:
with:
path: /usr/local/bin/oc
key: oc-cli-${{ runner.os }}

- name: Log in to Openshift
uses: redhat-actions/[email protected]
with:
Expand Down Expand Up @@ -116,7 +116,7 @@ jobs:
with:
path: /usr/local/bin/oc
key: oc-cli-${{ runner.os }}

- name: Log in to Openshift
uses: redhat-actions/[email protected]
with:
Expand Down Expand Up @@ -162,7 +162,7 @@ jobs:
with:
path: /usr/local/bin/oc
key: oc-cli-${{ runner.os }}

- name: Log in to Openshift
uses: redhat-actions/[email protected]
with:
Expand Down Expand Up @@ -220,7 +220,7 @@ jobs:
replace: "${{ env.PR_NUMBER }}"
include: "zeva/values-dev-pr.yaml"
regex: false

- name: Restore oc command from Cache
uses: actions/[email protected]
with:
Expand Down
5 changes: 1 addition & 4 deletions backend/api/models/model_year_report.py
Original file line number Diff line number Diff line change
Expand Up @@ -170,10 +170,7 @@ def get_previous_model_report(self):
).first()

def get_avg_sales(self):
avg_sales = self.organization.get_avg_ldv_sales(
year=self.model_year.name
)

avg_sales, _ = self.organization.get_avg_ldv_sales(year=self.model_year.name)
# if this is empty that means we don't have enough ldv_sales to
# get the average. our avg_sales at this point should be from the
# current report ldv_sales
Expand Down
49 changes: 30 additions & 19 deletions backend/api/models/organization.py
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@ def ldv_sales(self):
return sales

def get_ldv_sales(self, year):
is_supplied = False if year < 2024 else True
is_supplied = False if int(year) < 2024 else True
sales = self.ldv_sales.filter(
model_year__name__in=[
str(year - 1),
Expand All @@ -131,32 +131,43 @@ def get_ldv_sales(self, year):
]
).filter(is_supplied=is_supplied)
return sales


def filter_sales_supplied(self, year, is_supplied):
return self.ldv_sales.filter(
model_year__name__lte=year
).filter(is_supplied=is_supplied).values_list(
'ldv_sales', flat=True
)

def get_avg_ldv_sales(self, year=None):
if not year:
year = date.today().year

if date.today().month < 10:
year -= 1
is_supplied = False if year < 2024 else True
else:
year = int(year) # Ensure year is an integer

sales = self.ldv_sales.filter(
model_year__name__lte=year
).filter(is_supplied=is_supplied).values_list(
'ldv_sales', flat=True
)[:3]

if sales.count() < 3:
sales = self.ldv_sales.filter(model_year__name=year).filter(
is_supplied=is_supplied
).values_list(
'ldv_sales', flat=True
)[:1]
is_supplied = False if year < 2024 else True

sales = self.filter_sales_supplied(year, is_supplied)[:3]

if is_supplied == True and sales.count() < 3:
is_supplied = False
# If there aren't enough Supplied values, show 'Sales' average
sales = self.filter_sales_supplied(year, is_supplied)[:3]
if sales.count() < 3:
# if there are less than 3 supplied or sales, show the 1
# most recent supplied
is_supplied = True
sales = self.filter_sales_supplied(year, is_supplied)[:1]

if not sales:
return None
return None, None

return sum(list(sales)) / len(sales)
sales_or_supplied = 'Supplied' if is_supplied else 'Sales'

return sum(list(sales)) / len(sales), sales_or_supplied

def get_current_class(self, year=None, avg_sales=None):
# The logic below means that if we're past october, the past year
Expand All @@ -168,8 +179,8 @@ def get_current_class(self, year=None, avg_sales=None):
year -= 1

if not avg_sales:
avg_sales = self.get_avg_ldv_sales(year)

result = self.get_avg_ldv_sales(year) or (None, None)
avg_sales, _ = result
if not avg_sales:
avg_sales = 0

Expand Down
17 changes: 10 additions & 7 deletions backend/api/serializers/organization.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,9 @@ class OrganizationSerializer(serializers.ModelSerializer):
Loads most of the fields and the balance for the Supplier
"""
organization_address = serializers.SerializerMethodField()
avg_ldv_sales = serializers.SerializerMethodField()
ldv_sales = OrganizationLDVSalesSerializer(many=True)
first_model_year = serializers.SerializerMethodField()

def get_organization_address(self, obj):
"""
Loads the latest valid address for the organization
Expand All @@ -42,21 +41,25 @@ def get_organization_address(self, obj):
)

return serializer.data

def get_avg_ldv_sales(self, obj):
return obj.get_avg_ldv_sales()

def get_first_model_year(self, obj):
if obj.first_model_year is not None:
return obj.first_model_year.name
return None


def to_representation(self, instance):
ret = super().to_representation(instance)
x, y = instance.get_avg_ldv_sales()
ret["avg_ldv_sales"] = x
ret["supplied_or_sales"] = y
return ret

class Meta:
model = Organization
fields = (
'id', 'name', 'create_timestamp', 'organization_address',
'balance', 'is_active', 'short_name', 'is_government',
'supplier_class', 'avg_ldv_sales', 'ldv_sales',
'supplier_class', 'ldv_sales',
'has_submitted_report', 'first_model_year', 'has_report',
)

Expand Down
2 changes: 1 addition & 1 deletion backend/api/viewsets/model_year_report.py
Original file line number Diff line number Diff line change
Expand Up @@ -178,7 +178,7 @@ def retrieve(self, request, pk=None):

org = request.user.organization

avg_sales = org.get_avg_ldv_sales(year=model_year_int)
avg_sales, _ = org.get_avg_ldv_sales(year=model_year_int)

ldv_sales_previous_list = org.get_ldv_sales(year=model_year_int)
ldv_sales_previous = OrganizationLDVSalesSerializer(
Expand Down
2 changes: 1 addition & 1 deletion frontend/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "zeva-frontend",
"version": "1.65.0",
"version": "1.66.0",
"private": true,
"dependencies": {
"@babel/eslint-parser": "^7.19.1",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@ const VehicleSupplierDetailsPage = (props) => {
</div>

<div className="mt-3">
<h4 className="d-inline">3 Year Average Vehicles Supplied: </h4>
<h4 className="d-inline">3 Year Average Vehicles {details.suppliedOrSales}: </h4>
<span> {formatNumeric(Math.round(details.avgLdvSales), 0)} </span>
</div>

Expand Down
73 changes: 73 additions & 0 deletions openshift/templates/oc-client/oc-client-deployment.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: oc-cli-data
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
storageClassName: netapp-file-standard
volumeMode: Filesystem
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: 'oc-client'
annotations: {}
spec:
selector:
matchLabels:
app: oc-client
replicas: 1
template:
metadata:
labels:
app: oc-client
spec:
volumes:
- name: oc-cli-data
persistentVolumeClaim:
claimName: oc-cli-data
containers:
- name: oc-client
image: >-
image-registry.openshift-image-registry.svc:5000/e52f12-tools/zeva-cleanup:prod
command:
- "/bin/sleep"
- "7200"
env: []
livenessProbe:
failureThreshold: 10
initialDelaySeconds: 40
periodSeconds: 60
successThreshold: 1
exec:
command:
- pwd
timeoutSeconds: 3
readinessProbe:
failureThreshold: 10
initialDelaySeconds: 30
periodSeconds: 10
successThreshold: 1
exec:
command:
- pwd
timeoutSeconds: 3
resources:
limits:
cpu: 200m
memory: 400Mi
requests:
cpu: 100m
memory: 200Mi
volumeMounts:
- name: oc-cli-data
mountPath: /oc-cli-data
imagePullSecrets: []
strategy:
type: Recreate
paused: false

0 comments on commit 4e1216c

Please sign in to comment.