Commit 9f037fcb authored by suryakant's avatar suryakant

Sterlite Custom Report Updates

parent 72c79200
...@@ -4,8 +4,9 @@ class SterliteRefineryQuery: ...@@ -4,8 +4,9 @@ class SterliteRefineryQuery:
""" """
class AnodeAvailability: class AnodeAvailability:
# QUERY FOR ANODE_AVAILABILITY, UOM, NORMS, ON_DATE # Query for ANODE_AVAILABILITY
QUERY_AA = """ # ANODE_AVAILABILITY, UOM, NORMS, ON_DATE
QUERY_1 = """
SELECT SELECT
'Cell House Anode Availability' AS ANODE_AVAILABILITY, 'Cell House Anode Availability' AS ANODE_AVAILABILITY,
'%' AS UOM, '%' AS UOM,
...@@ -48,7 +49,7 @@ class SterliteRefineryQuery: ...@@ -48,7 +49,7 @@ class SterliteRefineryQuery:
GROUP BY GROUP BY
1,2; 1,2;
""" """
QUERY_MTD = """ QUERY_2 = """
SELECT SELECT
'Cell House Anode Availability' AS ANODE_AVAILABILITY, 'Cell House Anode Availability' AS ANODE_AVAILABILITY,
'%' AS UOM, '%' AS UOM,
...@@ -90,7 +91,7 @@ class SterliteRefineryQuery: ...@@ -90,7 +91,7 @@ class SterliteRefineryQuery:
GROUP BY GROUP BY
1,2; 1,2;
""" """
QUERY_YTD = """ QUERY_3 = """
SELECT SELECT
'Cell House Anode Availability' AS ANODE_AVAILABILITY, 'Cell House Anode Availability' AS ANODE_AVAILABILITY,
'%' AS UOM, '%' AS UOM,
...@@ -134,7 +135,9 @@ class SterliteRefineryQuery: ...@@ -134,7 +135,9 @@ class SterliteRefineryQuery:
""" """
class DOCellsInOperation: class DOCellsInOperation:
QUERY_AA = """ # Query for DO Cells Operation
# ANODE_AVAILABILITY, UOM, NORMS, ON_DATE
QUERY_1 = """
SELECT SELECT
'DO Cells In Operation' AS ANODE_AVAILABILITY, 'DO Cells In Operation' AS ANODE_AVAILABILITY,
'No.' AS UOM, 'No.' AS UOM,
...@@ -159,6 +162,8 @@ class SterliteRefineryQuery: ...@@ -159,6 +162,8 @@ class SterliteRefineryQuery:
""" """
class TotalCellsInOperation: class TotalCellsInOperation:
# Query for Total Cell In Operations
# ANODE_AVAILABILITY, UOM, NORMS, ON_DATE
QUERY_1 = """ QUERY_1 = """
SELECT SELECT
'Total Cells In Operation' AS ANODE_AVAILABILITY, 'Total Cells In Operation' AS ANODE_AVAILABILITY,
...@@ -169,15 +174,18 @@ class SterliteRefineryQuery: ...@@ -169,15 +174,18 @@ class SterliteRefineryQuery:
FROM FROM
(SELECT KPI, (SELECT KPI,
CASE CASE
WHEN LOWER(TRIM(KPI)) = 'operational_cells_plan' THEN ROUND(AVG(METRIC_VALUE)) WHEN LOWER(TRIM(KPI)) = 'operational_cells_plan'
THEN ROUND(AVG(METRIC_VALUE))
ELSE NULL ELSE NULL
END AS NORMS, END AS NORMS,
CASE CASE
WHEN LOWER(TRIM(KPI)) = 'operational_cells_actual' THEN ROUND(AVG(METRIC_VALUE)) WHEN LOWER(TRIM(KPI)) = 'operational_cells_actual'
THEN ROUND(AVG(METRIC_VALUE))
ELSE NULL ELSE NULL
END AS METRIC_VALUE END AS METRIC_VALUE
FROM SEMANTIC_PROD.REFINERY_OPERATIONAL_CELLS_VIEW FROM SEMANTIC_PROD.REFINERY_OPERATIONAL_CELLS_VIEW
WHERE LOWER(TRIM(KPI)) in ('operational_cells_actual', 'operational_cells_plan') WHERE LOWER(TRIM(KPI)) in
('operational_cells_actual', 'operational_cells_plan')
AND (date BETWEEN '{day_start_date}' AND '{day_end_date}') AND (date BETWEEN '{day_start_date}' AND '{day_end_date}')
GROUP BY 1)OP_CELLS GROUP BY 1)OP_CELLS
GROUP BY 1,2 GROUP BY 1,2
...@@ -213,16 +221,164 @@ class SterliteRefineryQuery: ...@@ -213,16 +221,164 @@ class SterliteRefineryQuery:
FROM FROM
(SELECT KPI, (SELECT KPI,
CASE CASE
WHEN LOWER(TRIM(KPI)) = 'operational_cells_plan' THEN ROUND(AVG(METRIC_VALUE)) WHEN LOWER(TRIM(KPI)) = 'operational_cells_plan'
THEN ROUND(AVG(METRIC_VALUE))
ELSE NULL ELSE NULL
END AS NORMS, END AS NORMS,
CASE CASE
WHEN LOWER(TRIM(KPI)) = 'operational_cells_actual' THEN ROUND(AVG(METRIC_VALUE)) WHEN LOWER(TRIM(KPI)) = 'operational_cells_actual'
THEN ROUND(AVG(METRIC_VALUE))
ELSE NULL ELSE NULL
END AS METRIC_VALUE END AS METRIC_VALUE
FROM SEMANTIC_PROD.REFINERY_OPERATIONAL_CELLS_VIEW FROM SEMANTIC_PROD.REFINERY_OPERATIONAL_CELLS_VIEW
WHERE LOWER(TRIM(KPI)) in ('operational_cells_actual', 'operational_cells_plan') WHERE LOWER(TRIM(KPI)) in
('operational_cells_actual', 'operational_cells_plan')
AND (date BETWEEN '{year_start_date}' AND '{year_end_date}') AND (date BETWEEN '{year_start_date}' AND '{year_end_date}')
GROUP BY 1)OP_CELLS GROUP BY 1)OP_CELLS
GROUP BY 1,2 GROUP BY 1,2
""" """
class NoOfNearMiss:
QUERY_1 = """
SELECT
CASE
WHEN LOWER(TRIM(KPI)) = 'first aid' THEN 'No. of First Aid'
WHEN LOWER(TRIM(KPI)) = 'near miss' THEN 'No. of Near Miss'
ELSE NULL
END AS safety_report,
'No.' AS UOM,
0 AS NORMS,
ROUND(SUM(METRIC_VALUE), 2) AS ON_DATE
FROM SEMANTIC_PROD.REFINERY_HSE_VIEW
WHERE LOWER(TRIM(KPI)) in ('near miss')
AND DATE BETWEEN '{day_start_date}' AND '{day_end_date}'
GROUP BY 1,2,3
"""
QUERY_2 = """
SELECT
CASE
WHEN LOWER(TRIM(KPI)) = 'first aid' THEN 'No. of First Aid'
WHEN LOWER(TRIM(KPI)) = 'near miss' THEN 'No. of Near Miss'
ELSE NULL
END AS safety_report,
'No.' AS UOM,
0 AS NORMS,
ROUND(SUM(METRIC_VALUE), 2) AS MTD
FROM SEMANTIC_PROD.REFINERY_HSE_VIEW
WHERE LOWER(TRIM(KPI)) in ('near miss')
AND DATE BETWEEN '{month_start_date}' AND '{month_end_date}'
GROUP BY 1,2,3
"""
QUERY_3 = """
SELECT
CASE
WHEN LOWER(TRIM(KPI)) = 'first aid' THEN 'No. of First Aid'
WHEN LOWER(TRIM(KPI)) = 'near miss' THEN 'No. of Near Miss'
ELSE NULL
END AS safety_report,
'No.' AS UOM,
0 AS NORMS,
ROUND(SUM(METRIC_VALUE), 2) AS YTD
FROM SEMANTIC_PROD.REFINERY_HSE_VIEW
WHERE LOWER(TRIM(KPI)) in ('near miss')
AND DATE BETWEEN '{year_start_date}' AND '{year_end_date}'
GROUP BY 1,2,3
"""
class NoOfFirstAid:
QUERY_1 = """
SELECT
CASE
WHEN LOWER(TRIM(KPI)) = 'first aid' THEN 'No. of First Aid'
WHEN LOWER(TRIM(KPI)) = 'near miss' THEN 'No. of Near Miss'
ELSE NULL
END AS safety_report,
'No.' AS UOM,
0 AS NORMS,
ROUND(SUM(METRIC_VALUE), 2) AS ON_DATE
FROM SEMANTIC_PROD.REFINERY_HSE_VIEW
WHERE LOWER(TRIM(KPI)) in ('first aid')
AND DATE BETWEEN '{day_start_date}' AND '{day_end_date}'
GROUP BY 1,2,3
"""
QUERY_2 = """
SELECT
CASE
WHEN LOWER(TRIM(KPI)) = 'first aid' THEN 'No. of First Aid'
WHEN LOWER(TRIM(KPI)) = 'near miss' THEN 'No. of Near Miss'
ELSE NULL
END AS safety_report,
'No.' AS UOM,
0 AS NORMS,
ROUND(SUM(METRIC_VALUE), 2) AS MTD
FROM SEMANTIC_PROD.REFINERY_HSE_VIEW
WHERE LOWER(TRIM(KPI)) in ('first aid')
AND DATE BETWEEN '{month_start_date}' AND '{month_end_date}'
GROUP BY 1,2,3
"""
QUERY_3 = """
SELECT
CASE
WHEN LOWER(TRIM(KPI)) = 'first aid' THEN 'No. of First Aid'
WHEN LOWER(TRIM(KPI)) = 'near miss' THEN 'No. of Near Miss'
ELSE NULL
END AS safety_report,
'No.' AS UOM,
0 AS NORMS,
ROUND(SUM(METRIC_VALUE), 2) AS YTD
FROM SEMANTIC_PROD.REFINERY_HSE_VIEW
WHERE LOWER(TRIM(KPI)) in ('first aid')
AND DATE BETWEEN '{year_start_date}' AND '{year_end_date}'
GROUP BY 1,2,3
"""
class Cir140KARectifierAvgCurrent:
QUERY_1 = """
SELECT
'Cir-1 40 KA Rectifier Avg. Current' AS power_availability,
'%' AS uom,
AVG(PLAN_METRIC_VALUE) AS norms,
SUM(ACTUAL_METRIC_VALUE) / COALESCE(NULLIF(COUNT(
CASE
WHEN ACTUAL_METRIC_VALUE <> 0 THEN 1
ELSE NULL END), 0), 1) AS on_date
FROM SEMANTIC_PROD.RECTIFIER_KPI_VIEW
WHERE LOWER(TRIM(KPI)) = '40ka_rectifier_current'
AND DATE BETWEEN '{day_start_date}' AND '{day_end_date}'
GROUP BY 1,2
"""
QUERY_2 = """
SELECT
'Cir-1 40 KA Rectifier Avg. Current' AS power_availability,
'%' AS uom,
SUM(ACTUAL_METRIC_VALUE) / COALESCE(NULLIF(COUNT(
CASE
WHEN ACTUAL_METRIC_VALUE <> 0 THEN 1
ELSE NULL END), 0), 1) AS mtd
FROM SEMANTIC_PROD.RECTIFIER_KPI_VIEW
WHERE LOWER(TRIM(KPI)) = '40ka_rectifier_current'
AND DATE BETWEEN '{month_start_date}' AND '{month_end_date}'
GROUP BY 1,2
"""
QUERY_3 = """
SELECT
'Cir-1 40 KA Rectifier Avg. Current' AS power_availability,
'%' AS uom,
SUM(ACTUAL_METRIC_VALUE) / COALESCE(NULLIF(COUNT(
CASE
WHEN ACTUAL_METRIC_VALUE <> 0 THEN 1
ELSE NULL END), 0), 1) AS ytd
FROM SEMANTIC_PROD.RECTIFIER_KPI_VIEW
WHERE LOWER(TRIM(KPI)) = '40ka_rectifier_current'
AND DATE BETWEEN '{year_start_date}' AND '{year_end_date}'
GROUP BY 1,2
"""
...@@ -69,8 +69,9 @@ class CustomReportHandler: ...@@ -69,8 +69,9 @@ class CustomReportHandler:
if input_json[each_blocks][CommonConstants.QUERY]: if input_json[each_blocks][CommonConstants.QUERY]:
for each_kpi in input_json[each_blocks][CommonConstants.QUERY]: for each_kpi in input_json[each_blocks][CommonConstants.QUERY]:
temp_data_dict = dict() temp_data_dict = dict()
# Iterating each query for each KPI
# Iterating each query for each KPI
if input_json[each_blocks][CommonConstants.QUERY][each_kpi]:
for each_query in \ for each_query in \
input_json[each_blocks][CommonConstants.QUERY][each_kpi]: input_json[each_blocks][CommonConstants.QUERY][each_kpi]:
query = each_query. \ query = each_query. \
...@@ -82,8 +83,7 @@ class CustomReportHandler: ...@@ -82,8 +83,7 @@ class CustomReportHandler:
month_end_date=date_filter[CommonConstants.MONTH_END_DATE], month_end_date=date_filter[CommonConstants.MONTH_END_DATE],
year_start_date=date_filter[ year_start_date=date_filter[
CommonConstants.YEAR_START_DATE], CommonConstants.YEAR_START_DATE],
year_end_date=date_filter[CommonConstants.YEAR_END_DATE] year_end_date=date_filter[CommonConstants.YEAR_END_DATE])
)
response = self.postgres_db_obj.fetch_data(query=query) response = self.postgres_db_obj.fetch_data(query=query)
if response: if response:
...@@ -107,6 +107,21 @@ class CustomReportHandler: ...@@ -107,6 +107,21 @@ class CustomReportHandler:
input_json[each_blocks][CommonConstants.DATA].append(temp_data_dict) input_json[each_blocks][CommonConstants.DATA].append(temp_data_dict)
return input_json return input_json
def write_dataframe_to_excel(self, input_json, sheet_name):
"""
:param input_json:
:param sheet_name:
:return:
"""
dataframe_list = []
print(sheet_name)
# for each_blocks in input_json:
# print(each_blocks)
# dataframe = pd.DataFrame(data=input_json[each_blocks]["data"])
# dataframe.columns = input_json[each_blocks]["columns"]
# dataframe_list.append(dataframe)
def custom_report_handler(self, input_json): def custom_report_handler(self, input_json):
""" """
:param input_json: :param input_json:
...@@ -118,18 +133,30 @@ class CustomReportHandler: ...@@ -118,18 +133,30 @@ class CustomReportHandler:
try: try:
# if str(input_json.job_type).lower() == ReportType.REFINERY_REPORT: # if str(input_json.job_type).lower() == ReportType.REFINERY_REPORT:
if str(input_json["job_type"]).lower() == ReportType.REFINERY_REPORT: if str(input_json["job_type"]).lower() == ReportType.REFINERY_REPORT:
# Getting custom date range using start date and end date
date_filter = self.create_custom_date_filter(input_json=input_json) date_filter = self.create_custom_date_filter(input_json=input_json)
# with pd.ExcelWriter(path="testing.xlsx", engine="openpyxl") as excel:
# pass
for each_date_range in date_filter: for each_date_range in date_filter:
# Iterating over sterlite json file # Iterating over sterlite json file
for each_blocks in SterliteRefineryTemplate.REPORT_TEMPLATE: for each_blocks in SterliteRefineryTemplate.REPORT_TEMPLATE:
# Getting the data from queries # Getting the data from queries
each_blocks = self.get_queries_from_db( each_blocks = self.get_queries_from_db(
input_json=each_blocks, date_filter=each_date_range input_json=each_blocks, date_filter=each_date_range
) )
# print(each_blocks) print("=" * 60)
# print("=========================================") print(each_blocks)
print(SterliteRefineryTemplate.REPORT_TEMPLATE) # self.write_dataframe_to_excel(
# input_json=each_blocks,
# sheet_name=each_date_range[CommonConstants.DAY_START_DATE]
# )
break
print("@" * 100)
break break
except GeneralException as err: except GeneralException as err:
......
...@@ -15,12 +15,12 @@ class SterliteRefineryTemplate: ...@@ -15,12 +15,12 @@ class SterliteRefineryTemplate:
], ],
"query": { "query": {
"ANODE_AVAILABILITY": [ "ANODE_AVAILABILITY": [
SterliteRefineryQuery.AnodeAvailability.QUERY_AA, SterliteRefineryQuery.AnodeAvailability.QUERY_1,
SterliteRefineryQuery.AnodeAvailability.QUERY_MTD, SterliteRefineryQuery.AnodeAvailability.QUERY_2,
SterliteRefineryQuery.AnodeAvailability.QUERY_YTD, SterliteRefineryQuery.AnodeAvailability.QUERY_3,
], ],
"DO CELLS IN OPERATION": [ "DO CELLS IN OPERATION": [
SterliteRefineryQuery.DOCellsInOperation.QUERY_AA SterliteRefineryQuery.DOCellsInOperation.QUERY_1
], ],
"Total Cells In Operation": [ "Total Cells In Operation": [
SterliteRefineryQuery.TotalCellsInOperation.QUERY_1, SterliteRefineryQuery.TotalCellsInOperation.QUERY_1,
...@@ -30,19 +30,25 @@ class SterliteRefineryTemplate: ...@@ -30,19 +30,25 @@ class SterliteRefineryTemplate:
}, },
"data": [], "data": [],
"data_column": [ "data_column": [
"anode_availability", "anode_availability", "uom", "norms",
"uom", "on_date", "mtd", "ytd"],
"norms",
"on_date",
"mtd",
"ytd",
],
"description": "", "description": "",
"format": "", "format": "",
}, },
"SAFETY REPORT": { "SAFETY REPORT": {
"columns": ["SAFETY REPORT", "UOM", "NORMS", "ON DATE", "MTD", "YTD"], "columns": ["SAFETY REPORT", "UOM", "NORMS", "ON DATE", "MTD", "YTD"],
"query": [], "query": {
"No. of Near Miss": [
SterliteRefineryQuery.NoOfNearMiss.QUERY_1,
SterliteRefineryQuery.NoOfNearMiss.QUERY_2,
SterliteRefineryQuery.NoOfNearMiss.QUERY_3,
],
"No. of First Aid": [
SterliteRefineryQuery.NoOfFirstAid.QUERY_1,
SterliteRefineryQuery.NoOfFirstAid.QUERY_2,
SterliteRefineryQuery.NoOfFirstAid.QUERY_3,
]
},
"data": [], "data": [],
"data_column": ["safety_report", "uom", "norms", "data_column": ["safety_report", "uom", "norms",
"on_date", "mtd", "ytd"], "on_date", "mtd", "ytd"],
...@@ -61,7 +67,22 @@ class SterliteRefineryTemplate: ...@@ -61,7 +67,22 @@ class SterliteRefineryTemplate:
"MTD", "MTD",
"YTD", "YTD",
], ],
"query": [], "query": {
"Grid Power Availability": [],
"Cir 1 Avg. Rectifier Running Hrs.": [],
"Cir 2 Avg. Rectifier Running Hrs.": [],
"Power Availability to Cir-1": [],
"Power Availability to Cir-2": [],
"Power Availability to Cell House": [],
"Cir-1 40 KA Rectifier Avg. Current": [
SterliteRefineryQuery.Cir140KARectifierAvgCurrent.QUERY_1,
SterliteRefineryQuery.Cir140KARectifierAvgCurrent.QUERY_2,
SterliteRefineryQuery.Cir140KARectifierAvgCurrent.QUERY_3,
],
"Cir-2 35 KA Rectifier Avg. Current": [],
"Total Avg. Current": [],
"Current Density": []
},
"data": [], "data": [],
"data_column": ["power_availability", "uom", "data_column": ["power_availability", "uom",
"norms", "on_date", "mtd", "norms", "on_date", "mtd",
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment