public function overwriteRead($return)
 {
     $objs = $return['objs'];
     //        pr($objs);
     foreach ($objs as $obj) {
         if (isset($obj->status)) {
             if ($obj->status == "1") {
                 $obj->status = "Free";
             } else {
                 $obj->status = "Occupied";
             }
         }
         if (isset($obj->availability)) {
             if ($obj->availability == "1") {
                 $obj->availability = "Active";
             } else {
                 $obj->availability = "Inactive";
             }
         }
         if (isset($obj->id_restaurant)) {
             $resto = new MasterRestaurantModel();
             $resto->getByID($obj->id_restaurant);
             if (Generic::IsNullOrEmptyString($resto->name)) {
                 $obj->id_restaurant = "Error";
             } else {
                 $obj->id_restaurant = $resto->name;
             }
         }
     }
     return $return;
 }
 public function updateRestoMRFee()
 {
     $idsResto = Generic::mustCheck($_POST['id_restaurant'], "No Restaurant IDs Found");
     $fee = Generic::mustCheck($_POST['fee'], "No Fee Found");
     if (!is_numeric($fee)) {
         Generic::errorMsg("Fee Must Numbers");
     }
     if (doubleval($fee) > 100) {
         Generic::errorMsg("Fee Max 100%");
     }
     $ids = explode(',', $idsResto);
     if (count($ids) <= 0) {
         Generic::errorMsg("Empty Id");
     }
     $updateAll = in_array('0', $ids);
     if ($updateAll) {
         $r = new MasterRestaurantModel();
         $arrR = $r->getAll();
         foreach ($arrR as $singleR) {
             unset($resto);
             $resto = new MasterRestaurantModel();
             $resto->getByID($singleR->id_restaurant);
             $log = new LogDiscFeeModel();
             $log->id_reference = $singleR->id_restaurant;
             $log->change_type = "Fee MR";
             $log->change_from = Generic::IsNullOrEmptyString($resto->mr_fee) ? "0" : $resto->mr_fee;
             $log->change_to = $fee;
             $log->change_date_time = leap_mysqldate();
             $log->save();
             $resto->mr_fee = $fee;
             $resto->save();
         }
     } else {
         foreach ($ids as $id) {
             unset($resto);
             $resto = new MasterRestaurantModel();
             $resto->getByID($id);
             $log = new LogDiscFeeModel();
             $log->id_reference = $id;
             $log->change_type = "Fee MR";
             $log->change_from = Generic::IsNullOrEmptyString($resto->mr_fee) ? "0" : $resto->mr_fee;
             $log->change_to = $fee;
             $log->change_date_time = leap_mysqldate();
             $log->save();
             $resto->mr_fee = $fee;
             $resto->save();
         }
     }
     $json['status_code'] = 1;
     $json['status_message'] = "success";
     echo json_encode($json);
     die;
 }
 public static function saveDistrictCityFromLatLng($lat, $lng, $accId, $isCashier)
 {
     $lat = trim($lat);
     $lng = trim($lng);
     if (self::IsNullOrEmptyString($lat) || self::IsNullOrEmptyString($lng)) {
         return;
     }
     $url = "https://maps.googleapis.com/maps/api/geocode/json?latlng={$lat},{$lng}&result_type=administrative_area_level_3&key=" . self::$geoCodingServerKey;
     $json = json_decode(file_get_contents($url), true);
     $addressComponents = $json['results'][0]['address_components'];
     if (count($addressComponents) < 2) {
         return;
     }
     $district = strtoupper($addressComponents[0]['long_name']);
     $city = strtoupper($addressComponents[1]['long_name']);
     $loc = new LocationModel();
     $arrLoc = $loc->getWhere("district='{$district}' AND city='{$city}'");
     if (count($arrLoc) == 0) {
         $l = new LocationModel();
         $l->district = $district;
         $l->city = $city;
         if ($isCashier) {
             $l->cashier_visit_count = 1;
             $l->user_visit_count = 0;
         } else {
             $l->cashier_visit_count = 0;
             $l->user_visit_count = 1;
         }
         $l->visit_count = 1;
         $l->save();
     } else {
         $l = new LocationModel();
         $l->getByID($arrLoc[0]->id_location);
         if ($isCashier) {
             $l->cashier_visit_count = $l->cashier_visit_count + 1;
         } else {
             $l->user_visit_count = $l->user_visit_count + 1;
         }
         $l->save();
     }
     if ($accId != 0 && !$isCashier) {
         $user = new UserModel();
         $user->getByID($accId);
         $user->last_lat = $lat;
         $user->last_long = $lng;
         $user->last_city = $city;
         $user->last_district = $district;
         if (Generic::IsNullOrEmptyString($user->latitude)) {
             $user->latitude = $lat;
         }
         if (Generic::IsNullOrEmptyString($user->longitude)) {
             $user->longitude = $lng;
         }
         if (Generic::IsNullOrEmptyString($user->district)) {
             $user->district = $district;
         }
         if (Generic::IsNullOrEmptyString($user->city)) {
             $user->city = $city;
         }
         $user->save();
     }
 }
 public function userUpdateProfile()
 {
     if (Efiwebsetting::getData('checkOAuth') == 'yes') {
         IMBAuth::checkOAuth();
     }
     $idUser = Generic::mustCheck($_POST['id_user'], "ID user required");
     $fullName = Generic::mustCheck($_POST['full_name'], "Empty Full Name");
     $userName = Generic::mustCheck($_POST['user_name'], "Empty User Name");
     $email = Generic::mustCheck($_POST['email'], "Empty Email");
     $password = Generic::mustCheck($_POST['pwd'], "Empty Password");
     $idCuisine = Generic::mustCheck($_POST['pref_cuisine'], "Cuisine Not Selected");
     $birthday = Generic::mustCheck($_POST['birthday'], "Empty Birthday");
     $phoneNo = Generic::mustCheck($_POST['phone_no'], "Empty Phone Number");
     $fbId = Generic::IsNullOrEmptyString($_POST['fb_id']) ? "" : $_POST['fb_id'];
     $latitude = Generic::IsNullOrEmptyString($_POST['lat']) ? "" : $_POST['lat'];
     $longitude = Generic::IsNullOrEmptyString($_POST['long']) ? "" : $_POST['long'];
     $district = Generic::IsNullOrEmptyString($_POST['district']) ? "" : $_POST['district'];
     $city = Generic::IsNullOrEmptyString($_POST['city']) ? "" : $_POST['city'];
     $pic = Generic::IsNullOrEmptyString($_POST['pic']) ? "" : MasterRestaurant::savePic($_POST['pic']);
     ///START OF LOVELY VALIDATION TIME
     if (!Generic::isValidUserName($userName)) {
         Generic::errorMsg("Username must only contains alphanumeric (and/or) \\'.\\', \\'-\\', \\'_\\'");
     }
     if (!Generic::isValidUserNameLength($userName)) {
         Generic::errorMsg("Max username length is 20");
     }
     if (!Generic::isValidEmail($email)) {
         Generic::errorMsg("Email format not valid");
     }
     if (!Generic::isValidPassword($password)) {
         Generic::errorMsg("Password must contain minimum 5 character and no whitespace");
     }
     $user = new UserModel();
     $user->getByID($idUser);
     if ($birthday != $user->birthday) {
         Generic::errorMsg("Birthday cannot be changed");
     }
     if ($userName != $user->user_name) {
         Generic::errorMsg("Username cannot be changed");
     }
     if (!Generic::IsNullOrEmptyString($user->fb_id) && $fbId != $user->fb_id) {
         Generic::errorMsg("Facebook cannot be changed");
     } else {
         $user->fb_id = $fbId;
     }
     ///END OF LOVELY VALIDATION TIME, HOW SAD :(
     $user->full_name = $fullName;
     $user->email = $email;
     $user->password = $password;
     $user->id_cuisine = $idCuisine;
     $user->phone_no = $phoneNo;
     if (!Generic::IsNullOrEmptyString($pic)) {
         $user->pic = $pic;
     }
     if (!Generic::IsNullOrEmptyString($latitude)) {
         $user->latitude = $latitude;
         $user->last_lat = $latitude;
     }
     if (!Generic::IsNullOrEmptyString($longitude)) {
         $user->longitude = $longitude;
         $user->last_long = $longitude;
     }
     if (!Generic::IsNullOrEmptyString($district)) {
         $user->district = $district;
         $user->last_district = $district;
     }
     if (!Generic::IsNullOrEmptyString($city)) {
         $user->city = $city;
         $user->last_city = $city;
     }
     $user->status = "1";
     $uid = $user->save();
     if (!$uid) {
         Generic::errorMsg("Failed Creating User");
     } else {
         $json['status_code'] = 1;
         $json['results']['fb_id'] = $user->fb_id;
         $json['results']['id_user'] = $idUser;
         $json['results']['user_name'] = $user->user_name;
         $json['results']['full_name'] = $user->full_name;
         $json['results']['email'] = $user->email;
         $json['results']['pic'] = Generic::insertImageUrl($user->pic);
         echo json_encode($json);
         die;
     }
 }
    public function createNewRestaurant()
    {
        ?>
        <style>
            .controls {
                margin-top: 10px;
                border: 1px solid transparent;
                border-radius: 2px 0 0 2px;
                box-sizing: border-box;
                -moz-box-sizing: border-box;
                height: 32px;
                outline: none;
                box-shadow: 0 2px 6px rgba(0, 0, 0, 0.3);
            }

            #pac-input {
                background-color: #fff;
                font-family: Roboto;
                font-size: 15px;
                font-weight: 300;
                margin-left: 12px;
                margin-right: 12px;
                padding: 0 11px 0 13px;
                text-overflow: ellipsis;
                width: 80%;
            }

            #pac-input:focus {
                border-color: #4d90fe;
            }

            .pac-container {
                font-family: Roboto;
            }

            #type-selector {
                color: #fff;
                background-color: #4d90fe;
                padding: 5px 11px 0px 11px;
            }

            #type-selector label {
                font-family: Roboto;
                font-size: 13px;
                font-weight: 300;
            }
        </style>
        <div class="col-sm-12">
            <h1>Create New Restaurant</h1>
        </div>

        <div id="formgroup_name" class="form-group">
            <label for="name" class=" col-sm-2 control-label">Name</label>

            <div class="col-sm-10"><input type="text" name="name" value="" id="name" class="form-control"> <span
                    class="help-block" id="warning_name"></span>
            </div>
            <div class="clearfix"></div>
        </div>

        <div id="formgroup_email" class="form-group">
            <label for="email" class=" col-sm-2 control-label">Email</label>

            <div class="col-sm-10"><input type="text" name="email" value="" id="email"
                                          class="form-control"> <span class="help-block" id="warning_email"></span>
            </div>
            <div class="clearfix"></div>
        </div>

        <div id="formgroup_phone_no" class="form-group">
            <label for="phone_no" class=" col-sm-2 control-label">Phone</label>

            <div class="col-sm-10"><input type="text" name="phone_no" value="" id="phone_no"
                                          class="form-control"> <span class="help-block" id="warning_phone_no"></span>
            </div>
            <div class="clearfix"></div>
        </div>

        <div id="formgroup_time_open" class="form-group">
            <label for="time_open" class=" col-sm-2 control-label">time_open</label>

            <div class="col-sm-10"><input type="time" name="time_open" value="" id="time_open"
                                          class="form-control"> <span class="help-block" id="warning_time_open"></span>
            </div>
            <div class="clearfix"></div>
        </div>

        <div id="formgroup_time_close" class="form-group">
            <label for="time_close" class=" col-sm-2 control-label">time_close</label>

            <div class="col-sm-10"><input type="time" name="time_close" value="" id="time_close"
                                          class="form-control"> <span class="help-block" id="warning_time_close"></span>
            </div>
            <div class="clearfix"></div>
        </div>

        <div id="formgroup_halal" class="form-group">
            <label for="halal" class=" col-sm-2 control-label">Halal</label>

            <div class="col-sm-10"><select class="form-control" name="halal" id="halal">
                    <option value="1">Yes</option>
                    <option value="0" selected="">No</option>
                </select>
                <span class="help-block" id="warning_halal"></span>
            </div>
            <div class="clearfix"></div>
        </div>

        <div id="formgroup_foto" class="form-group">
            <label for="image_logo" class=" col-sm-2 control-label">image_logo</label>

            <div class="col-sm-10">
                <div id="loaderholder_foto_old_1465962690"
                     style="position: absolute; margin-top: 30px; margin-left: 40px; display: none;"
                     class="inputfotoloader">Loading...
                </div>
                <span id="foto_1465962690">
                    <div class="foto100">
                        <img src="/images/noimage.jpg" id="holder_foto_old_1465962690"
                             onload="OnImageLoadMR(event,72,30);">
                    </div>
                        <input type="file" name="file_image_logo" id="file_foto" value="noimage.jpg">
                        <input type="hidden" name="image_logo" id="foto" value="noimage.jpg">
                </span>
                <style>
                    .inputfotoloader,
                    .inputfotoloader:before,
                    .inputfotoloader:after {
                        background: #888;
                        -webkit-animation: load1 1s infinite ease-in-out;
                        animation: load1 1s infinite ease-in-out;
                        width: 1em;
                        height: 4em;
                    }

                    .inputfotoloader:before,
                    .inputfotoloader:after {
                        position: absolute;
                        top: 0;
                        content: '';
                    }

                    .inputfotoloader:before {
                        left: -1.5em;
                    }

                    .inputfotoloader {
                        text-indent: -9999em;
                        margin: 8em auto;
                        position: relative;
                        font-size: 11px;
                        -webkit-animation-delay: -0.16s;
                        animation-delay: -0.16s;
                    }

                    .inputfotoloader:after {
                        left: 1.5em;
                        -webkit-animation-delay: -0.32s;
                        animation-delay: -0.32s;
                    }

                    @-webkit-keyframes load1 {
                        0%,
                        80%,
                        100% {
                            box-shadow: 0 0 #888;
                            height: 4em;
                        }
                        40% {
                            box-shadow: 0 -2em #888;
                            height: 5em;
                        }
                    }

                    @keyframes load1 {
                        0%,
                        80%,
                        100% {
                            box-shadow: 0 0 #888;
                            height: 4em;
                        }
                        40% {
                            box-shadow: 0 -2em #888;
                            height: 5em;
                        }
                    }

                </style>
                <script type="text/javascript">
                    var fileTypes = ['jpg', 'jpeg', 'png', 'gif', 'bmp'];  //acceptable file types

                    document.querySelector('#foto_1465962690 input[type=file]').addEventListener('change', function (event) {
                        // Read files

                        var files = event.target.files;
                        for (var i = 0; i < files.length; i++) {
                            if (files[i].type.match(/image.*/)) {
                                var reader = new FileReader();
                                var extension = files[i].name.split('.').pop().toLowerCase();
                                var isSuccess = fileTypes.indexOf(extension) > -1;
                                console.log(extension);
                                console.log(reader);
                                console.log(isSuccess);
                                if (isSuccess) {

                                    //check size
                                    if (extension == "png" || extension == "gif") {

                                        //kalau png atau gif, tidak di resize, krn we want to preserve the transparency and animations
                                        if (typeof FileReader !== "undefined") {
                                            var sizess = files[i].size;
                                            // check file size
                                            console.log(sizess);

                                        }
                                        inputFotoFiles_1465962690(event);

                                    } else {
                                        reader.onload = function (readerEvent) {
                                            var image = new Image();
                                            image.onload = function (imageEvent) {
                                                // Resize image
                                                var canvas = document.createElement('canvas'),
                                                    max_size = 1200,
                                                    width = image.width,
                                                    height = image.height;
                                                if (width > height) {
                                                    if (width > max_size) {
                                                        height *= max_size / width;
                                                        width = max_size;
                                                    }
                                                } else {
                                                    if (height > max_size) {
                                                        width *= max_size / height;
                                                        height = max_size;
                                                    }
                                                }
                                                canvas.width = width;
                                                canvas.height = height;
                                                canvas.getContext('2d').drawImage(image, 0, 0, width, height);
                                                var xhr = new XMLHttpRequest();
                                                if (xhr.upload) {

                                                    // Update progress
                                                    xhr.upload.addEventListener('progress', function (event) {
                                                        var percent = parseInt(event.loaded / event.total * 100);
                                                        $("#loaderholder_foto_old_1465962690").show();

                                                    }, false);

                                                    xhr.onreadystatechange = function (event) {
                                                        if (xhr.readyState == 4) {
                                                            if (xhr.status == 200) {
                                                                $("#loaderholder_foto_old_1465962690").hide();
                                                                var imageHtml = document.getElementById("holder_foto_old_1465962690");

                                                                imageHtml.removeAttribute("style");
                                                                imageHtml.removeAttribute("width");
                                                                imageHtml.removeAttribute("height");
                                                                imageHtml.src = '/' + 'uploads/' + xhr.responseText;
                                                                $('#foto_1465962690 #foto').val(xhr.responseText);
                                                                console.log('Image uploaded: ' + xhr.responseText);
                                                            } else {
                                                                //imageElement.parentNode.removeChild(imageElement);
                                                            }
                                                        }
                                                    }

                                                    // Start upload
                                                    xhr.open('post', '/uploader/uploadres?adafile=noimage.jpg&ext=' + extension, true);
                                                    xhr.send(canvas.toDataURL('image/' + extension));

                                                }
                                            }
                                            image.src = readerEvent.target.result;

                                        }
                                        reader.readAsDataURL(files[i]);
                                    }//else png or gif


                                }//success
                                else {
                                    alert("Please only upload image files");
                                    console.log("err type");
                                }
                            } else {
                                alert("Please only upload image files");
                                console.log("err type");
                            }
                        }

                    });

                    // Catch the form submit and upload the files
                    function inputFotoFiles_1465962690(event) {
                        files = event.target.files;
                        event.stopPropagation(); // Stop stuff happening
                        event.preventDefault(); // Totally stop stuff happening

                        // START A LOADING SPINNER HERE

                        // Create a formdata object and add the files
                        var data = new FormData();
                        $.each(files, function (key, value) {
                            data.append(key, value);
                        });
                        //console.log(data);
                        $.ajax({
                            url: '/Uploader/uploadres_ext?t=1465962690&files=1&adafile=noimage.jpg',
                            type: 'POST',
                            data: data,
                            cache: false,
                            dataType: 'json',
                            processData: false, // Don't process the files
                            contentType: false, // Set content type to false as jQuery will tell the server its a query string request
                            success: function (data, textStatus, jqXHR) {
                                // console.log(data);

                                if (data.bool) {
                                    var imageHtml = document.getElementById("holder_foto_old_1465962690");

                                    imageHtml.removeAttribute("style");
                                    imageHtml.removeAttribute("width");
                                    imageHtml.removeAttribute("height");
                                    imageHtml.src = '/' + 'uploads/' + data.filename;
                                    $('#foto_1465962690 #foto').val(data.filename);
                                    imageHtml.src = '/uploads/' + data.filename;
                                    console.log('Image uploaded: ' + data.filename);

                                } else {
                                    // Handle errors here
                                    console.log('ERRORS: ' + data.error);
                                    $("#file_repeat_foto_1465962690").show();
                                }
                            },
                            error: function (jqXHR, textStatus, errorThrown) {
                                // Handle errors here
                                console.log('ERRORS: ' + textStatus);
                                // STOP LOADING SPINNER
                            }
                        });
                    }
                </script>
                <span class="help-block" id="warning_foto"></span>
            </div>
            <div class="clearfix"></div>
        </div>


        <div id="formgroup_map" class="form-group">
            <label for="map" class=" col-sm-2 control-label">Map</label>

            <div class="col-sm-10">
                <input id="pac-input" class="controls" type="text" placeholder="Search">

                <div class="col-sm-12" id="map" style="width: 100%;height: 450px;background-color: #CCC;"></div>
                <script>
                    function setLatLong(lat, lng) {
                        var marker = new google.maps.Marker({
                            position: {lat: lat, lng: lng},
                            map: map,
                            title: $("#name").val
                        });
                        $("#latitude").val(lat);
                        $("#longitude").val(lng);
                        var url = "https://maps.googleapis.com/maps/api/geocode/json?latlng=" + lat + "," + lng + "&language=en&key=AIzaSyAjTYhXjHK4MgwGPK8UlveENUMCjgZcSZA";
                        console.log(url);
                        $.ajax({
                            method: "GET",
                            url: url
                        })
                            .done(function (msg) {
                                if (msg.results[3] == null) {
                                    $("#district").val("");
                                    $("#city").val("");
                                    $("#latitude").val("");
                                    $("#longitude").val("");
                                    alert("Cannot get exact location\nPlease zoom in and select again");
                                    return;
                                }
                                var arrComponents = msg.results[3].address_components;
//                                console.log(arrComponents);
                                $.each(arrComponents, function (jObj) {
                                    console.log(arrComponents[jObj].types[0]);
                                    if (arrComponents[jObj].types[0] == "administrative_area_level_3") {
                                        $("#district").val(arrComponents[jObj].long_name.toUpperCase());
                                    }
                                    else if (arrComponents[jObj].types[0] == "administrative_area_level_2") {
                                        $("#city").val(arrComponents[jObj].long_name.toUpperCase());
                                    }
                                });
                            });
                    }

                </script>
                <script>
                    function initAutocomplete() {
                        var map = new google.maps.Map(document.getElementById("map"), {
                            center: {lat: -6.175883636877263, lng: 106.82710647583008},
                            zoom: 13,
                            mapTypeId: google.maps.MapTypeId.ROADMAP
                        });

                        // Create the search box and link it to the UI element.
                        var input = document.getElementById("pac-input");
                        var searchBox = new google.maps.places.SearchBox(input);
                        map.controls[google.maps.ControlPosition.TOP_LEFT].push(input);

                        // Bias the SearchBox results towards current map's viewport.
                        map.addListener("bounds_changed", function () {
                            searchBox.setBounds(map.getBounds());
                        });

                        var markers = [];

                        google.maps.event.addListener(map, "click", function (event) {
                            markers.forEach(function (marker) {
                                marker.setMap(null);
                            });
                            markers = [];
                            var icon = {
                                size: new google.maps.Size(71, 71),
                                origin: new google.maps.Point(0, 0),
                                anchor: new google.maps.Point(17, 34),
                                scaledSize: new google.maps.Size(25, 25)
                            };
                            markers.push(new google.maps.Marker({
                                map: map,
                                icon: icon,
                                position: {lat: event.latLng.lat(), lng: event.latLng.lng()}
                            }));
                            setLatLong(event.latLng.lat(), event.latLng.lng());
                        });

                        // [START region_getplaces]
                        // Listen for the event fired when the user selects a prediction and retrieve
                        // more details for that place.
                        searchBox.addListener("places_changed", function () {
                            var places = searchBox.getPlaces();

                            if (places.length == 0) {
                                return;
                            }

                            // Clear out the old markers.
                            markers.forEach(function (marker) {
                                marker.setMap(null);
                            });
                            markers = [];

                            // For each place, get the icon, name and location.
                            var bounds = new google.maps.LatLngBounds();
                            places.forEach(function (place) {
//                                var icon = {
//                                    size: new google.maps.Size(71, 71),
//                                    origin: new google.maps.Point(0, 0),
//                                    anchor: new google.maps.Point(17, 34),
//                                    scaledSize: new google.maps.Size(25, 25)
//                                };
//
//                                // Create a marker for each place.
//                                markers.push(new google.maps.Marker({
//                                    map: map,
//                                    icon: icon,
//                                    title: place.name,
//                                    position: place.geometry.location
//                                }));

                                if (place.geometry.viewport) {
                                    // Only geocodes have viewport.
                                    bounds.union(place.geometry.viewport);
                                } else {
                                    bounds.extend(place.geometry.location);
                                }
                            });
                            map.fitBounds(bounds);
                        });
                        // [END region_getplaces]
                    }


                </script>
                <script
                    src="https://maps.googleapis.com/maps/api/js?key=AIzaSyAjTYhXjHK4MgwGPK8UlveENUMCjgZcSZA&libraries=places&callback=initAutocomplete"
                    async defer></script>

                <span class="help-block" id="warning_map"></span>
            </div>
            <div class="clearfix"></div>
        </div>

        <div id="formgroup_address" class="form-group">
            <label for="address" class=" col-sm-2 control-label">address</label>

            <div class="col-sm-10"><input type="text" name="address" value="" id="address"
                                          class="form-control"> <span
                    class="help-block" id="warning_address"></span>
            </div>
            <div class="clearfix"></div>
        </div>

        <div id="formgroup_district" class="form-group">
            <label for="district" class=" col-sm-2 control-label">District</label>

            <div class="col-sm-10">
                <input type="text" name="district" value="" id="district" class="form-control" disabled>
                <span class="help-block" id="warning_district"></span>
            </div>
            <div class="clearfix"></div>
        </div>

        <div id="formgroup_city" class="form-group">
            <label for="city" class=" col-sm-2 control-label">City</label>

            <div class="col-sm-10">
                <input type="text" name="city" value="" id="city" class="form-control" disabled>
                <span class="help-block" id="warning_city"></span>
            </div>
            <div class="clearfix"></div>
        </div>

        <div id="formgroup_latitude" class="form-group">
            <label for="latitude" class=" col-sm-2 control-label">Latitude</label>

            <div class="col-sm-10">
                <input type="text" name="latitude" value="" id="latitude" class="form-control" disabled>
                <span class="help-block" id="warning_latitude"></span>
            </div>
            <div class="clearfix"></div>
        </div>

        <div id="formgroup_longitude" class="form-group">
            <label for="longitude" class=" col-sm-2 control-label">Longitude</label>

            <div class="col-sm-10">
                <input type="text" name="longitude" value="" id="longitude" class="form-control" disabled>
                <span class="help-block" id="warning_longitude"></span>
            </div>
            <div class="clearfix"></div>
        </div>

        <div id="formgroup_restaurant_type" class="form-group">
            <label for="restaurant_type" class=" col-sm-2 control-label">Restaurant Type</label>

            <div class="col-sm-10"><select class="form-control" name="restaurant_type" id="restaurant_type">
                    <option value="0">Select Restaurant Type</option>
                    <?php 
        $rType = new MasterRestaurantTypeModel();
        $arrRType = $rType->getAll();
        foreach ($arrRType as $r) {
            if (Generic::IsNullOrEmptyString($r->name)) {
                continue;
            }
            ?>
                        <option value="<?php 
            echo $r->id_restaurant_type;
            ?>
"><?php 
            echo $r->name;
            ?>
</option>
                        <?php 
        }
        ?>
                </select>
                <span class="help-block" id="warning_restaurant_type"></span>
            </div>
            <div class="clearfix"></div>
        </div>

        <div id="formgroup_id_cuisine" class="form-group">
            <label for="id_cuisine" class=" col-sm-2 control-label">ID Cuisine</label>

            <div class="col-sm-10"><select class="form-control" name="id_cuisine" id="id_cuisine">
                    <option value="0">Select Cuisine</option>
                    <?php 
        $rType = new CuisineModel();
        $arrRType = $rType->getWhere("status='1'");
        foreach ($arrRType as $r) {
            if (Generic::IsNullOrEmptyString($r->name_cuisine)) {
                continue;
            }
            ?>
                        <option value="<?php 
            echo $r->id_cuisine;
            ?>
"><?php 
            echo $r->name_cuisine;
            ?>
</option>
                        <?php 
        }
        ?>
                </select>
                <span class="help-block" id="warning_id_cuisine"></span>
            </div>
            <div class="clearfix"></div>
        </div>

        <div id="formgroup_cat_choices" class="form-group">
            <label for="cat_choices" class=" col-sm-2 control-label">Categories</label>

            <div class="col-sm-8">
                <select class="form-control" name="cat_choices" id="cat_choices">
                    <option value="-1">Select Category</option>
                    <?php 
        $c = new MasterCategoryModel();
        $arrCats = $c->getWhere("status='1'");
        foreach ($arrCats as $r) {
            if (Generic::IsNullOrEmptyString($r->name)) {
                continue;
            }
            ?>
                        <option value="<?php 
            echo $r->id_category;
            ?>
"><?php 
            echo $r->name;
            ?>
</option>
                        <?php 
        }
        ?>
                </select>
                <span class="help-block" id="warning_voided"></span>
            </div>
            <div class="col-sm-2">
                <button type="button" id="button_select_cat" class="btn btn-default" style="width: 100%;">Add</button>
            </div>
            <div class="clearfix"></div>
        </div>

        <div id="formgroup_selected_cat" class="form-group">
            <label for="selected_cat" class=" col-sm-2 control-label">Selected Category</label>

            <div class="col-sm-10">
                <input type="text" name="selected_cat" id="selected_cat" class="form-control">
                <span class="help-block" id="warning_selected_cat"></span>
            </div>
            <div class="clearfix"></div>
        </div>
        <script>
            $('#button_select_cat').click(
                function () {
                    var restoChoice = $('select#cat_choices');
                    var selectedVal = restoChoice.val();
                    var selectedText = restoChoice.find('option:selected').text();
                    if (restoChoice.prop('disabled')) {
                        alert("All Restaurant Selected");
                        return;
                    }

                    if (selectedVal == '-1' || selectedVal == null || selectedVal == '') {
                        alert("Please Select Restaurant");
                        return;
                    }
                    $("select#cat_choices option:selected").remove();
                    $('#selected_cat').tokenfield();
                    $('#selected_cat').tokenfield('createToken', {value: selectedVal, label: selectedText});
                    restoChoice.val('');
                }
            );

            $('#selected_cat')
                .on('tokenfield:removedtoken', function (e) {
                    var value = e.attrs.value;
                    var label = e.attrs.label;
                    var restoChoice = $('select#cat_choices');
                    restoChoice
                        .append($("<option></option>")
                            .attr("value", value)
                            .text(label));

                    if (value == '0') {
                        restoChoice.prop("disabled", false);
                    }

                    var selectList = $('select#cat_choices option');
                    selectList.sort(function (a, b) {
                        a = a.value;
                        b = b.value;

                        return a - b;
                    });
                    restoChoice.html(selectList);
                    restoChoice.val(value);
                });

            function clearFields() {
                lwrefresh('DiscCreditCard');
            }
        </script>

        <div class="form-group">
            <div class="col-sm-12">
                <button id="submit_create_new_resto" class="btn btn-default">submit</button>
                <button id="cancel_create_new_resto" class="btn btn-default">cancel</button>
                <script>
                    $("#cancel_create_new_resto").click(function (event) {
                        event.preventDefault();
                        lwclose(window.selected_page);
                    });
                </script>
            </div>
        </div>
        <?php 
    }
 public function setRestoCategories()
 {
     if (Efiwebsetting::getData('checkOAuth') == 'yes') {
         IMBAuth::checkOAuth();
     }
     $json = array();
     $json['status_code'] = 1;
     $id_restaurant = isset($_POST['id_restaurant']) ? addslashes($_POST['id_restaurant']) : "";
     if (!$id_restaurant) {
         Generic::errorMsg("Restaurant ID not Found");
     }
     $category = isset($_POST['categories']) ? $_POST['categories'] : "";
     if (!$category) {
         Generic::errorMsg("Category ID not found!");
     }
     $resto = new MasterRestaurantModel();
     $resto->getByID($id_restaurant);
     $arrOldCategories = explode(",", $resto->id_categories);
     $jsonCategories = json_decode($category);
     $jsonCategorieshlp = array();
     foreach ($jsonCategories as $cat) {
         $jsonCategorieshlp[] = $cat->category_name;
     }
     if (!in_array("OTHERS", $jsonCategorieshlp)) {
         $jsonCategorieshlp[] = "OTHERS";
     }
     $jsonCategorieshlp = array_unique($jsonCategorieshlp);
     $objCategory = new MasterCategoryModel();
     $idCategories = array();
     foreach ($jsonCategorieshlp as $category) {
         $arrCategory = $objCategory->getWhere("name = '{$category}'");
         if (count($arrCategory) == 0 && !Generic::IsNullOrEmptyString($category)) {
             $oc = new MasterCategoryModel();
             $oc->name = strtoupper($category);
             $oc->status = "1";
             $oc->is_drink = "0";
             $oc->save();
         }
     }
     foreach ($jsonCategorieshlp as $category) {
         $arrCategory = $objCategory->getWhere("name = '{$category}'");
         foreach ($arrCategory as $val) {
             $idCategories[] = $val->id_category;
         }
     }
     //compare old categories to new categories
     //cari yang dulu ada sekarang ga ada
     //migrasi dish ke others
     $missingCategories = array_diff($arrOldCategories, $idCategories);
     foreach ($missingCategories as $category) {
         $d = new MasterDishModel();
         $arrDishes = $d->getWhere("id_category = '{$category}' AND id_restaurant = '{$id_restaurant}'");
         foreach ($arrDishes as $dish) {
             $dish->load = 1;
             $dish->id_category = "0";
             $dish->save();
         }
     }
     $objRestaurant = new MasterRestaurantModel();
     $arrResto = $objRestaurant->getWhere("id_restaurant = '{$id_restaurant}'");
     if (count($arrResto) == 0) {
         $json['status_code'] = 0;
         $json['status_message'] = "No ID Found";
         echo json_encode($json);
         die;
     }
     $idCategories = implode(",", $idCategories);
     $arrResto[0]->id_categories = $idCategories;
     $arrResto[0]->load = 1;
     $idSave = $arrResto[0]->save();
     if (!$idSave) {
         Generic::errorMsg(Lang::t('save failed'));
     } else {
         $json['status_code'] = 1;
         $json['results'] = "Success";
     }
     echo json_encode($json);
     die;
 }
 public function constraints()
 {
     $err = array();
     if (!isset($this->name)) {
         $err['name'] = Lang::t('Name cannot be empty');
     }
     if (!isset($this->address)) {
         $err['address'] = Lang::t('address cannot be empty');
     }
     if (!isset($this->district)) {
         $err['district'] = Lang::t('District cannot be empty');
     }
     if (!isset($this->city)) {
         $err['city'] = Lang::t('City cannot be empty');
     }
     if (!isset($this->email)) {
         $err['email'] = Lang::t('Email cannot be empty');
     }
     if (!isset($this->phone_no)) {
         $err['phone_no'] = Lang::t('phone no cannot be empty');
     }
     if (!isset($this->time_open)) {
         $err['time_open'] = Lang::t('Time open cannot be empty');
     }
     if (!isset($this->time_close)) {
         $err['time_close'] = Lang::t('Time Close cannot be empty');
     }
     if (!isset($this->halal)) {
         $err['halal'] = Lang::t('Halal cannot be empty');
     }
     //Set Default Values
     if (count($err) <= 0) {
         //SAVING NEW LOCATION TO Location DB
         $ll = new LocationModel();
         $arrLoc = $ll->getWhere("district='{$this->district}' AND city='{$this->city}'");
         if (count($arrLoc) <= 0) {
             $loc = new LocationModel();
             $loc->district = $this->district;
             $loc->city = $this->city;
             $loc->user_visit_count = 0;
             $loc->cashier_visit_count = 0;
             if (!Generic::IsNullOrEmptyString($this->district) && !Generic::IsNullOrEmptyString($this->city)) {
                 $loc->save();
             }
         }
         //MAKE id_categories always have 0
         if (Generic::IsNullOrEmptyString($this->id_categories)) {
             $this->id_categories;
         } else {
             $arrCats = explode(',', $this->id_categories);
             if (!in_array("0", $arrCats)) {
                 $arrCats[] = "0";
                 $this->id_categories = implode(',', $arrCats);
             }
         }
     }
     return $err;
 }
 public function responseJoinTable()
 {
     if (Efiwebsetting::getData('checkOAuth') == 'yes') {
         IMBAuth::checkOAuth();
     }
     $leaderId = $_POST["id_user"];
     $guestId = $_POST["guest_id"];
     $response = $_POST["response"];
     //O = REJECTED  --- 1 = ACCEPTED
     switch ($response) {
         case 0:
             $msg = "Your request has been rejected by table leader";
             $this->pushToUser($guestId, $msg, "", Push::$typeNormalPopUpNoAction);
             break;
         case 1:
             //TODO GET LEADER ACTIVE ORDER + ALL THIS ORDER DETAIL ORDER then ENCODE put into $j
             $order = MasterOrder::getOpenOrderbyUserID($leaderId);
             if (Generic::IsNullOrEmptyString($order[0]->user_guest_id) || trim($order[0]->user_guest_id) == ',') {
                 $order[0]->user_guest_id = $guestId;
             } else {
                 $gid = explode(",", $order[0]->user_guest_id);
                 array_push($gid, $guestId);
                 $order[0]->user_guest_id = implode(",", array_unique($gid));
             }
             $order[0]->user_count = $order[0]->user_count + 1;
             $order[0]->load = 1;
             $order[0]->save();
             $j["id_restaurant"] = $order[0]->id_restaurant;
             $j['datetime'] = date('Y-m-d H:i:s');
             //TODO ADD $guestId TO THIS ORDER
             $msg = "Your request has been accepted";
             $this->pushToUser($guestId, $msg, $j, Push::$typeAcceptJoinTable);
             break;
     }
 }
 public function updateRestoMRDiscount()
 {
     $idsResto = Generic::mustCheck($_POST['id_restaurant'], "No Restaurant IDs Found");
     $disc = Generic::mustCheck($_POST['discount'], "No Discount Found");
     if (!is_numeric($disc)) {
         Generic::errorMsg("Discount Must Numbers");
     }
     if (strlen(trim($disc)) > 2) {
         Generic::errorMsg("Discount Max 2 Digits");
     }
     $ids = explode(',', $idsResto);
     if (count($ids) <= 0) {
         Generic::errorMsg("Empty Id");
     }
     $updateAll = in_array('0', $ids);
     if ($updateAll) {
         $r = new MasterRestaurantModel();
         $arrR = $r->getAll();
         foreach ($arrR as $singleR) {
             unset($resto);
             $resto = new MasterRestaurantModel();
             $resto->getByID($singleR->id_restaurant);
             unset($logdisc);
             $logdisc = new LogDiscFeeModel();
             $logdisc->id_reference = $resto->id_restaurant;
             $logdisc->change_type = "Discount MR";
             $logdisc->change_from = Generic::IsNullOrEmptyString($resto->disc_mr) ? "0" : $resto->disc_mr;
             $logdisc->change_to = $disc;
             $logdisc->change_date_time = leap_mysqldate();
             $logdisc->save();
             $resto->disc_mr = $disc;
             $resto->save();
         }
     } else {
         foreach ($ids as $id) {
             unset($resto);
             $resto = new MasterRestaurantModel();
             $resto->getByID($id);
             unset($logdisc);
             $logdisc = new LogDiscFeeModel();
             $logdisc->id_reference = $resto->id_restaurant;
             $logdisc->change_type = "Discount MR";
             $logdisc->change_from = Generic::IsNullOrEmptyString($resto->disc_mr) ? "0" : $resto->disc_mr;
             $logdisc->change_to = $disc;
             $logdisc->change_date_time = leap_mysqldate();
             $logdisc->save();
             $resto->disc_mr = $disc;
             $resto->save();
         }
     }
     $json['status_code'] = 1;
     $json['status_message'] = "success";
     echo json_encode($json);
     die;
 }
 public function pushByLocation()
 {
     $idUsers = Generic::mustCheck($_POST['id_users'], "IDs User not Found");
     $title = Generic::mustCheck($_POST['title'], "Title not Found");
     $message = Generic::mustCheck($_POST['message'], "Message not Found");
     $image = Generic::IsNullOrEmptyString($_POST['image']) ? "" : $_POST['image'];
     if (Generic::IsNullOrEmptyString($idUsers)) {
         Generic::errorMsg("Empty IDs User");
     }
     $arrIdUser = explode(',', $idUsers);
     $results['id_users'] = $idUsers;
     $results['title'] = $title;
     $results['message'] = $message;
     $results['image'] = $image;
     $trackerModel = Util::getTrackerModelByCode(Keys::$TRACKER_PUSH);
     if (!$trackerModel) {
         Generic::errorMsg("Failed To Fetch Tracker Model");
     } else {
         $trackerModel->title = $title;
         $trackerModel->message = $message;
         $trackerModel->image = $image;
         $trackerModel->id_from = 0;
         $trackerModel->id_reference = 0;
         $trackerModel->id_to = $idUsers;
         $trackerModel->readed = "0";
         $trackerModel->answered = "1";
         $trackerModel->canceled = "0";
         $trackerModel->status = "1";
         $trackerModel->type = Push::$typeMRPushByLocation;
         $idTracker = $trackerModel->save();
     }
     foreach ($arrIdUser as $idUser) {
         //saving log
         $pLog = new MasterPushLoggerModel();
         $pLog->from_id = 0;
         $pLog->to_id = $idUser;
         $pLog->title = $title;
         $pLog->message = $message;
         //type 3 : MR to User
         $pLog->type = Push::$pushLogMRToUser;
         $pLog->push_code = Push::$typeMRPushByLocation;
         $pLog->datetime_notif = leap_mysqldate();
         $pLog->id_reference = $image;
         $pLog->status = "1";
         $pLog->save();
     }
     $_POST["ids"] = implode(',', $arrIdUser);
     $_POST["msg"] = $title;
     $_POST["json"] = $idTracker;
     //json_encode($j);
     $_POST["type"] = Push::$typeMRPushByCuisine;
     $push = new PushTo();
     $results['user_count'] = count($arrIdUser);
     $results['push'] = $push->usersMR();
     Generic::finish($results);
 }
 public function loadPaymentToken()
 {
     $idUser = Generic::mustCheck($_GET['id_user'], "ID User Required");
     $user = new UserModel();
     $user->getByID($idUser);
     if (Generic::IsNullOrEmptyString($user->id_user)) {
         Generic::errorMsg("User Not Found");
     }
     $results['payment_token'] = Generic::IsNullOrEmptyString($user->payment_token) ? "" : $user->payment_token;
     $results['payment_id'] = Generic::IsNullOrEmptyString($user->payment_id) ? "" : $user->payment_id;
     $results['payment_type'] = Generic::IsNullOrEmptyString($user->payment_type) ? "" : $user->payment_type;
     $results['has_token'] = Generic::IsNullOrEmptyString($user->payment_token) ? false : true;
     $results['default_cash'] = Generic::IsNullOrEmptyString($user->payment_type) || $user->payment_type == "0" ? true : false;
     Generic::finish($results);
 }
    public function setupMenuRevolutionFees()
    {
        $resto = new MasterRestaurantModel();
        $arrResto = $resto->getWhere("id_restaurant!='0' ORDER BY name ASC");
        ?>
        <div class="col-sm-12">
            <h1>Setup Discount Credit Card</h1>
        </div>
        <div id="formgroup_restaurant" class="form-group">
            <label for="restaurant_choices" class=" col-sm-2 control-label">restaurant</label>

            <div class="col-sm-8">
                <select class="form-control" name="restaurant_choices" id="restaurant_choices">
                    <option value="-1">Select Restaurant</option>
                    <option value="0">All Restaurant</option>
                    <?php 
        foreach ($arrResto as $r) {
            if (Generic::IsNullOrEmptyString($r->name)) {
                continue;
            }
            ?>
                        <option value="<?php 
            echo $r->id_restaurant;
            ?>
"><?php 
            echo $r->name;
            ?>
</option>
                        <?php 
        }
        ?>
                </select>
                <span class="help-block" id="warning_voided"></span>
            </div>
            <div class="col-sm-2">
                <button type="button" id="button_select_resto" class="btn btn-default" style="width: 100%;">Add</button>
            </div>

            <div class="clearfix"></div>
        </div>

        <div id="formgroup_selected_restaurant" class="form-group">
            <label for="selected_restaurant" class=" col-sm-2 control-label">selected_resto</label>

            <div class="col-sm-10">
                <input type="text" name="selected_restaurant" id="selected_restaurant" class="form-control">
                <span class="help-block" id="warning_id_user"></span>
            </div>
            <div class="clearfix"></div>
        </div>

        <div id="formgroup_discount" class="form-group">
            <label for="discount_resto_cc" class=" col-sm-2 control-label">discount</label>

            <div class="col-sm-10">
                <div class="input-group">
                    <span class="input-group-addon"> Rp.</span>
                    <input type="text" name="discount_resto_cc" value="0" id="discount_resto_cc" class="form-control">
                </div>
                <span class="help-block" id="warning_id_user"></span>
            </div>
            <div class="clearfix"></div>
        </div>

        <div class="form-group">
            <div class="col-sm-12">
                <button id="submit_button_resto_cc_disc" class="btn btn-default">submit</button>
                <button id="cancel_button_resto_cc_disc" class="btn btn-default">cancel</button>
            </div>
        </div>

        <script>
            $('#button_select_resto').click(
                function () {
                    var restoChoice = $('select#restaurant_choices');
                    var selectedVal = restoChoice.val();
                    var selectedText = restoChoice.find('option:selected').text();
                    if (restoChoice.prop('disabled')) {
                        alert("All Restaurant Selected");
                        return;
                    }

                    if (selectedVal == '-1' || selectedVal == null || selectedVal == '') {
                        alert("Please Select Restaurant");
                        return;
                    } else if (selectedVal == '0') {
                        restoChoice.prop("disabled", true);
                    }
                    $("select#restaurant_choices option:selected").remove();
                    $('#selected_restaurant').tokenfield();
                    $('#selected_restaurant').tokenfield('createToken', {value: selectedVal, label: selectedText});
                    restoChoice.val('');
                }
            );

            $('#selected_restaurant')
                .on('tokenfield:removedtoken', function (e) {
                    var value = e.attrs.value;
                    var label = e.attrs.label;
                    var restoChoice = $('select#restaurant_choices');
                    restoChoice
                        .append($("<option></option>")
                            .attr("value", value)
                            .text(label));

                    if (value == '0') {
                        restoChoice.prop("disabled", false);
                    }

                    var selectList = $('select#restaurant_choices option');
                    selectList.sort(function (a, b) {
                        a = a.value;
                        b = b.value;

                        return a - b;
                    });
                    restoChoice.html(selectList);
                    restoChoice.val(value);
                });

            $('#cancel_button_resto_cc_disc').click(function () {
                clearFields();
            });

            $('#submit_button_resto_cc_disc').click(function () {
                var arr = $('#selected_restaurant').tokenfield('getTokens');
                if (!Array.isArray(arr) || arr.length <= 0) {
                    alert("No Restaurant Selected");
                    return;
                }
                var arrValue = [];
                arr.forEach(function (e) {
                    console.log(e);
                    var value = e.value;
                    var label = e.label;
                    arrValue.push(value);
                    console.log(arrValue.join());
                });
                var disc = $('#discount_resto_cc').val();
                updateDiscountCreditCard(arrValue.join(), disc);
            });

            function updateDiscountCreditCard(values, disc) {
                $.ajax({
                    method: "POST",
                    url: _sppath + "Discount/updateRestoCCDiscount",
                    data: {id_restaurant: values, discount: disc}
                })
                    .done(function (msg) {
//                        console.log(msg);
                        var json_obj = $.parseJSON(msg);//parse JSON
                        if (json_obj.status_code == 0) {
                            alert(json_obj.status_message);
                        }
                        if (json_obj.status_code == 1) {
                            alert(json_obj.status_message);
                            clearFields();
                        }
                    });
            }

            function clearFields() {
                lwrefresh('DiscCreditCard');
                lwclose(window.selected_page);

                //clear token fields
//                var restoChoice = $('select#restaurant_choices');
//
//                var arr = $('#selected_restaurant').tokenfield('getTokens');
//                if (Array.isArray(arr) && arr.length > 0) {
//                    var arrValue = [];
//                    arr.forEach(function (e) {
//                        console.log(e);
//                        var value = e.value;
//                        var label = e.label;
//                        restoChoice
//                            .append($("<option></option>")
//                                .attr("value", value)
//                                .text(label));
//
//                    });
//
//                    var selectList = $('select#restaurant_choices option');
//                    selectList.sort(function (a, b) {
//                        a = a.value;
//                        b = b.value;
//
//                        return a - b;
//                    });
//                    restoChoice.html(selectList);
//                    restoChoice.val('-1');
//                    restoChoice.prop("disabled", false);
//                    $('#discount_resto_cc').val('0');
//                }
//                $('#selected_restaurant').tokenfield('setTokens', []);
//                $('#selected_restaurant').val('');
//                lwclose(window.selected_page);
            }
        </script>
        <?php 
    }
 public function getTodayDineInOrderByRestoId()
 {
     if (Efiwebsetting::getData('checkOAuth') == 'yes') {
         IMBAuth::checkOAuth();
     }
     $idResto = $_GET["id_restaurant"];
     $o = new MasterOrderModel();
     $arrOrder = $o->getWhere("DATE(datetime_order) >= DATE(CONVERT_TZ(NOW(),@@session.time_zone,'+07:00')) AND status_progress>='4' AND status='1' AND (type_order='0' OR type_order='1') AND order_now='1' AND id_restaurant='{$idResto}' ORDER BY id_order DESC");
     //        pr($arrOrder);
     $json["status_code"] = 1;
     $json["results"] = array();
     foreach ($arrOrder as $order) {
         //            $order = new MasterOrderModel();
         $b["id_order"] = $order->id_order;
         $b["status_progress"] = $order->status_progress;
         $b["isOut"] = false;
         if ($order->status_progress === "0") {
             $b["progress"] = "Wait";
         } elseif ($order->status_progress == "1") {
             $b["progress"] = "Cook";
         } elseif ($order->status_progress == "2" || $order->status_progress == "3") {
             $b["progress"] = "Ready";
             $b["isOut"] = true;
         } elseif ($order->status_progress == "4") {
             $b["progress"] = "Finish";
             $b["isOut"] = true;
         } elseif ($order->status_progress == "9") {
             $b["progress"] = "Voided";
             $b["isOut"] = true;
         }
         $b["status_payment"] = $order->status_payment;
         if ($order->status_payment == "1") {
             $b["isPaid"] = true;
         } else {
             $b["isPaid"] = false;
         }
         $b["type_order"] = $order->type_order;
         if ($order->type_order == "3") {
             $b["isAppOrder"] = true;
         } else {
             $b["isAppOrder"] = false;
         }
         $b["table_number"] = "0";
         if (!Generic::IsNullOrEmptyString($order->id_table) || $order->id_table != 0) {
             $table = new MasterTableModel();
             $table->getByID($order->id_table);
             $b["table_number"] = $table->table_number;
         }
         $b["datetime_order"] = $order->datetime_order;
         $b["order_number"] = $order->order_number;
         $json["results"][] = $b;
     }
     echo json_encode($json);
     die;
 }
 public function getUserDWBalance()
 {
     if (Efiwebsetting::getData('checkOAuth') == 'yes') {
         IMBAuth::checkOAuth();
     }
     if (Generic::IsNullOrEmptyString($_GET['id_user'])) {
         $results['balance'] = doubleval(0);
         Generic::finish($results);
     }
     $idUser = addslashes($_GET['id_user']);
     $user = new UserModel();
     $user->getByID($idUser);
     $results["pic"] = Generic::insertImageUrl($user->pic);
     $allowDokuWallet = Efiwebsetting::getData('App_Allow_Doku_Wallet') == 'yes';
     if (Generic::IsNullOrEmptyString($user->payment_id) || $user->payment_id == 0) {
         $results['balance'] = doubleval(0);
     } else {
         if ($allowDokuWallet) {
             $doku = new PaymentDoku();
             $results['balance'] = $doku->checkBalance($user->payment_id);
         } else {
             $results['balance'] = doubleval(0);
         }
     }
     Generic::finish($results);
 }
 public static function CalDistrictCityFromLatLng($lat, $lng)
 {
     $lat = trim($lat);
     $lng = trim($lng);
     if (Generic::IsNullOrEmptyString($lat) || Generic::IsNullOrEmptyString($lng)) {
         return;
     }
     $url = "https://maps.googleapis.com/maps/api/geocode/json?latlng={$lat},{$lng}&result_type=administrative_area_level_3&key=" . Generic::$geoCodingServerKey;
     $json = json_decode(file_get_contents($url), true);
     $addressComponents = $json['results'][0]['address_components'];
     if (count($addressComponents) < 2) {
         return;
     }
     $district = strtoupper($addressComponents[0]['long_name']);
     $city = strtoupper($addressComponents[1]['long_name']);
     $result['district'] = $district;
     $result['city'] = $city;
     return $result;
 }
 public function getCategoriesByResto()
 {
     if (Efiwebsetting::getData('checkOAuth') == 'yes') {
         IMBAuth::checkOAuth();
     }
     $idRestaurant = Generic::mustCheck($_GET['id_restaurant'], Keys::$ERR_NOT_FOUND_ID_RESTAURANT);
     $objResto = new MasterRestaurantModel();
     $objResto->getByID($idRestaurant);
     if (!Generic::IsNullOrEmptyString($objResto->id_categories)) {
         $arrCategories = explode(",", $objResto->id_categories);
     } else {
         $arrCategories = array();
     }
     $categories = array();
     foreach ($arrCategories as $idCat) {
         $c = new MasterCategoryModel();
         $c->getByID($idCat);
         if ($c->id_category) {
             $categories[] = $c->name;
         }
     }
     //        pr($arrCategories);
     //        pr($categories);
     $results['categories'] = $categories;
     $rawTags = array();
     $id_dish = isset($_GET['id_dish']) ? addslashes($_GET['id_dish']) : "";
     if ($id_dish) {
         $dish = new MasterDishModel();
         $dish->getByID($id_dish);
         $tagsIds = explode(",", $dish->dish_tags);
         if (count($tagsIds) != 0) {
             foreach ($tagsIds as $tagsId) {
                 if ($tagsId == null || $tagsId == "") {
                     continue;
                 }
                 $dishTag = new MasterDishTagModel();
                 $dishTag->getByID($tagsId);
                 $b["id_tag"] = $dishTag->id_tag;
                 $b["name"] = $dishTag->name;
                 $rawTags[] = $b;
             }
         }
     }
     $results['raw_tags'] = $rawTags;
     Generic::finish($results);
 }
 public function checkBalance($idDoku)
 {
     if (Generic::IsNullOrEmptyString($idDoku) || $idDoku == 0) {
         return doubleval(0);
     }
     if ($this->DOKU_ERROR) {
         return doubleval(0);
     }
     $this->WORDS = Util::sha1HMAC($this->getDataCheckBalance($idDoku), $this->CLIENT_SECRET);
     $params = array($this->KEY_CLIENT_ID => $this->CLIENT_ID, $this->KEY_ACCESS_TOKEN => $this->ACCESS_TOKEN, $this->KEY_ACCOUNT_ID => $idDoku, $this->KEY_WORDS => $this->WORDS);
     $results = Util::httpPost($this->API_CHECK_BALANCE, $params);
     if (Generic::IsNullOrEmptyString($results)) {
         return doubleval(0);
     }
     $json = json_decode($results);
     if (Generic::IsNullOrEmptyString($json->responseCode)) {
         return doubleval(0);
     }
     if (!in_array($json->responseCode, $this->getCodeCheckBalanceOK())) {
         return doubleval(0);
     }
     if (Generic::IsNullOrEmptyString($json->lastBalance)) {
         return doubleval(0);
     }
     return doubleval($json->lastBalance);
 }
 public static function payViaCreditCard($idOrder, $idUser = "")
 {
     $restoInitiate = Generic::IsNullOrEmptyString($idUser);
     $userInitiate = !$restoInitiate;
     $order = new MasterOrderModel();
     $order->getByID($idOrder);
     //KALO USER INITIATE CEK APA DIA LEADER
     if ($userInitiate) {
         $user = new UserModel();
         $user->getByID($idUser);
         if (!Util::isLeader($idOrder, $idUser)) {
             Generic::errorMsg(Keys::$ERR_PAYMENT_NOT_LEADER);
         }
     } else {
         $idUser = $order->id_user;
         $user = new UserModel();
         $user->getByID($idUser);
     }
     //CEK APA PEMBAYARAN PAKE CREDIT CARD
     if ($order->payment_method != Keys::$PAYMENT_TYPE_CREDIT_CARD) {
         Generic::errorMsg("This Order Not Using Credit Card as Payment Method");
     }
     Doku_Initiate::$sharedKey = "iMdRs8Iz987Z";
     Doku_Initiate::$mallId = "3199";
     $invoice = new Invoice($idOrder, true);
     $params = array('amount' => Generic::dokuMoneyValue($invoice->grandTotal), 'invoice' => $idOrder, 'currency' => '360');
     $detailOrders = $invoice->orderDetails;
     $basket = array();
     foreach ($detailOrders as $detailOrder) {
         $b = array();
         $b['name'] = $detailOrder->name_dish;
         $b['amount'] = Generic::dokuMoneyValue($detailOrder->single_price);
         $b['quantity'] = $detailOrder->quantity;
         $b['subtotal'] = Generic::dokuMoneyValue($detailOrder->price);
         $basket[] = $b;
     }
     $words = Doku_Library::doCreateWords($params);
     $customer = array('name' => $user->full_name, 'data_phone' => $user->phone_no, 'data_email' => $user->email, 'data_address' => $user->district . ',' . $user->city);
     //        $basket[] = array(
     //            'name' => 'sayur',
     //            'amount' => '10000.00',
     //            'quantity' => '1',
     //            'subtotal' => '10000.00'
     //        );
     //        $basket[] = array(
     //            'name' => 'buah',
     //            'amount' => '10000.00',
     //            'quantity' => '1',
     //            'subtotal' => '10000.00'
     //        );
     $dataPayment = array('req_mall_id' => Doku_Initiate::$mallId, 'req_chain_merchant' => 'NA', 'req_amount' => $params['amount'], 'req_words' => $words, 'req_purchase_amount' => $params['amount'], 'req_trans_id_merchant' => $params['invoice'], 'req_request_date_time' => date('YmdHis'), 'req_currency' => '360', 'req_purchase_currency' => '360', 'req_session_id' => sha1(date('YmdHis')), 'req_name' => $customer['name'], 'req_payment_channel' => '15', 'req_email' => $customer['data_email'], 'req_basket' => $basket, 'req_address' => $customer['data_address'], 'req_token_payment' => $user->payment_token, 'req_customer_id' => $idUser);
     $response = Doku_Api::doDirectPayment($dataPayment);
     if ($response->res_response_code == '0000') {
         $status = "SUCCESS";
         $order->status_payment = Keys::$PAYMENT_STATUS_PAID;
         $order->isPaid = Keys::$YES;
         $order->load = 1;
         $order->save();
         //success
         $trans = new MasterRestoTransactionModel();
         $trans->id_restaurant = $order->id_restaurant;
         $trans->id_request = $order->id_order;
         $trans->gross_amount = $invoice->grandTotal;
         $trans->type_transaction = "1";
         $trans->datetime_transaction = leap_mysqldate();
         $trans->approved = "1";
         $trans->mr_fee = $invoice->valFeeMR;
         //doubleval($order->mr_fee);//((double)($arrOrder[0]->grand_total * $resto->mr_fee)) / 100;
         //TODO LATER CHANGE 3 (BANK FEE) INTO GLOBAL VAR
         $trans->other_fee = 0;
         //((double)($arrOrder[0]->grand_total * $resto->cc_fee)) / 100;
         $trans->bank_disc = $invoice->valDiscBank;
         //doubleval($order->disc_bank);//$objOrder->disc_bank;
         $valNetAmount = doubleval($trans->gross_amount - $trans->mr_fee - $trans->other_fee + $trans->bank_disc);
         $trans->net_amount = $valNetAmount;
         $trans->save();
         //reset user credit to 0
         $user = new UserModel();
         $user->getByID($idUser);
         $user->credit = 0;
         $user->save();
     } else {
         $status = "FAILED";
     }
     $results['status'] = $status;
     $results['res_token_id'] = $user->payment_token;
     $results['invoice_no'] = $idOrder;
     $results['id_user'] = $idUser;
     $results['res_response_code'] = $response->res_response_code;
     $results['doku_results'] = $response;
     //        $results['data_payment'] = $dataPayment;
     //        pr($results);
     if ($status == "SUCCESS") {
         return array("success" => 1, $results);
     } else {
         return array("success" => 0, $results);
     }
     //        Generic::finish($results);
 }
 public function isCategoryIdValid($catId)
 {
     $mc = new MasterCategoryModel();
     $mc->getByID($catId);
     if (Generic::IsNullOrEmptyString($mc->id_category)) {
         return false;
     } else {
         return true;
     }
 }