<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog
        xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
        xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.0.xsd
        http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd">
    <changeSet id="1" author="rajan-sharma">
        <sql dbms="mysql" endDelimiter=";;" splitStatements="true" stripComments="true">
        <![CDATA[
            CREATE OR REPLACE ALGORITHM=UNDEFINED DEFINER=`theorchard`@`10.10.%` SQL SECURITY DEFINER VIEW `vw_active_vendor_contract` AS 
                SELECT
                    `vcc`.`id`      AS `vendor_contract_id`,`v`.`vendor_id` AS `vendor_id`
                        FROM ((`vendor` `v`
                            JOIN `vendor_contract` `vcc` ON ((`v`.`vendor_id` = `vcc`.`vendor_id`)))
                            LEFT JOIN `vendor_contract` `vcc2` ON ((
                                (`vcc`.`vendor_id` = `vcc2`.`vendor_id`)
                                AND (`vcc2`.`cont_start` <= NOW())
                                AND (
                                    ((`vcc2`.`contract_type` = 'per_release_term')
                                    AND ((`vcc2`.`cont_start` = '0000-00-00')
                                    OR (`vcc2`.`release_term` <= 0)
                                    OR ((`vcc2`.`cont_start` + INTERVAL `vcc2`.`release_term` MONTH) > NOW())))
                                    OR (((`vcc2`.`contract_type` <> 'per_release_term')
                                    OR ISNULL(`vcc2`.`contract_type`))
                                    AND ((`vcc2`.`cont_end` >= CURDATE())
                                    OR ISNULL(`vcc2`.`cont_end`)
                                    OR (`vcc2`.`cont_end` = '0000-00-00')))
                                )
                                AND (`vcc`.`cont_start` < `vcc2`.`cont_start`)
                            ))
                        )
                    WHERE (1
                        AND ISNULL(`vcc2`.`id`)
                        AND (`vcc`.`cont_start` <= NOW())
                        AND (((`vcc`.`contract_type` = 'per_release_term')
                        AND ((`vcc`.`cont_start` = '0000-00-00')
                        OR (`vcc`.`release_term` <= 0)
                        OR ((`vcc`.`cont_start` + INTERVAL `vcc`.`release_term` MONTH) > NOW())))
                        OR (((`vcc`.`contract_type` <> 'per_release_term')
                        OR ISNULL(`vcc`.`contract_type`))
                        AND ((`vcc`.`cont_end` >= CURDATE())
                        OR ISNULL(`vcc`.`cont_end`)
                        OR (`vcc`.`cont_end` = '0000-00-00'))))
                        AND (`v`.`status` = 'signed')
                    )
                        GROUP BY `v`.`vendor_id`;;
        ]]>
        </sql>
        <rollback>
            <![CDATA[
                CREATE OR REPLACE ALGORITHM=UNDEFINED DEFINER=`theorchard`@`10.10.%` SQL SECURITY DEFINER VIEW `vw_active_vendor_contract` AS 
                    SELECT `vcc`.`id`      AS `vendor_contract_id`,`v`.`vendor_id` AS `vendor_id`
                        FROM ((`vendor` `v`
                            JOIN `vendor_contract` `vcc` ON ((`v`.`vendor_id` = `vcc`.`vendor_id`)))
                            LEFT JOIN `vendor_contract` `vcc2` ON ((
                                (`vcc`.`vendor_id` = `vcc2`.`vendor_id`)
                                AND (`vcc2`.`cont_start` <= NOW())
                                AND (
                                    ((`vcc2`.`contract_type` = 'per_release_term')
                                    AND ((`vcc2`.`cont_start` = '0000-00-00')
                                    OR (`vcc2`.`release_term` <= 0)
                                    OR ((`vcc2`.`cont_start` + INTERVAL `vcc2`.`release_term` MONTH) > NOW())))
                                    OR (((`vcc2`.`contract_type` <> 'per_release_term')
                                    OR ISNULL(`vcc2`.`contract_type`))
                                    AND ((`vcc2`.`cont_end` >= NOW())
                                    OR ISNULL(`vcc2`.`cont_end`)
                                    OR (`vcc2`.`cont_end` = '0000-00-00')))
                                )
                                AND (`vcc`.`cont_start` < `vcc2`.`cont_start`)
                            ))
                        )
                    WHERE (1
                        AND ISNULL(`vcc2`.`id`)
                        AND (`vcc`.`cont_start` <= NOW())
                        AND (((`vcc`.`contract_type` = 'per_release_term')
                        AND ((`vcc`.`cont_start` = '0000-00-00')
                        OR (`vcc`.`release_term` <= 0)
                        OR ((`vcc`.`cont_start` + INTERVAL `vcc`.`release_term` MONTH) > NOW())))
                        OR (((`vcc`.`contract_type` <> 'per_release_term')
                        OR ISNULL(`vcc`.`contract_type`))
                        AND ((`vcc`.`cont_end` >= NOW())
                        OR ISNULL(`vcc`.`cont_end`)
                        OR (`vcc`.`cont_end` = '0000-00-00'))))
                        AND (`v`.`status` = 'signed')
                    )
                        GROUP BY `v`.`vendor_id`;;
            ]]>
        </rollback>
    </changeSet>
</databaseChangeLog>
