BEGIN DECLARE calendar_year INT; DECLARE month_name VARCHAR(8); DECLARE yearTab VARCHAR(11); DECLARE fiscal_days INT; DECLARE org_fiscal_days INT; DECLARE cost_increase_multiplier DECIMAL(4, 3); DECLARE org_cm_diff INT; DECLARE last_diff INT; DECLARE cm_diff INT; DECLARE reporting VARCHAR(1); DECLARE closeout_date DATETIME; DECLARE student_pop INT; DECLARE avg_black_per_student INT DEFAULT 0; DECLARE avg_color_per_student INT DEFAULT 0; DECLARE test_flag VARCHAR(255); DECLARE cpc_black DECIMAL(5, 4); DECLARE cpc_color DECIMAL(5, 4); /*Timestamp formatted dates*/ DECLARE timeline_date TIMESTAMP; DECLARE startingDateFormat TIMESTAMP; DECLARE endingDateFormat TIMESTAMP; DECLARE notReportingDateFormat TIMESTAMP; DECLARE meter_created_date TIMESTAMP; /*Unix timestamps*/ DECLARE timelineDate INT; DECLARE startingDate INT; DECLARE endingDate INT; DECLARE FiscalYearEndDateUnix INT; DECLARE notReportingDate INT; DECLARE lastMeterDate INT; DECLARE closeoutDateUnix INT; DECLARE deviceCommencementDate INT; /*The raw db value w/o the value being modified conditonally.*/ DECLARE org_commencement_date_raw INT; /*The date value that starts as a raw value from the db, but can change in code based on conditions*/ DECLARE org_commencement_date INT; /*Volumes variables*/ DECLARE consumed_black INT DEFAULT 0; DECLARE consumed_color INT DEFAULT 0; DECLARE budgeted_black INT DEFAULT 0; DECLARE budgeted_color INT DEFAULT 0; DECLARE projected_black INT DEFAULT 0; DECLARE projected_color INT DEFAULT 0; DECLARE proj_blk_year_next INT DEFAULT 0; DECLARE proj_col_year_next INT DEFAULT 0; /*Costs variables*/ DECLARE consumed_black_cost DECIMAL(10, 2) DEFAULT 0; DECLARE consumed_color_cost DECIMAL(10, 2) DEFAULT 0; DECLARE budgeted_black_cost DECIMAL(10, 2) DEFAULT 0; DECLARE budgeted_color_cost DECIMAL(10, 2) DEFAULT 0; DECLARE projected_black_cost DECIMAL(10, 2) DEFAULT 0; DECLARE projected_color_cost DECIMAL(10, 2) DEFAULT 0; DECLARE proj_blk_year_next_cost DECIMAL(10, 2) DEFAULT 0; DECLARE proj_col_year_next_cost DECIMAL(10, 2) DEFAULT 0; /*Volumes totals variables*/ DECLARE consumed_black_tot INT DEFAULT 0; DECLARE consumed_color_tot INT DEFAULT 0; DECLARE budgeted_black_tot INT DEFAULT 0; DECLARE budgeted_color_tot INT DEFAULT 0; DECLARE projected_black_tot INT DEFAULT 0; DECLARE projected_color_tot INT DEFAULT 0; DECLARE proj_blk_year_next_tot INT DEFAULT 0; DECLARE proj_col_year_next_tot INT DEFAULT 0; /*Volumes costs variables*/ DECLARE consumed_black_tot_cost DECIMAL(10, 2) DEFAULT 0; DECLARE consumed_color_tot_cost DECIMAL(10, 2) DEFAULT 0; DECLARE budgeted_black_tot_cost DECIMAL(10, 2) DEFAULT 0; DECLARE budgeted_color_tot_cost DECIMAL(10, 2) DEFAULT 0; DECLARE projected_black_tot_cost DECIMAL(10, 2) DEFAULT 0; DECLARE projected_color_tot_cost DECIMAL(10, 2) DEFAULT 0; DECLARE proj_blk_year_next_tot_cost DECIMAL(10, 2) DEFAULT 0; DECLARE proj_col_year_next_tot_cost DECIMAL(10, 2) DEFAULT 0; /*These variables will be used to conditionally calculate the projected values.*/ DECLARE consumed_black_estimated INT; DECLARE consumed_black_estimated_cost DECIMAL(10, 2); DECLARE consumed_color_estimated INT; DECLARE consumed_color_estimated_cost DECIMAL(10, 2); DECLARE over_under_budget_indiv DECIMAL(10,2) DEFAULT 0; DECLARE over_under_budget_tot DECIMAL(10,2) DEFAULT 0; /*WHEN set to 1, the cursor loop will end. */ DECLARE finished INTEGER DEFAULT 0; /*BEGIN CURSOR QUERY*/ DECLARE data_cursor CURSOR FOR SELECT (CASE WHEN fpm.commencement_date IS NULL THEN org_commencement_date WHEN UNIX_TIMESTAMP(fpm.commencement_date) < org_commencement_date THEN org_commencement_date ELSE UNIX_TIMESTAMP(fpm.commencement_date) END) device_commencement_date, (CASE WHEN fpm.commencement_black_meter IS NULL THEN mtr.black_meter ELSE (mtr.black_meter - fpm.commencement_black_meter) END) consumed_black, (CASE WHEN fpm.commencement_color_meter IS NULL THEN mtr.color_meter ELSE (mtr.color_meter - fpm.commencement_color_meter) END)consumed_color, (CASE WHEN org_commencement_date_raw IS NULL THEN fpm.budgeted_black WHEN org_commencement_date_raw < startingDate THEN fpm.budgeted_black ELSE (fpm.budgeted_black / fiscal_days) * org_fiscal_days END) budgeted_black, (CASE WHEN org_commencement_date_raw IS NULL THEN fpm.budgeted_color WHEN org_commencement_date_raw < startingDate THEN fpm.budgeted_color ELSE (fpm.budgeted_color / fiscal_days) * org_fiscal_days END) budgeted_color, (SELECT SUM(student_pop) FROM y2019_buildings WHERE organizations_id = param_org) student_pop, mtr.created_date, fpm.closeout_date, fpm.cpc_black, fpm.cpc_color /*bldgs.bldg_id, bldgs.bldg_name, bldgs.student_pop, fpm.proposed_serial_number*/ from `y2019_floorplan_machines` as `fpm` inner join `y2019_floorplans` as `fp` on `fp`.`fp_id` = `fpm`.`floorplans_id` inner join `y2019_buildings` as `bldgs` on `bldgs`.`bldg_id` = `fp`.`buildings_id` left join `y2019_meters` as `mtr` on `fpm`.`proposed_serial_number` = `mtr`.`serial_number` inner join (select max(created_date) as dt, serial_number from `y2019_meters` where `created_date` >= startingDateFormat and `created_date` <= endingDateFormat and `black_meter` != 0 group by `serial_number`) as `serNumDateMetersMax` on `mtr`.`serial_number` = `serNumDateMetersMax`.`serial_number` and `mtr`.`created_date` = `serNumDateMetersMax`.`dt` /*inner join (select * from `y2019_model_details`) as `mach_data` on `fpm`.`proposed_model_id` = `mach_data`.`model_id`*/ where `fpm`.`proposed_serial_number` in (select `fm`.`proposed_serial_number` from `y2019_floorplan_machines` as `fm` inner join `y2019_floorplans` as `fp` on `fp`.`fp_id` = `fm`.`floorplans_id` inner join `y2019_buildings` as `bldgs` on `bldgs`.`bldg_id` = `fp`.`buildings_id` where `bldgs`.`organizations_id` = param_org); /*and fpm.fyer_groups_id is not null;*/ /*END CURSOR QUERY*/ /* declare NOT FOUND handler */ DECLARE CONTINUE HANDLER FOR NOT FOUND SET finished = 1; /*Set the value for the year in the timeline based on which month of the fiscal year it is. July through December will be the fiscal_year - 1. Then January through June will be the fiscal_year.*/ IF param_month <= 6 THEN SET calendar_year = fiscal_year; ELSE SET calendar_year = fiscal_year - 1; END IF; /*Set the month_name value based on the number of the param_month. This will be inserted into the table for the graph to display on the x axis.*/ CASE param_month WHEN 1 THEN SET month_name = 'January'; WHEN 2 THEN SET month_name = 'February'; WHEN 3 THEN SET month_name = 'March'; WHEN 4 THEN SET month_name = 'April'; WHEN 5 THEN SET month_name = 'May'; WHEN 6 THEN SET month_name = 'June'; WHEN 7 THEN SET month_name = 'July'; WHEN 8 THEN SET month_name = 'August'; WHEN 9 THEN SET month_name = 'September'; WHEN 10 THEN SET month_name = 'October'; WHEN 11 THEN SET month_name = 'November'; WHEN 12 THEN SET month_name = 'December'; ELSE SET month_name = 'No Month'; END CASE; /*Set the yearTab variable, which will be the prefix for the tables that are queried*/ IF YEAR(CURDATE()) = (fiscal_year) AND param_month <= 6 THEN SET yearTab = ''; ELSEIF YEAR(CURDATE()) - 1 = (fiscal_year) AND param_month > 6 THEN SET yearTab = ''; ELSE SET yearTab = concat('y20', fiscal_year, '_'); END IF; /*The time of the insertions will be Midnight on the last day of every month. Since months have differing number of days, we need to get the number of the last day depending on the month.*/ IF param_month = 2 THEN SET timeline_date = concat('20', calendar_year, '-', param_month, '-28'); ELSEIF param_month IN(4, 6, 9, 11) THEN SET timeline_date = concat('20', calendar_year, '-', param_month, '-30'); ELSE SET timeline_date = concat('20', calendar_year, '-', param_month, '-31'); END IF; SET timelineDate = UNIX_TIMESTAMP(timeline_date); SET startingDateFormat = concat('20', fiscal_year - 1, '-07-01'); SET startingDate = UNIX_TIMESTAMP(startingDateFormat); SET endingDateFormat = timeline_date; SET endingDate = timelineDate; SET FiscalYearEndDateUnix = UNIX_TIMESTAMP(concat('20' , fiscal_year, '-06-30')); SET notReportingDate = endingDate - (15*60*60*24); SET notReportingDateFormat = DATE_FORMAT(FROM_UNIXTIME(notReportingDate), '%Y/%m/%d'); SET fiscal_days = (FiscalYearEndDateUnix - startingDate) /60/60/24; IF yearTab != '' THEN select UNIX_TIMESTAMP(orgs.commencement_date) INTO org_commencement_date_raw from `org_year_specific_data` as `orgs` inner join `organizations` on `organizations`.`org_id` = `orgs`.`org_id` where `orgs`.`school_year` = fiscal_year and `orgs`.`org_id` = param_org; ELSE select UNIX_TIMESTAMP(orgs.commencement_date) INTO org_commencement_date_raw from `organizations` as `orgs` where `orgs`.`org_id` = param_org; END IF; SET org_commencement_date = org_commencement_date_raw; IF org_commencement_date_raw < startingDate THEN SET org_commencement_date = startingDate; /*changed from org_commencement_date_raw = startingDate on 6/27/2023*/ END IF; SET org_fiscal_days = CASE WHEN ((FiscalYearEndDateUnix - org_commencement_date) /60/60/24) > 365 THEN 365 ELSE (FiscalYearEndDateUnix - org_commencement_date) /60/60/24 END; SET org_cm_diff = org_fiscal_days; SET cost_increase_multiplier = 1.035; OPEN data_cursor; getData: LOOP FETCH data_cursor INTO deviceCommencementDate, consumed_black, consumed_color, budgeted_black, budgeted_color, student_pop, meter_created_date, closeout_date, cpc_black, cpc_color; IF consumed_black < 0 THEN SET consumed_black = 0; END IF; IF consumed_color < 0 THEN SET consumed_color = 0; END IF; IF budgeted_black < 0 THEN SET budgeted_black = 0; END IF; IF budgeted_color < 0 THEN SET budgeted_color = 0; ELSEIF budgeted_color IS NULL THEN SET budgeted_color = 0; END IF; /*If the commencement date of the device is less than the org_commencement_date, which may have been conditionally modified from what was originally selected from the db, then set the deviceCommencementDate to the same value as the, possibly modified, org_commencement_date.*/ IF deviceCommencementDate < org_commencement_date THEN SET deviceCommencementDate = org_commencement_date; END IF; /*Begin - Iterate through all of the conditional processing and calculations */ SET lastMeterDate = UNIX_TIMESTAMP(meter_created_date); SET last_diff = CASE WHEN lastMeterDate IS NULL THEN 1 WHEN ((lastMeterDate - deviceCommencementDate) / 60/60/24) <= 0 THEN 1 ELSE ((lastMeterDate - deviceCommencementDate) / 60/60/24) END; SET cm_diff = CASE WHEN ((endingDate - deviceCommencementDate) /60/60/24) < 0 THEN 0 ELSE ((endingDate - deviceCommencementDate) /60/60/24) END; /*SJH - Note - the notReportingDate is just 15 days earlier than the last meter read date.*/ IF meter_created_date IS NULL THEN SET reporting = 'N'; ELSEIF lastMeterDate < notReportingDate THEN SET reporting = 'N'; ELSE SET reporting = 'Y'; END IF; /*Get the device closeout_date for use in setting the projected values for machines no longer in use*/ SET closeoutDateUnix = UNIX_TIMESTAMP(closeout_date); /*Take the volumes from the resultset and multiply by the cpc values to set the cost variables. */ SET consumed_black_cost = consumed_black * cpc_black; SET consumed_color_cost = consumed_color * cpc_color; /*Added back in 6/27/23*/ IF org_commencement_date_raw IS NULL OR org_commencement_date_raw < startingDate THEN BEGIN SET budgeted_black_cost = IF(budgeted_black IS NULL, 0, budgeted_black) * cpc_black; SET budgeted_color_cost = IF(budgeted_color IS NULL, 0, budgeted_color) * cpc_color; END; ELSE SET budgeted_black_cost = IF(budgeted_black IS NULL, 0, budgeted_black) / fiscal_days * org_fiscal_days * cpc_black ; SET budgeted_color_cost = IF(budgeted_color IS NULL, 0, budgeted_color) / fiscal_days * org_fiscal_days * cpc_color; END IF; SET projected_black = CASE WHEN cm_diff = 0 THEN 0 WHEN org_commencement_date_raw IS NULL THEN (consumed_black / last_diff * 345) WHEN org_commencement_date_raw < startingDate THEN (consumed_black / last_diff * 345) ELSE (consumed_black / cm_diff * LEAST(org_fiscal_days, 345)) END; SET projected_color = CASE WHEN cm_diff = 0 THEN 0 WHEN org_commencement_date_raw IS NULL THEN (consumed_color / last_diff * 345) WHEN org_commencement_date_raw < startingDate THEN (consumed_color / last_diff * 345) ELSE (consumed_color / cm_diff * LEAST(org_fiscal_days, 345)) END; IF projected_black < 0 THEN SET projected_black = 0; END IF; IF projected_color < 0 THEN SET projected_color = 0; END IF; SET proj_blk_year_next = CASE WHEN cm_diff = 0 THEN 0 WHEN org_commencement_date_raw IS NULL THEN projected_black WHEN org_commencement_date_raw < startingDate THEN projected_black ELSE (consumed_black / cm_diff * LEAST(org_fiscal_days, 345)) END; SET proj_col_year_next = CASE WHEN cm_diff = 0 THEN 0 WHEN org_commencement_date_raw IS NULL THEN projected_color WHEN org_commencement_date_raw < startingDate THEN projected_color ELSE (consumed_color / cm_diff * LEAST(org_fiscal_days, 345)) END; IF proj_blk_year_next < 0 THEN SET proj_blk_year_next = 0; END IF; IF proj_col_year_next < 0 THEN SET proj_col_year_next = 0; END IF; SET projected_black_cost = CASE WHEN cm_diff = 0 THEN 0 WHEN org_commencement_date_raw IS NULL THEN (consumed_black_cost / last_diff * 345) WHEN org_commencement_date_raw < startingDate THEN (consumed_black_cost / last_diff * 345) ELSE (consumed_black_cost / cm_diff * LEAST(org_fiscal_days, 345)) END; SET projected_color_cost = CASE WHEN cm_diff = 0 THEN 0 WHEN org_commencement_date_raw IS NULL THEN (consumed_color_cost / last_diff * 345) WHEN org_commencement_date_raw < startingDate THEN (consumed_color_cost / last_diff * 345) ELSE (consumed_color_cost / cm_diff * LEAST(org_fiscal_days, 345)) END; IF projected_black_cost < 0 THEN SET projected_black_cost = 0; END IF; IF projected_color_cost < 0 THEN SET projected_color_cost = 0; END IF; SET proj_blk_year_next_cost = CASE WHEN cm_diff = 0 THEN 0 WHEN org_commencement_date_raw IS NULL THEN projected_black_cost * cost_increase_multiplier WHEN org_commencement_date_raw < startingDate THEN projected_black_cost * cost_increase_multiplier ELSE (consumed_black_cost / cm_diff * LEAST(org_fiscal_days, 345) * cost_increase_multiplier) END; SET proj_col_year_next_cost = CASE WHEN cm_diff = 0 THEN 0 WHEN org_commencement_date_raw IS NULL THEN projected_color_cost * cost_increase_multiplier WHEN org_commencement_date_raw < startingDate THEN projected_color_cost * cost_increase_multiplier ELSE (consumed_color_cost / cm_diff * LEAST(org_fiscal_days, 345) * cost_increase_multiplier) END; IF proj_blk_year_next_cost < 0 THEN SET proj_blk_year_next_cost = 0; END IF; IF proj_col_year_next_cost < 0 THEN SET proj_col_year_next_cost = 0; END IF; IF cm_diff > 0 THEN BEGIN SET consumed_black_estimated = (consumed_black / cm_diff * org_cm_diff); SET consumed_black_estimated_cost = consumed_black_cost / cm_diff * org_cm_diff; SET consumed_color_estimated = consumed_color / cm_diff * org_cm_diff; SET consumed_color_estimated_cost = consumed_color_cost / cm_diff * org_cm_diff; IF consumed_black_estimated < 0 THEN SET consumed_black_estimated = 0; END IF; IF consumed_black_estimated_cost < 0 THEN SET consumed_black_estimated_cost = 0; END IF; IF consumed_color_estimated < 0 THEN SET consumed_color_estimated = 0; END IF; IF consumed_color_estimated_cost < 0 THEN SET consumed_color_estimated_cost = 0; END IF; IF org_commencement_date_raw IS NULL OR org_commencement_date_raw < startingDate THEN BEGIN /*SET test_flag = concat('line 333 org_commencement_date_raw ', org_commencement_date_raw, ' < startingDate ', startingDate);*/ SET projected_black = consumed_black / last_diff * 345; SET projected_black_cost = consumed_black_estimated_cost / last_diff * 345; SET projected_color = consumed_color / last_diff * 345; SET projected_color_cost = consumed_color_estimated_cost / last_diff * 345; SET proj_blk_year_next = projected_black; SET proj_blk_year_next_cost = projected_black_cost * cost_increase_multiplier; SET proj_col_year_next = projected_color; SET proj_col_year_next_cost = projected_color_cost * cost_increase_multiplier; END; ELSE /*SET test_flag = concat('line 345 ', org_commencement_date_raw, ' !< ', startingDate);*/ SET projected_black = consumed_black / cm_diff * LEAST(org_fiscal_days, 345); SET projected_black_cost = consumed_black_estimated_cost / cm_diff * LEAST(org_fiscal_days, 345); SET projected_color = consumed_color / cm_diff * LEAST(org_fiscal_days, 345); SET projected_color_cost = consumed_color_estimated_cost / cm_diff * LEAST(org_fiscal_days, 345); SET proj_blk_year_next = consumed_black / cm_diff * LEAST(org_fiscal_days, 345); SET proj_blk_year_next_cost = consumed_black_cost / cm_diff * LEAST(org_fiscal_days, 345); SET proj_col_year_next = consumed_color / cm_diff * LEAST(org_fiscal_days, 345); SET proj_col_year_next_cost = consumed_color_cost / cm_diff * LEAST(org_fiscal_days, 345); END IF; END; ELSE SET test_flag = concat('line 429 cm_diff < 0 ', cm_diff); SET consumed_black_estimated = IF(consumed_black IS NULL, 0, consumed_black); SET consumed_black_estimated_cost = IF(consumed_black_cost IS NULL, 0, consumed_black_cost); SET consumed_color_estimated = IF(consumed_color IS NULL, 0, consumed_color); SET consumed_color_estimated_cost = IF(consumed_color_cost IS NULL, 0, consumed_color_cost); END IF; /*Do further processing for projected values*/ IF reporting = 'N' && org_fiscal_days > 0 THEN IF budgeted_black > 0 THEN IF proj_blk_year_next < (budgeted_black / org_fiscal_days * fiscal_days) THEN BEGIN SET projected_black = budgeted_black; SET proj_blk_year_next = projected_black; SET projected_black_cost = budgeted_black_cost; SET proj_blk_year_next_cost = projected_black_cost * cost_increase_multiplier; END; END IF; END IF; IF budgeted_color > 0 THEN IF proj_col_year_next < (budgeted_color / org_fiscal_days * fiscal_days) THEN BEGIN SET projected_color = budgeted_color; SET proj_col_year_next = projected_color; SET projected_color_cost = budgeted_color_cost; SET proj_col_year_next_cost = projected_color_cost * cost_increase_multiplier; END; END IF; END IF; END IF; /*If the closeout date for a device has passed then this device is no longer in use. Set the projected amounts to match the consumed amounts because the device will not add to print total. Set the projected next years volume to zero.*/ IF closeout_date IS NOT NULL && closeoutDateUnix < endingDate THEN BEGIN /*SET test_flag = concat('line398 ', consumed_black_estimated);*/ SET projected_black = consumed_black_estimated; SET projected_black_cost = consumed_black_estimated_cost; SET projected_color = consumed_color_estimated; SET projected_color_cost = consumed_color_estimated_cost; SET proj_blk_year_next = 0; SET proj_blk_year_next_cost = 0; SET proj_col_year_next = 0; SET proj_col_year_next_cost = 0; END; END IF; /*IF consumed_black < 0 THEN SET consumed_black = 0; END IF; IF consumed_color < 0 THEN SET consumed_color = 0; END IF; IF budgeted_black < 0 THEN SET budgeted_black = 0; END IF; IF budgeted_color < 0 THEN SET budgeted_color = 0; END IF; IF proj_blk_year_next < 0 THEN BEGIN SET proj_blk_year_next = 0; SET proj_blk_year_next_cost = 0; END; END IF; IF proj_col_year_next < 0 THEN BEGIN SET proj_col_year_next = 0; SET proj_col_year_next_cost = 0; END; END IF;*/ /*End - Iterate through all of the conditional processing and calculations */ /*Begin - If an org went through an upgrade, get the org_trade_out values*/ /*End - If an org went through an upgrade, get the org_trade_out values*/ /*Add the values to the totals variables after all conditional processing has been completed. */ SET consumed_black_tot = (consumed_black_tot + IF(consumed_black IS NULL, 0, consumed_black)); SET consumed_color_tot = (consumed_color_tot + IF(consumed_color IS NULL, 0, consumed_color)); SET budgeted_black_tot = (budgeted_black_tot + IF(budgeted_black IS NULL, 0, budgeted_black)); SET budgeted_color_tot = (budgeted_color_tot + IF(budgeted_color IS NULL, 0, budgeted_color)); SET projected_black_tot = (projected_black_tot + IF(projected_black IS NULL, 0, projected_black)); SET projected_color_tot = (projected_color_tot + IF(projected_color IS NULL, 0, projected_color)); SET proj_blk_year_next_tot = (proj_blk_year_next_tot + IF(proj_blk_year_next IS NULL, 0, proj_blk_year_next)); SET proj_col_year_next_tot = (proj_col_year_next_tot + IF(proj_col_year_next IS NULL, 0, proj_col_year_next)); SET consumed_black_tot_cost = (consumed_black_tot_cost + IF(consumed_black_cost IS NULL, 0, consumed_black_cost)); SET consumed_color_tot_cost = (consumed_color_tot_cost + IF(consumed_color_cost IS NULL, 0, consumed_color_cost)); SET budgeted_black_tot_cost = (budgeted_black_tot_cost + IF(budgeted_black_cost IS NULL, 0, budgeted_black_cost)); SET budgeted_color_tot_cost = (budgeted_color_tot_cost + IF(budgeted_color_cost IS NULL, 0, budgeted_color_cost)); SET projected_black_tot_cost = (projected_black_tot_cost + IF(projected_black_cost IS NULL, 0, projected_black_cost)); SET projected_color_tot_cost = (projected_color_tot_cost + IF(projected_color_cost IS NULL, 0, projected_color_cost)); SET proj_blk_year_next_tot_cost = (proj_blk_year_next_tot_cost + IF(proj_blk_year_next_cost IS NULL, 0, proj_blk_year_next_cost)); SET proj_col_year_next_tot_cost = (proj_col_year_next_tot_cost + IF(proj_col_year_next_cost IS NULL, 0, proj_col_year_next_cost)); /*SET over_under_budget_indiv = (projected_black_cost + projected_color_cost) - (budgeted_black_cost + budgeted_color_cost); SET over_under_budget_tot = over_under_budget_tot + over_under_budget_indiv; (projected_black_tot_cost + projected_color_tot_cost) - (budgeted_black_tot_cost + budgeted_color_tot_cost); */ IF finished = 1 THEN LEAVE getData; END IF; END LOOP getData; IF projected_black_tot_cost > 0 AND student_pop > 0 THEN SET avg_black_per_student = projected_black_tot_cost / student_pop; END IF; IF projected_color_tot_cost > 0 AND student_pop > 0 THEN SET avg_color_per_student = projected_color_tot_cost / student_pop; END IF; SET over_under_budget_tot = (projected_black_tot_cost + projected_color_tot_cost) - (budgeted_black_tot_cost + budgeted_color_tot_cost); IF over_under_budget_tot IS NULL THEN SET over_under_budget_tot = 0; END IF; /*Insert the data into the table after all records returned in the resultset have been assigned and any additional processing has been done.*/ INSERT INTO monthly_over_under_budget_test (school_year, month, organizations_id, budgeted_black, consumed_black, projected_black, avg_blk_per_student, next_years_black, budgeted_color, consumed_color, projected_color, avg_col_per_student, next_years_color, over_under_budget, created_by, modified_by) VALUES(fiscal_year, month_name, param_org, budgeted_black_tot_cost, consumed_black_tot_cost, projected_black_tot_cost, avg_black_per_student, proj_blk_year_next_tot, budgeted_color_tot_cost, consumed_color_tot_cost, projected_color_tot_cost, avg_color_per_student, proj_col_year_next_tot, over_under_budget_tot, 1271, 1271); select test_flag, last_diff, cm_diff, consumed_black_tot, consumed_color_tot, budgeted_black_tot, budgeted_color_tot, projected_black_tot, projected_color_tot, proj_blk_year_next_tot, proj_col_year_next_tot, over_under_budget_tot, consumed_black_tot_cost, consumed_color_tot_cost, budgeted_black_tot_cost, budgeted_color_tot_cost, projected_black_tot_cost, projected_color_tot_cost, proj_blk_year_next_tot_cost, proj_col_year_next_tot_cost, consumed_black_estimated, consumed_color_estimated; CLOSE data_cursor; END