Commit 42b3fdfb authored by suryakant's avatar suryakant

Sterlite Custom Report Updates

parent 2cc918d3
......@@ -61,6 +61,7 @@ class ReportType:
"""
REFINERY_REPORT = "refinery_report"
REFINERY_WORKSHEET_NAME = "REFINERY DAILY PERFORMANCE REPORT"
figlet = """
......
......@@ -123,15 +123,21 @@ class CustomReportHandler:
{each_columns: None}
)
input_json[each_blocks][CommonConstants.DATA].append(temp_data_dict)
logger.info(f"Block: {input_json[each_blocks]}")
return input_json
def write_dataframe_to_excel(
self, input_json, writer, sheet_name, start_col, start_row
self,
input_json,
writer,
workbook,
sheet_name,
start_col,
start_row
):
"""
:param input_json:
:param writer:
:param workbook:
:param sheet_name:
:param start_col:
:param start_row:
......@@ -139,6 +145,7 @@ class CustomReportHandler:
"""
dataframes_list = []
logger.info("Iterating through each block to create a dataframe")
# Iterate through the categories and concatenate their data
for category, category_data in input_json.items():
data = category_data.get('data', [])
......@@ -147,13 +154,30 @@ class CustomReportHandler:
dataframes_list.append(data_frame)
# Concatenate all DataFrames vertically (along rows)
logger.info("Concatenating all dataframes to one")
result_df = pd.concat(dataframes_list, axis=1, ignore_index=False)
result_df.to_excel(
writer, sheet_name=sheet_name,
startcol=start_col, startrow=start_row,
header=True, index=False
startcol=start_col, startrow=start_row + 1,
header=False, index=False
)
return result_df.shape[0]
# Get the xlsxwriter workbook and worksheet objects.
worksheet = writer.sheets[sheet_name]
# Write the column headers with the defined format.
for col_index, value in enumerate(result_df.columns.values):
worksheet.write(
start_row, col_index, value,
workbook.add_format(
SterliteRefineryTemplate.COLUMN_HEADER_FORMAT
))
row = result_df.shape[0]
column = result_df.shape[1]
logger.info(f"Shape of current data frame is {result_df.shape}")
return row, column, worksheet
def custom_report_handler(self, input_json):
"""
......@@ -162,15 +186,18 @@ class CustomReportHandler:
"""
status = False
message = "Error generating a message"
data = CommonConstants.DATA
data = input_json["file_name"]
try:
# if str(input_json.job_type).lower() == ReportType.REFINERY_REPORT:
if str(input_json["job_type"]).lower() == ReportType.REFINERY_REPORT:
logger.info("Generating custom date filter with in the range")
# Getting custom date range using start date and end date
date_filter = self.create_custom_date_filter(input_json=input_json)
with pd.ExcelWriter("output.xlsx", engine="openpyxl") as writer:
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}")
......@@ -180,30 +207,56 @@ class CustomReportHandler:
)
start_col = CommonConstants.START_COLUMN
start_row = CommonConstants.START_ROW
total_column = 0
workbook = writer.book
sheet_name = each_date_range[
CommonConstants.DAY_START_DATE]
worksheet = None
# Iterating over sterlite json file
for each_blocks in report_template:
logger.info("Getting the data from queries")
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(f"start_row: {start_row}")
logger.info("Writing each block into excel sheet")
last_row_shape = self.write_dataframe_to_excel(
last_row, last_column, worksheet = \
self.write_dataframe_to_excel(
input_json=each_blocks,
writer=writer,
sheet_name=each_date_range[
CommonConstants.DAY_START_DATE],
workbook=workbook,
sheet_name=sheet_name,
start_col=start_col,
start_row=start_row,
)
logger.info(f"Last row number: {last_row_shape}")
start_row += last_row_shape + 2
logger.info(f"Last row: {last_row}")
logger.info(f"Last column: {last_column}")
if total_column < last_column:
total_column = last_column
start_row += last_row + 2
logger.info(f"end_row: {start_row}")
# Add a header format.
main_header_format = workbook.add_format(
SterliteRefineryTemplate.WORKSHEET_HEADER_FORMAT
)
logger.info("Creating Header for each sheet")
# (Merge Rows, Start Column, '', Total Column, Title, Format)
worksheet.merge_range(1, 0, 0, 0, sheet_name,
main_header_format)
worksheet.merge_range(1, 1, 0, total_column - 1,
ReportType.REFINERY_WORKSHEET_NAME,
main_header_format)
logger.info(f"Report completed for: {each_date_range}")
except GeneralException as err:
logger.error(f"Exception in custom_report_handler: {err}")
return status, message, data
......@@ -2,6 +2,22 @@ from scripts.core.db.postgres.custom_report_query import SterliteRefineryQuery
class SterliteRefineryTemplate:
WORKSHEET_HEADER_FORMAT = {
"bold": True,
"align": "center",
"valign": "center",
"fg_color": "#e6e7eb",
"font_color": "#1b314f",
"border": 1,
}
COLUMN_HEADER_FORMAT = {
"bold": True,
"align": "center",
"valign": "center",
"fg_color": "#e6e7eb",
"font_color": "#021b5e",
"border": 1,
}
REPORT_TEMPLATE = [
{
"ANODE AVAILABILITY": {
......@@ -32,7 +48,6 @@ class SterliteRefineryTemplate:
"data_column": [
"anode_availability", "uom", "norms",
"on_date", "mtd", "ytd"],
"format": "",
},
"SAFETY REPORT": {
"columns": ["SAFETY REPORT", "UOM", "NORMS", "ON DATE", "MTD", "YTD"],
......@@ -51,7 +66,6 @@ class SterliteRefineryTemplate:
"data": [],
"data_column": ["safety_report", "uom", "norms",
"on_date", "mtd", "ytd"],
"format": "",
},
},
{
......@@ -96,7 +110,6 @@ class SterliteRefineryTemplate:
"data_column": ["power_availability", "uom",
"norms", "on_date", "mtd",
"ytd"],
"format": "",
},
"RM ANODE RECEIPT DETAILS": {
"columns": [
......@@ -111,7 +124,6 @@ class SterliteRefineryTemplate:
"data": [],
"data_column": ["rm_anode_receipt_details", "on_date",
"mtd", "ytd", "material", "opening_stock"],
"format": "",
},
},
{
......@@ -147,7 +159,6 @@ class SterliteRefineryTemplate:
"data": [],
"data_column": ["efficiencies", "uom", "norms",
"on_date", "mtd", "ytd"],
"format": "",
},
"BANK / CROP": {
"columns": [
......@@ -161,7 +172,6 @@ class SterliteRefineryTemplate:
"data": [],
"data_column": ["bank_crop", "ce(%)", "theor_weight",
"actual_weight", "stripping_time"],
"format": "",
},
},
{
......@@ -171,14 +181,12 @@ class SterliteRefineryTemplate:
"data": [],
"data_column": ["production", "uom", "norms",
"on_date", "mtd", "ytd"],
"format": "",
},
"CIRCULATION": {
"columns": ["CIRCULATION", "CE%", "THEOR. WEIGHT", "ACTUAL WEIGHT"],
"query": [],
"data": [],
"data_column": ["circulation", "ce", "theor_weight", "actual_weight"],
"format": "",
},
},
{
......@@ -208,14 +216,12 @@ class SterliteRefineryTemplate:
},
"data": [],
"data_column": ["fg_inventory", "on_date", "mtd", "ytd"],
"format": "",
},
"PRODUCTION": {
"columns": ["PRODUCTION", "ON DATE", "MTD", "YTD"],
"query": [],
"data": [],
"data_column": ["production", "on_date", "mtd", "ytd"],
"format": "",
},
},
{
......@@ -231,7 +237,6 @@ class SterliteRefineryTemplate:
"data": [],
"data_column": ["crop", "banks", "total_cells",
"cell_voltage", "t_shorts"],
"format": "",
},
"DEPOSIT LOSS (-) / GAIN (+) DETAILS": {
"columns": [
......@@ -246,7 +251,6 @@ class SterliteRefineryTemplate:
"on_date",
"till_date"
],
"format": "",
}
},
{
......@@ -269,7 +273,6 @@ class SterliteRefineryTemplate:
"3rd_crop",
"csm_plate_rejection"
],
"format": "",
}
},
{
......@@ -286,7 +289,6 @@ class SterliteRefineryTemplate:
"data_column": [
"filter_availability", "on_date", "mtd", "filtered_volume",
"total_volume_refinery"],
"format": "",
}
},
{
......@@ -309,7 +311,6 @@ class SterliteRefineryTemplate:
"mtd",
"ytd",
],
"format": "",
},
"SPECIFIC CONSUMPTION": {
"columns": ["CONSUMABLES", "UOM", "NORMS", "ON DATE", "MTD", "YTD"],
......@@ -353,7 +354,6 @@ class SterliteRefineryTemplate:
"data": [],
"data_column": ["consumables", "uom", "norms", "on_date", "mtd",
"ytd"],
"format": "",
},
},
{
......@@ -380,14 +380,12 @@ class SterliteRefineryTemplate:
"cir_1",
"cir_2",
],
"format": "",
},
"SUSPENDED SOLIDS": {
"columns": ["SUSPENDED SOLIDS"],
"query": [],
"data": [],
"data_column": ["suspended_solids"],
"format": "",
},
},
{
......@@ -396,14 +394,12 @@ class SterliteRefineryTemplate:
"query": [],
"data": [],
"data_column": ["bleeding_section", "uom", "on_date", "mtd", "ytd"],
"format": "",
},
"BANK / CROP": {
"columns": ["BANK / CROP", "TIME", "WEIGHT (MT)", "CELLS", "READING"],
"query": [],
"data": [],
"data_column": ["bank_crop", "time", "weight", "cells", "reading"],
"format": "",
},
},
{
......@@ -419,7 +415,6 @@ class SterliteRefineryTemplate:
"department(m4)", "equipment_details",
"equipment_location", "duration",
"production", "cause"],
"format": "",
}
},
]
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