HEX
Server: Apache/2.2.15 (CentOS)
System: Linux ip-10-0-2-146.eu-west-1.compute.internal 2.6.32-754.35.1.el6.centos.plus.x86_64 #1 SMP Sat Nov 7 11:33:42 UTC 2020 x86_64
User: root (0)
PHP: 5.6.40
Disabled: NONE
Upload Files
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 ;