Commit 90cf805c authored by mohammed.akhib's avatar mohammed.akhib

Merge remote-tracking branch 'origin/develop_suryakant' into develop_akhib

parents b8b780b0 c3a76ff5
......@@ -64,10 +64,12 @@ class ReportType:
REFINERY_REPORT = "refinery_report"
ACP_REPORT = "acp_report"
CCPP_REPORT = "ccpp_report"
REFINERY_WORKSHEET_NAME = "REFINERY DAILY PERFORMANCE REPORT"
ACP_WORKSHEET_NAME_1 = "VEDANTA LIMITED"
ACP_WORKSHEET_NAME_2 = "ANODE CASTING PLANT (ACP) - SHIFT INCHARGE LOG SHEET"
DATE = "DATE"
LOGO_IMAGE_PATH = "images/vedanta_sterlite_copper.png"
class PostgresConstant:
......
......@@ -242,28 +242,46 @@ class SterliteRefineryQuery:
class DOCellsInOperation:
""" ANODE AVAILABILITY """
QUERY_1 = """
SELECT
'DO Cells In Operation' AS ANODE_AVAILABILITY,
'No.' AS UOM,
MAX(CASE
WHEN LOWER(TRIM(KPI)) = 'liberator_cells_plan' THEN METRIC_VALUE END)
AS NORMS,
MAX(CASE
WHEN LOWER(TRIM(KPI)) = 'liberator_cells_actual' THEN METRIC_VALUE END)
AS ON_DATE,
MAX(CASE
WHEN LOWER(TRIM(KPI)) = 'liberator_cells_actual' THEN METRIC_VALUE END)
AS MTD,
MAX(CASE
WHEN LOWER(TRIM(KPI)) = 'liberator_cells_actual' THEN METRIC_VALUE END)
AS YTD
FROM
SEMANTIC_PROD.BANKS_CELLS_LIBERATORS_VIEW
GROUP BY
1,2
"""
SELECT
'DO Cells In Operation' AS anode_availability,
'No.' AS uom,
ROUND(AVG(CASE WHEN LOWER(TRIM(KPI)) = 'liberator_cells_plan'
THEN METRIC_VALUE END)) AS norms,
ROUND(AVG(CASE WHEN LOWER(TRIM(KPI)) = 'liberator_cells_actual'
THEN METRIC_VALUE END)) AS on_date
FROM SEMANTIC_PROD.BANKS_CELLS_LIBERATORS_VIEW
WHERE LOWER(TRIM(KPI)) in
('liberator_cells_plan', 'liberator_cells_actual')
AND DATE BETWEEN '{day_start_date}' AND '{day_end_date}'
GROUP BY 1,2
"""
QUERY_2 = """
SELECT
'DO Cells In Operation' AS anode_availability,
'No.' AS uom,
ROUND(AVG(CASE WHEN LOWER(TRIM(KPI)) = 'liberator_cells_actual'
THEN METRIC_VALUE END)) AS mtd
FROM SEMANTIC_PROD.BANKS_CELLS_LIBERATORS_VIEW
WHERE LOWER(TRIM(KPI)) in
('liberator_cells_plan', 'liberator_cells_actual')
AND DATE BETWEEN '{month_start_date}' AND '{month_end_date}'
GROUP BY 1,2
"""
QUERY_3 = """
SELECT
'DO Cells In Operation' AS anode_availability,
'No.' AS uom,
ROUND(AVG(CASE WHEN LOWER(TRIM(KPI)) = 'liberator_cells_actual'
THEN METRIC_VALUE END)) AS ytd
FROM SEMANTIC_PROD.BANKS_CELLS_LIBERATORS_VIEW
WHERE LOWER(TRIM(KPI)) in
('liberator_cells_plan', 'liberator_cells_actual')
AND DATE BETWEEN '{year_start_date}' AND '{year_end_date}'
GROUP BY 1,2
"""
class TotalCellsInOperation:
""" ANODE AVAILABILITY """
......
......@@ -448,7 +448,123 @@ class CustomReportHandler:
style=ACPReportTemplate.WORKSHEET_IMAGE_HEADER_FORMAT,
worksheet=worksheet, workbook=workbook,
)
worksheet.insert_image('A1', 'logo.png')
worksheet.insert_image('A1', ReportType.LOGO_IMAGE_PATH)
# -------- Heading Section --------
logger.info("Adding Heading in Header")
self.merge_worksheet(
start_row=0, start_col=3, end_row=1,
end_col=total_column - 1,
title=ReportType.ACP_WORKSHEET_NAME_1,
style=ACPReportTemplate.WORKSHEET_HEADER_FORMAT,
worksheet=worksheet, workbook=workbook,
)
self.merge_worksheet(
start_row=2, start_col=3,
end_row=2, end_col=total_column - 1,
title=ReportType.ACP_WORKSHEET_NAME_2,
style=ACPReportTemplate.WORKSHEET_HEADER_FORMAT,
worksheet=worksheet, workbook=workbook,
)
# -------- Date HEADER Section --------
logger.info("Adding Date time in header")
self.merge_worksheet(
start_row=3, start_col=0, end_row=3, end_col=1,
title=ReportType.DATE,
style=ACPReportTemplate.WORKSHEET_DATE_HEADER_FORMAT,
worksheet=worksheet, workbook=workbook,
)
# -------- Date Section --------
logger.info("Adding Date time in header")
self.merge_worksheet(
start_row=3, start_col=2,
end_row=3, end_col=3, title=sheet_name,
style=ACPReportTemplate.WORKSHEET_DATE_FORMAT,
worksheet=worksheet, workbook=workbook,
)
# Setting width to the column
worksheet.set_column(0, total_column,
CommonConstants.ACP_COLUMN_WIDTH)
# Hide gridlines from the excel sheet
# worksheet.hide_gridlines(2)
# Center alignment of Excel data
workbook.formats[0].set_align('center')
logger.info(f"Report completed for: {each_date_range}")
else:
logger.error("Missing: Start Date or End Date")
if str(input_json["job_type"]).lower() == ReportType.CCPP_REPORT:
logger.info("Generating custom date filter with in the range")
# Getting custom date range using start date and end date
date_flag, date_filter = self.create_custom_date_filter(
input_json=input_json
)
if date_flag:
with pd.ExcelWriter(
input_json["file_name"],
engine="xlsxwriter") as writer:
for each_date_range in date_filter:
logger.info(f"date filter: {each_date_range}")
report_template = copy.deepcopy(
ACPReportTemplate.REPORT_TEMPLATE
)
start_col = CommonConstants.START_COLUMN
start_row = CommonConstants.START_ROW
total_column = 0
workbook = writer.book
sheet_name = datetime.strptime(
each_date_range[CommonConstants.DAY_START_DATE],
"%Y-%m-%d").strftime("%d %b %Y")
worksheet = None
# Iterating over sterlite json file
for each_blocks in report_template:
logger.info("Fetching each KPI data from queries")
each_blocks = self.get_queries_from_db(
input_json=each_blocks, date_filter=each_date_range
)
logger.info("Writing each block into excel sheet")
shape, worksheet, header_flag = \
self.write_dataframe_to_excel(
input_json=each_blocks, writer=writer,
workbook=workbook, sheet_name=sheet_name,
start_col=start_col, start_row=start_row,
header_merge_format=ACPReportTemplate.COLUMN_HEADER_FORMAT,
column_merge_format=ACPReportTemplate.COLUMN_HEADER_FORMAT,
blank_merge_format=ACPReportTemplate.BLANK_COLUMN_HEADER_FORMAT
)
if total_column < shape[1]:
total_column = shape[1]
start_row += shape[0] + 3
if header_flag:
start_row += 1
logger.info("Creating Header for each sheet")
# -------- Image Section --------
logger.info("Adding Image in header")
self.merge_worksheet(
start_row=0, start_col=0, end_row=2, end_col=2,
title="",
style=ACPReportTemplate.WORKSHEET_IMAGE_HEADER_FORMAT,
worksheet=worksheet, workbook=workbook,
)
worksheet.insert_image('A1', 'vedanta_sterlite_copper.png')
# -------- Heading Section --------
logger.info("Adding Heading in Header")
......
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