public function ajax_res_appointment()
 {
     $table = 'ea_appointments';
     $data = $_GET;
     $enum = new ReflectionClass('EAAppointmentFields');
     $dont_remove = $enum->getConstants();
     foreach ($data as $key => $rem) {
         if (!in_array($key, $dont_remove)) {
             unset($data[$key]);
         }
     }
     unset($data['action']);
     $logic = new EALogic();
     $block_time = (int) EALogic::get_option_value('block.time', 0);
     $open_slots = $logic->get_open_slots($data['location'], $data['service'], $data['worker'], $data['date'], null, true, $block_time);
     $is_free = false;
     foreach ($open_slots as $value) {
         if ($value['value'] == $data['start']) {
             $is_free = true;
             break;
         }
     }
     if (!$is_free) {
         $this->send_err_json_result('{"err":true, "message":"Slots are full"}');
     }
     $data['status'] = 'reservation';
     $service = $this->models->get_row('ea_services', $data['service']);
     $data['price'] = $service->price;
     $end_time = strtotime("{$data['start']} + {$service->duration} minute");
     $data['end'] = date('H:i', $end_time);
     $data['ip'] = $_SERVER['REMOTE_ADDR'];
     $data['session'] = session_id();
     if (!$logic->can_make_reservation($data['ip']) && !is_user_logged_in()) {
         $resp = array('err' => true, 'message' => __('Daily limit of booking request has been reached. Please contact us by email!', 'easy-appointments'));
         $this->send_err_json_result(json_encode($resp));
     }
     $response = $this->models->replace($table, $data, true);
     if ($response == false) {
         $resp = array('err' => true, 'message' => __("Something went wrong! Please try again.", 'easy-appointments'));
         $this->send_err_json_result(json_encode($resp));
     }
     $this->send_ok_json_result($response);
 }