File: /www/exchange0old/sql/archive/2019-03-22-override_180_day_rule.sql
ALTER TABLE `debtors_detail`
ADD `override_180_day_rule` TINYINT(1) NOT NULL DEFAULT 0;
ALTER TABLE `invoice_master`
ADD `override_180_day_rule` TINYINT(1) NOT NULL DEFAULT 0;
CREATE TABLE `override_180_day_rule_history`
(
`id` INT NOT NULL AUTO_INCREMENT,
`type` VARCHAR(45) NOT NULL,
`entity_id` INT NOT NULL,
`value` TINYINT(1) NOT NULL,
`changed_by` INT NOT NULL,
`changed_at` DATETIME NOT NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE `invoice_adjustments`
(
`id` INT NOT NULL AUTO_INCREMENT,
`invoice_id` INT NOT NULL,
`adjustment_id` INT NOT NULL,
`created_by` INT NULL,
`created_at` DATETIME NOT NULL,
PRIMARY KEY (`id`)
);
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)) 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;
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;
END IF;
END$$
DELIMITER ;