    var webapp = angular.module('webapp', ['ngResource']);
    webapp.config(['$compileProvider', "$locationProvider", function ($compileProvider, $locationProvider) {
        $compileProvider.debugInfoEnabled(true);
        // these 2 lines fixes the #! problem
        $locationProvider.html5Mode(true);
        $locationProvider.hashPrefix("");
    }]);
    webapp.controller('table__bonus_point_history', ['$scope', '$filter', '$resource', '$sce', function($scope, $filter, $resource, $sce){

        $scope.lang = $lang;
        $scope.start = '';
        $scope.end = '';

        $scope.is_load = false;

        $scope.totalItems = 0;
        $scope.totalPage = 1;
        $scope.currentPage = 1;
        $scope.numPerPage = 6;

        $scope.orderByField = "-CREATED_DTIME__time";

        $scope.data_list = [];
        $scope.filtered_list = [];
        $scope.pagination_list = [];

        $scope.get_data = function() {

            $scope.start = $('[ng-model="start"]').val();
            $scope.end = $('[ng-model="end"]').val();

            $scope.is_load = false;

            var param = '?lang='+$scope.lang;
            if($scope.start){ param += "&start="+$scope.start; }
            if($scope.end){ param += "&end="+$scope.end; }
            var temp_ajax = $resource(null, null, 
                {
                    'list': {
                        url: '../ajax/member_bonus_point_history.php'+param, 
                        method: "get",
                        // isArray: true,
                        headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'},
                        data: "@list",
                    },
                }
            );

            $scope.data_list = temp_ajax.list($.param({}));
            $scope.data_list.$promise.then(function(){

                $scope.data_list = $scope.data_list.data.list;
                $scope.data_list = $filter("orderBy")($scope.data_list, $scope.orderByField);
                // console.log($scope.data_list);

                if($scope.data_list != null){ $scope.totalItems = $scope.data_list.length; } else { $scope.totalItems = 0; }
                $scope.totalPage = Math.ceil($scope.totalItems / $scope.numPerPage);
                
                $scope.changePage(1);

                $scope.is_load = true;
            }, function(error) {
                alert('server error');
                console.log(error);
                $scope.is_load = true;
            });
        }

        $scope.clear_filter = function() {
            $scope.start = '';
            $scope.end = '';
            $("[ng-controller = \"table__bonus_point_history\"] [ng-model=\"start\"]")[0].datepicker.rangepicker.setDates({"clear": true});
            $scope.get_data();
        }

        $scope.nextPage = function() {
            var curr = $scope.currentPage;
            var max = $scope.totalPage;

            var next_page = ((curr+1) <= max)?(curr+1):max;
            $scope.changePage(next_page);
        }

        $scope.prevPage = function() {
            var curr = $scope.currentPage;
            var max = $scope.totalPage;

            var prev_page = ((curr-1) >= 1)?(curr-1):1;
            $scope.changePage(prev_page);
        }

        $scope.changePage = function(curr) {
            $scope.currentPage = curr;

            var max = $scope.totalPage;
            var offset = 3;

            // var prev_page = ((curr-1) >= 1)?(curr-1):1;
            // var next_page = ((curr+1) <= max)?(curr+1):max;

            var start = curr - offset - ( ((curr + offset) > max)?(offset - (max - curr) ):0 );
            var end = curr + offset + ( ((curr - offset) < 1)?(offset - curr + 1):0 );

            if(start < 1){ start = 1; }
            if(end > max){ end = max; }

            var temp = [];
            for(var i = start; i <= end; i++){
                temp.push({'page': i, 'is_curr': (i == curr)});
            }
            $scope.pagination_list = temp;

            var begin = (($scope.currentPage - 1) * $scope.numPerPage), end = begin + $scope.numPerPage;
            $scope.filtered_list = $scope.data_list.slice(begin, end);
            
            // console.log($scope.pagination_list);
            // console.log($scope.filtered_list);
        };

        $('[ng-controller = "table__bonus_point_history"] [ng-model="start"]').on("changeDate", function (evt) {
            $scope.start = evt.target.value;
        })
        $('[ng-controller = "table__bonus_point_history"] [ng-model="end"]').on("changeDate", function (evt) {
            $scope.end = evt.target.value;
        })

        // init
        $scope.get_data();
    }]);

    webapp.controller('table__bonus_coupon_history', ['$scope', '$filter', '$resource', '$sce', function($scope, $filter, $resource, $sce){

        $scope.lang = $lang;
        $scope.membership_no = $membership_no;
        $scope.start = '';
        $scope.end = '';

        $scope.couponOrderByField = "EXPIRY_DATE";
        $scope.packageOrderByField = "-1 * ((expired ? 1 : -1) * expiry_timestamp)";

        $scope.packageJob_is_load = false;
        $scope.packageJob_data_list = [];

        $scope.package_lightbox = function(package_id) {
            open_edit('package_job');

            var param = '?lang='+$scope.lang+'&package_id='+package_id;

            $scope.packageJob_is_load = false;

            var packageJob_ajax = $resource(null, null, 
                {
                    'list': {
                        url: '../ajax/member_package_job.php'+param, 
                        method: "get",
                        // isArray: true,
                        headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'},
                        data: "@list",
                    },
                }
            );

            $scope.packageJob_data_list = packageJob_ajax.list($.param({}));
            $scope.packageJob_data_list.$promise.then(function(){

                $scope.packageJob_data_list = $scope.packageJob_data_list.data.list;
                // console.log($scope.packageJob_data_list);

                $scope.packageJob_is_load = true;
            }, function(error) {
                alert('server error');
                console.log(error);
                $scope.packageJob_is_load = true;
            });
        }




        $scope.coupon_is_load = false;

        $scope.coupon_totalItems = 0;
        $scope.coupon_totalPage = 1;
        $scope.coupon_currentPage = 1;
        $scope.coupon_numPerPage = 6;

        $scope.coupon_data_list = [];
        
        $scope.coupon_filtered_list = [];
        $scope.coupon_pagination_list = [];

        $scope.package_is_load = false;

        $scope.package_totalItems = 0;
        $scope.package_totalPage = 1;
        $scope.package_currentPage = 1;
        $scope.package_numPerPage = 6;

        $scope.package_data_list = [];

        $scope.package_filtered_list = [];
        $scope.package_pagination_list = [];

        $scope.clear_filter = function() {
            $scope.start = '';
            $scope.end = '';
        }

        $scope.coupon_get_data = function() {

            $scope.start = $('[ng-model="start"]').val();
            $scope.end = $('[ng-model="end"]').val();

            var param = '?lang='+$scope.lang+'&membership_no='+$scope.membership_no;
            if($scope.start){ param += "&start="+$scope.start; }
            if($scope.end){ param += "&end="+$scope.end; }

            $scope.coupon_is_load = false;

            var coupon_ajax = $resource(null, null, 
                {
                    'list': {
                        url: '../ajax/member_coupon_history.php'+param, 
                        method: "get",
                        // isArray: true,
                        headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'},
                        data: "@list",
                    },
                }
            );

            $scope.coupon_data_list = coupon_ajax.list($.param({}));
            $scope.coupon_data_list.$promise.then(function(){

                $scope.coupon_data_list = $scope.coupon_data_list.data.list || [];
                $scope.coupon_data_list = $filter("orderBy")($scope.coupon_data_list, $scope.couponOrderByField, $scope.couponDescendingOrder);
                // console.log($scope.coupon_data_list);

                if($scope.coupon_data_list != null){ $scope.coupon_totalItems = $scope.coupon_data_list.length; } else { $scope.coupon_totalItems = 0; }
                $scope.coupon_totalPage = Math.ceil($scope.coupon_totalItems / $scope.coupon_numPerPage);
                
                $scope.coupon_changePage(1);

                $scope.coupon_is_load = true;
            }, function(error) {
                alert('server error');
                console.log(error);
                $scope.coupon_is_load = true;
            });
        }

        $scope.coupon_nextPage = function() {
            var curr = $scope.coupon_currentPage;
            var max = $scope.coupon_totalPage;

            var next_page = ((curr+1) <= max)?(curr+1):max;
            $scope.coupon_changePage(next_page);
        }

        $scope.coupon_prevPage = function() {
            var curr = $scope.coupon_currentPage;
            var max = $scope.coupon_totalPage;

            var prev_page = ((curr-1) >= 1)?(curr-1):1;
            $scope.coupon_changePage(prev_page);
        }

        $scope.coupon_changePage = function(curr) {
            $scope.coupon_currentPage = curr;

            var max = $scope.coupon_totalPage;
            var offset = 3;

            var start = curr - offset - ( ((curr + offset) > max)?(offset - (max - curr) ):0 );
            var end = curr + offset + ( ((curr - offset) < 1)?(offset - curr + 1):0 );

            if(start < 1){ start = 1; }
            if(end > max){ end = max; }

            var temp = [];
            for(var i = start; i <= end; i++){
                temp.push({'page': i, 'is_curr': (i == curr)});
            }
            $scope.coupon_pagination_list = temp;

            var begin = (($scope.coupon_currentPage - 1) * $scope.coupon_numPerPage), end = begin + $scope.coupon_numPerPage;
            $scope.coupon_filtered_list = $scope.coupon_data_list.slice(begin, end);
        };
        // package

        $scope.package_get_data = function() {

            $scope.start = $('[ng-model="start"]').val();
            $scope.end = $('[ng-model="end"]').val();

            var param = '?lang='+$scope.lang+'&membership_no='+$scope.membership_no;
            if($scope.start){ param += "&start="+$scope.start; }
            if($scope.end){ param += "&end="+$scope.end; }

            $scope.package_is_load = false;

            var package_ajax = $resource(null, null, 
                {
                    'list': {
                        url: '../ajax/member_package_history.php'+param, 
                        method: "get",
                        // isArray: true,
                        headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'},
                        data: "@list",
                    },
                }
            );

            $scope.package_data_list = package_ajax.list($.param({}));
            $scope.package_data_list.$promise.then(function(){

                $scope.package_data_list = $scope.package_data_list.data.list || [];
                $scope.package_data_list = $filter("orderBy")($scope.package_data_list, $scope.packageOrderByField, $scope.packageDescendingOrder);
                // console.log($scope.package_data_list);

                if($scope.package_data_list != null){ $scope.package_totalItems = $scope.package_data_list.length; } else { $scope.package_totalItems = 0; }
                $scope.package_totalPage = Math.ceil($scope.package_totalItems / $scope.package_numPerPage);
                
                $scope.package_changePage(1);

                $scope.package_is_load = true;
            }, function(error) {
                alert('server error');
                console.log(error);
                $scope.package_is_load = true;
            });
        }

        $scope.package_nextPage = function() {
            var curr = $scope.package_currentPage;
            var max = $scope.package_totalPage;

            var next_page = ((curr+1) <= max)?(curr+1):max;
            $scope.package_changePage(next_page);
        }

        $scope.package_prevPage = function() {
            var curr = $scope.package_currentPage;
            var max = $scope.package_totalPage;

            var prev_page = ((curr-1) >= 1)?(curr-1):1;
            $scope.package_changePage(prev_page);
        }

        $scope.package_changePage = function(curr) {
            $scope.package_currentPage = curr;

            var max = $scope.package_totalPage;
            var offset = 3;

            var start = curr - offset - ( ((curr + offset) > max)?(offset - (max - curr) ):0 );
            var end = curr + offset + ( ((curr - offset) < 1)?(offset - curr + 1):0 );

            if(start < 1){ start = 1; }
            if(end > max){ end = max; }

            var temp = [];
            for(var i = start; i <= end; i++){
                temp.push({'page': i, 'is_curr': (i == curr)});
            }
            $scope.package_pagination_list = temp;

            var begin = (($scope.package_currentPage - 1) * $scope.package_numPerPage), end = begin + $scope.package_numPerPage;
            $scope.package_filtered_list = $scope.package_data_list.slice(begin, end);
        };
        
        // init
        $scope.coupon_get_data();
        $scope.package_get_data();
    }]);

    /*
    webapp.controller('table__e_dollar_history', ['$scope', '$filter', '$resource', '$sce', function($scope, $filter, $resource, $sce){

        $scope.lang = $lang;
        $scope.start = '';
        $scope.end = '';

        $scope.expire_date = '';

        $scope.expire_ele = null;

        $scope.history_is_load = false;

        $scope.history_totalItems = 0;
        $scope.history_totalPage = 1;
        $scope.history_currentPage = 1;
        $scope.history_numPerPage = 6;

        $scope.amount_type_translate = [];
        $scope.history_data_list = [];
        $scope.history_data_group = [];

        $scope.history_filtered_list = [];
        $scope.history_pagination_list = [];

        $scope.clear_filter = function() {
            $scope.start = '';
            $scope.end = '';
        }


        // package

        $scope.history_get_group = function() {

            var param = '?lang='+$scope.lang;

            $scope.history_is_load = false;

            var history_ajax = $resource(null, null, 
                {
                    'list': {
                        url: '../ajax/member_edollar_group.php'+param, 
                        method: "get",
                        // isArray: true,
                        headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'},
                        data: "@list",
                    },
                }
            );

            $scope.history_data_group = history_ajax.list($.param({}));
            $scope.history_data_group.$promise.then(function(){

                $scope.history_data_group = $scope.history_data_group.data;

                $scope.history_is_load = true;

                if($scope.history_data_group.length > 0){
                    // $scope.changeGroup($scope.history_data_group[0]);
                    $scope.expire_date = $scope.history_data_group[0].expire_date;
                }

            }, function(error) {
                alert('server error');
                console.log(error);
                $scope.history_is_load = true;
            });
        }

        $scope.history_get_data = function() {

            $scope.start = $('[ng-model="start"]').val();
            $scope.end = $('[ng-model="end"]').val();

            var param = '?lang='+$scope.lang;
            if($scope.start){ param += "&start="+$scope.start; }
            if($scope.end){ param += "&end="+$scope.end; }
            if($scope.expire_date){ param += "&expire_date="+$scope.expire_date; }

            $scope.history_is_load = false;

            var history_ajax = $resource(null, null, 
                {
                    'list': {
                        url: '../ajax/member_edollar_history.php'+param, 
                        method: "get",
                        // isArray: true,
                        headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'},
                        data: "@list",
                    },
                }
            );

            $scope.history_data_list = history_ajax.list($.param({}));
            $scope.history_data_list.$promise.then(function(){

                $scope.amount_type_translate = $scope.history_data_list.data.amount_type_translate;

                $scope.history_data_list = $scope.history_data_list.data.list;

                if($scope.history_data_list != null){ $scope.history_totalItems = $scope.history_data_list.length; } else { $scope.history_totalItems = 0; }
                $scope.history_totalPage = Math.ceil($scope.history_totalItems / $scope.history_numPerPage);
                
                $scope.history_changePage(1);

                $scope.history_is_load = true;
            }, function(error) {
                alert('server error');
                console.log(error);
                $scope.history_is_load = true;
            });
        }

        $scope.history_nextPage = function() {
            var curr = $scope.history_currentPage;
            var max = $scope.history_totalPage;

            var next_page = ((curr+1) <= max)?(curr+1):max;
            $scope.history_changePage(next_page);
        }

        $scope.history_prevPage = function() {
            var curr = $scope.history_currentPage;
            var max = $scope.history_totalPage;

            var prev_page = ((curr-1) >= 1)?(curr-1):1;
            $scope.history_changePage(prev_page);
        }

        $scope.history_changePage = function(curr) {
            $scope.history_currentPage = curr;

            var max = $scope.history_totalPage;
            var offset = 3;

            var start = curr - offset - ( ((curr + offset) > max)?(offset - (max - curr) ):0 );
            var end = curr + offset + ( ((curr - offset) < 1)?(offset - curr + 1):0 );

            if(start < 1){ start = 1; }
            if(end > max){ end = max; }

            var temp = [];
            for(var i = start; i <= end; i++){
                temp.push({'page': i, 'is_curr': (i == curr)});
            }
            $scope.history_pagination_list = temp;

            var begin = (($scope.history_currentPage - 1) * $scope.history_numPerPage), end = begin + $scope.history_numPerPage;
            $scope.history_filtered_list = $scope.history_data_list.slice(begin, end);
        };
        
        $scope.direaction_color = function(direaction) {
            let direaction_color = '';
            if(direaction == 'plus') {
                direaction_color = 'green';
            } else if(direaction == 'minus') {
                direaction_color = 'red';
            }

            return { color: direaction_color, 'font-weight': 800 };
        }

        $scope.direaction_symbol = function(direaction) {
            let direaction_symbol = '';
            if(direaction == 'plus') {
                direaction_symbol = '+';
            } else if(direaction == 'minus') {
                direaction_symbol = '-';
            }

            return direaction_symbol;
        }

        $scope.changeGroup = function() {
            // $scope.expire_date = group.expire_date;
            $scope.expire_ele = null;

            if($scope.expire_date != ''){
                $scope.history_data_group.forEach(function(val){
                    if($scope.expire_date == val.expire_date){
                        $scope.expire_ele = val;
                    }
                })
    
                $scope.history_get_data();
            }
        }

        $scope.$watch("expire_date", function(newValue, oldValue) {
            $scope.changeGroup();
        })

        $scope.group_active = function(group) {
            return { 'is_active': $scope.expire_date == group.expire_date };
        }

        $scope.convert_amount_type = function(amount_type) {
            return $scope.amount_type_translate[amount_type];
        }

        // init
        //$scope.history_get_group();
    }]);
    */
// vim:ts=8:sw=4:sts=4:et:noeol:nofixeol