Annotation: transactions.get_net_profit
CREATE OR REPLACE FUNCTION transactions.get_net_profit(_date_from date, _date_to date, _office_id integer, _factor integer, _no_provison boolean DEFAULT false)
RETURNS numeric
Information: transactions.get_net_profit
Schema | transactions |
Function Name | get_net_profit |
Arguments | _date_from date, _date_to date, _office_id integer, _factor integer, _no_provison boolean DEFAULT false |
Owner | postgres |
Result Type | numeric |
Description | |
Implementation: transactions.get_net_profit
CREATE OR REPLACE FUNCTION transactions.get_net_profit(_date_from date, _date_to date, _office_id integer, _factor integer, _no_provison boolean DEFAULT false)
RETURNS numeric
LANGUAGE plpgsql
AS $function$
DECLARE _incomes decimal(24, 4) = 0;
DECLARE _expenses decimal(24, 4) = 0;
DECLARE _profit_before_tax decimal(24, 4) = 0;
DECLARE _tax_paid decimal(24, 4) = 0;
DECLARE _tax_provison decimal(24, 4) = 0;
BEGIN
SELECT SUM(CASE tran_type WHEN 'Cr' THEN amount_in_local_currency ELSE amount_in_local_currency * -1 END)
INTO _incomes
FROM transactions.verified_transaction_mat_view
WHERE value_date >= _date_from AND value_date <= _date_to
AND account_master_id >=20100
AND account_master_id <= 20300;
SELECT SUM(CASE tran_type WHEN 'Dr' THEN amount_in_local_currency ELSE amount_in_local_currency * -1 END)
INTO _expenses
FROM transactions.verified_transaction_mat_view
WHERE value_date >= _date_from AND value_date <= _date_to
AND account_master_id >=20400
AND account_master_id <= 20701;
SELECT SUM(CASE tran_type WHEN 'Dr' THEN amount_in_local_currency ELSE amount_in_local_currency * -1 END)
INTO _tax_paid
FROM transactions.verified_transaction_mat_view
WHERE value_date >= _date_from AND value_date <= _date_to
AND account_master_id =20800;
_profit_before_tax := COALESCE(_incomes, 0) - COALESCE(_expenses, 0);
IF(_no_provison) THEN
RETURN (_profit_before_tax - COALESCE(_tax_paid, 0)) / _factor;
END IF;
_tax_provison := core.get_income_tax_provison_amount(_office_id, _profit_before_tax, COALESCE(_tax_paid, 0));
RETURN (_profit_before_tax - (COALESCE(_tax_provison, 0) + COALESCE(_tax_paid, 0))) / _factor;
END
$function$