cal_direct_cost_elements#

Parameters#

Name

Type

acc_table

VARCHAR(50)

cel_table

varchar(50)

SQL Definition#

CREATE PROCEDURE `cal_direct_cost_elements`(IN acc_table VARCHAR(50), IN cel_table varchar(50))
BEGIN
    DECLARE tprn DECIMAL(18,6);

        -- Calculate tprn (sum of 'prn' in the account table)
        SET @query = CONCAT('SELECT SUM(t1.prn) INTO @tprn
                             FROM ', acc_table, ' AS t1
                             LEFT JOIN ', acc_table, ' AS t2
                             ON t1.code_of_account = t2.supaccount
                             WHERE t2.code_of_account IS NULL
                             AND t1.code_of_account != ''2''
                             AND t1.code_of_account != ''2C'';');
        PREPARE stmt FROM @query;
        EXECUTE stmt;
        DEALLOCATE PREPARE stmt;

        -- Get the calculated tprn value
        SET tprn = @tprn;

        -- Select the calculated 'fac', 'lab', and 'mat' values
        SET @query = CONCAT('SELECT cost_2017 / ', tprn, ' AS fac FROM ', cel_table, '
                            WHERE account = ''2'' AND cost_element = ''2c_fac'';');
        PREPARE stmt FROM @query;
        EXECUTE stmt;
        DEALLOCATE PREPARE stmt;

        SET @query = CONCAT('SELECT cost_2017 / ', tprn, ' AS lab FROM ', cel_table, '
                            WHERE account = ''2'' AND cost_element = ''2c_lab'';');
        PREPARE stmt FROM @query;
        EXECUTE stmt;
        DEALLOCATE PREPARE stmt;

        SET @query = CONCAT('SELECT cost_2017 / ', tprn, ' AS mat FROM ', cel_table, '
                            WHERE account = ''2'' AND cost_element = ''2c_mat'';');
        PREPARE stmt FROM @query;
        EXECUTE stmt;
        DEALLOCATE PREPARE stmt;

        SET @query = CONCAT('SELECT 
            (SELECT cost_2017 / ', tprn, ' FROM ', cel_table, ' WHERE account = ''2'' AND cost_element = ''2c_fac'') AS fac,
            (SELECT cost_2017 / ', tprn, ' FROM ', cel_table, ' WHERE account = ''2'' AND cost_element = ''2c_lab'') AS lab,
            (SELECT cost_2017 / ', tprn, ' FROM ', cel_table, ' WHERE account = ''2'' AND cost_element = ''2c_mat'') AS mat;');

        PREPARE stmt FROM @query;
        EXECUTE stmt;
        DEALLOCATE PREPARE stmt;
END;;