File: /www/exchange2/sql/archive/2019-04-25-TK23054.sql
ALTER TABLE `organisation_details`
ADD `face_value_charge` DOUBLE(5, 3) NOT NULL DEFAULT 0;
ALTER TABLE `invoice_master`
ADD `face_value_charge_applied` BOOLEAN NOT NULL DEFAULT FALSE;
DROP FUNCTION IF EXISTS `getReserve`;
DELIMITER $$
CREATE FUNCTION `getReserve`(`expected_date` DATE,
`issue_date` DATE,
`payment_date` DATE,
`system_date` DATE,
`reserve` DOUBLE(10, 2),
`face_value` DOUBLE,
`sr` DOUBLE(4, 3),
`pp` DOUBLE(5, 3),
`trade_comission` DOUBLE(7, 4),
`override_180_day_rule` TINYINT(1),
`face_value_charge` DOUBLE(5, 3)) RETURNS decimal(20, 10)
BEGIN
SET
@edso = IFNULL(DATEDIFF(DATE(expected_date), DATE(issue_date)), 0),
@rdso =
DATEDIFF(IF(reserve IS NOT NULL AND payment_date <= system_date, payment_date, system_date),
DATE(issue_date)),
@adso = IF(@edso > @rdso, @edso, @rdso);
IF (reserve IS NOT NULL AND (system_date = CURDATE() OR system_date >= payment_date)) THEN
RETURN reserve;
ELSEIF (@adso >= 180 AND override_180_day_rule = 0) THEN
RETURN face_value * sr / 100 * 12 * (180 - @adso) / 360 - trade_comission -
face_value * face_value_charge / 100;
ELSE
RETURN face_value - face_value * sr / 100 * 12 * 180 / 360 - face_value * pp / 100 +
face_value * sr / 100 * 12 * (180 - @adso) / 360 - trade_comission -
face_value * face_value_charge / 100;
END IF;
END$$
DELIMITER ;