From 0a2aaf50836d8135cde4f3057d5574a558e07ef7 Mon Sep 17 00:00:00 2001 From: Ahmad Gneady Date: Mon, 14 Jun 2021 17:07:35 +0200 Subject: [PATCH] As generated by AppGini 5.97 --- app/admin/getUsers.php | 2 +- app/admin/incFunctions.php | 274 +++++++++++------- app/admin/incHeader.php | 8 +- app/admin/pageBackupRestore.php | 8 +- app/admin/pageEditMember.php | 2 +- app/admin/pageMail.php | 2 +- app/admin/pageSender.php | 2 +- app/admin/pageServerStatus.php | 4 +- app/ajax-update-calculated-fields.php | 2 +- app/ajax_combo.php | 2 +- app/applicants_and_tenants_autofill.php | 2 +- app/applicants_and_tenants_dml.php | 15 +- app/applicants_and_tenants_view.php | 22 +- app/applications_leases_autofill.php | 2 +- app/applications_leases_dml.php | 33 ++- app/applications_leases_view.php | 22 +- app/checkMemberID.php | 4 +- app/cli-update-calculated-fields.php | 2 +- app/common.js | 12 +- app/datalist.php | 239 +++++++++------ app/defaultLang.php | 12 + app/dynamic.css | 5 +- ...employment_and_income_history_autofill.php | 2 +- app/employment_and_income_history_dml.php | 21 +- app/employment_and_income_history_view.php | 22 +- app/footer.php | 2 +- app/incCommon.php | 8 +- app/language.php | 92 +++--- app/lib.php | 2 +- app/membership_passwordReset.php | 2 +- app/membership_signup.php | 3 +- app/parent-children.php | 2 +- app/properties_autofill.php | 2 +- app/properties_dml.php | 21 +- app/properties_view.php | 22 +- app/property_photos_autofill.php | 2 +- app/property_photos_dml.php | 21 +- app/property_photos_view.php | 22 +- app/references_autofill.php | 2 +- app/references_dml.php | 21 +- app/references_view.php | 22 +- app/rental_owners_autofill.php | 2 +- app/rental_owners_dml.php | 15 +- app/rental_owners_view.php | 22 +- app/residence_and_rental_history_autofill.php | 2 +- app/residence_and_rental_history_dml.php | 21 +- app/residence_and_rental_history_view.php | 22 +- app/resources/lib/RememberMe.php | 16 +- .../applicants_and_tenants_templateDVP.html | 11 + .../applications_leases_templateDVP.html | 11 + ...oyment_and_income_history_templateDVP.html | 11 + app/templates/properties_templateDVP.html | 11 + .../property_photos_templateDVP.html | 11 + app/templates/references_templateDVP.html | 11 + app/templates/rental_owners_templateDVP.html | 11 + ...idence_and_rental_history_templateDVP.html | 11 + app/templates/unit_photos_templateDVP.html | 11 + app/templates/units_templateDVP.html | 11 + app/unit_photos_autofill.php | 2 +- app/unit_photos_dml.php | 21 +- app/unit_photos_view.php | 22 +- app/units_autofill.php | 2 +- app/units_dml.php | 21 +- app/units_view.php | 22 +- orpm.axp | 2 +- 65 files changed, 695 insertions(+), 574 deletions(-) diff --git a/app/admin/getUsers.php b/app/admin/getUsers.php index 5c08c45..498a952 100644 --- a/app/admin/getUsers.php +++ b/app/admin/getUsers.php @@ -1,5 +1,5 @@ escaped_str */ + if(!strlen($string)) return ''; + if(!db_link()) sql("SELECT 1+1", $eo); // if this is a previously escaped string, return from cached @@ -354,115 +356,191 @@ function checkPermissionVal($pvn) { } } ######################################################################## - if(!function_exists('sql')) { - function sql($statment, &$o) { + function dieErrorPage($error) { + global $Translation; - /* - Supported options that can be passed in $o options array (as array keys): - 'silentErrors': If true, errors will be returned in $o['error'] rather than displaying them on screen and exiting. - */ + $header = (defined('ADMIN_AREA') ? __DIR__ . '/incHeader.php' : __DIR__ . '/../header.php'); + $footer = (defined('ADMIN_AREA') ? __DIR__ . '/incFooter.php' : __DIR__ . '/../footer.php'); - global $Translation; - static $connected = false, $db_link; + ob_start(); - $dbServer = config('dbServer'); - $dbUsername = config('dbUsername'); - $dbPassword = config('dbPassword'); - $dbDatabase = config('dbDatabase'); + @include_once($header); + echo Notification::placeholder(); + echo Notification::show([ + 'message' => $error, + 'class' => 'danger', + 'dismiss_seconds' => 7200 + ]); + @include_once($footer); - $admin_dir = dirname(__FILE__); - $header = (defined('ADMIN_AREA') ? "{$admin_dir}/incHeader.php" : "{$admin_dir}/../header.php"); - $footer = (defined('ADMIN_AREA') ? "{$admin_dir}/incFooter.php" : "{$admin_dir}/../footer.php"); + echo ob_get_clean(); + exit; + } + ######################################################################## + function openDBConnection(&$o) { + static $connected = false, $db_link; - ob_start(); + $dbServer = config('dbServer'); + $dbUsername = config('dbUsername'); + $dbPassword = config('dbPassword'); + $dbDatabase = config('dbDatabase'); - if(!$connected) { - /****** Connect to MySQL ******/ - if(!extension_loaded('mysql') && !extension_loaded('mysqli')) { - $o['error'] = 'PHP is not configured to connect to MySQL on this machine. Please see this page for help on how to configure MySQL.'; - if($o['silentErrors']) return false; - - @include_once($header); - echo Notification::placeholder(); - echo Notification::show(array( - 'message' => $o['error'], - 'class' => 'danger', - 'dismiss_seconds' => 7200 - )); - @include_once($footer); - echo ob_get_clean(); - exit; - } - - if(!($db_link = @db_connect($dbServer, $dbUsername, $dbPassword))) { - $o['error'] = db_error($db_link, true); - if($o['silentErrors']) return false; - - @include_once($header); - echo Notification::placeholder(); - echo Notification::show(array( - 'message' => $o['error'], - 'class' => 'danger', - 'dismiss_seconds' => 7200 - )); - @include_once($footer); - echo ob_get_clean(); - exit; - } - - /****** Select DB ********/ - if(!db_select_db($dbDatabase, $db_link)) { - $o['error'] = db_error($db_link); - if($o['silentErrors']) return false; - - @include_once($header); - echo Notification::placeholder(); - echo Notification::show(array( - 'message' => $o['error'], - 'class' => 'danger', - 'dismiss_seconds' => 7200 - )); - @include_once($footer); - echo ob_get_clean(); - exit; - } - - $connected = true; - } + if($connected) return $db_link; - if(!$result = @db_query($statment, $db_link)) { - if(!stristr($statment, "show columns")) { - // retrieve error codes - $errorNum = db_errno($db_link); - $errorMsg = htmlspecialchars(db_error($db_link)); - - if(getLoggedAdmin()) $errorMsg .= "
{$Translation['query:']}\n" . htmlspecialchars($statment) . "

{$Translation['admin-only info']}

{$Translation['try rebuild fields']}

"; - - if($o['silentErrors']) { $o['error'] = $errorMsg; return false; } - - @include_once($header); - echo Notification::placeholder(); - echo Notification::show(array( - 'message' => $errorMsg, - 'class' => 'danger', - 'dismiss_seconds' => 7200 - )); - @include_once($footer); - echo ob_get_clean(); - exit; - } - } + /****** Check that MySQL module is enabled ******/ + if(!extension_loaded('mysql') && !extension_loaded('mysqli')) { + $o['error'] = 'PHP is not configured to connect to MySQL on this machine. Please see this page for help on how to configure MySQL.'; + if($o['silentErrors']) return false; - ob_end_clean(); - return $result; + dieErrorPage($o['error']); + } + + /****** Connect to MySQL ******/ + if(!($db_link = @db_connect($dbServer, $dbUsername, $dbPassword))) { + $o['error'] = db_error($db_link, true); + if($o['silentErrors']) return false; + + dieErrorPage($o['error']); + } + + /****** Select DB ********/ + if(!db_select_db($dbDatabase, $db_link)) { + $o['error'] = db_error($db_link); + if($o['silentErrors']) return false; + + dieErrorPage($o['error']); } + + $connected = true; + return $db_link; + } + ######################################################################## + function sql($statement, &$o) { + + /* + Supported options that can be passed in $o options array (as array keys): + 'silentErrors': If true, errors will be returned in $o['error'] rather than displaying them on screen and exiting. + 'noSlowQueryLog': don't log slow query if true + 'noErrorQueryLog': don't log error query if true + */ + + global $Translation; + + $db_link = openDBConnection($o); + + /* + if openDBConnection() fails, it would abort execution unless 'silentErrors' is true, + in which case, we should return false from sql() without further action since + $o['error'] would be already set by openDBConnection() + */ + if(!$db_link) return false; + + $t0 = microtime(true); + + if(!$result = @db_query($statement, $db_link)) { + if(!stristr($statement, "show columns")) { + // retrieve error codes + $errorNum = db_errno($db_link); + $o['error'] = htmlspecialchars(db_error($db_link)); + + if(empty($o['noErrorQueryLog'])) + logErrorQuery($statement, $o['error']); + + if(getLoggedAdmin()) + $o['error'] .= "
{$Translation['query:']}\n" . htmlspecialchars($statement) . "

{$Translation['admin-only info']}

{$Translation['try rebuild fields']}

"; + + if($o['silentErrors']) return false; + + dieErrorPage($o['error']); + } + } + + /* log slow queries that take more than 1 sec */ + $t1 = microtime(true); + if($t1 - $t0 > 1.0 && empty($o['noSlowQueryLog'])) + logSlowQuery($statement, $t1 - $t0); + + return $result; + } + ######################################################################## + function logSlowQuery($statement, $duration) { + if(!createQueryLogTable()) return; + + $o = [ + 'silentErrors' => true, + 'noSlowQueryLog' => true, + 'noErrorQueryLog' => true + ]; + $statement = makeSafe($statement); + $duration = floatval($duration); + $memberID = makeSafe(getLoggedMemberID()); + $uri = makeSafe($_SERVER['REQUEST_URI']); + + sql("INSERT INTO `appgini_query_log` SET + `statement`='$statement', + `duration`=$duration, + `memberID`='$memberID', + `uri`='$uri' + ", $o); + } + ######################################################################## + function logErrorQuery($statement, $error) { + if(!createQueryLogTable()) return; + + $o = [ + 'silentErrors' => true, + 'noSlowQueryLog' => true, + 'noErrorQueryLog' => true + ]; + $statement = makeSafe($statement); + $error = makeSafe($error); + $memberID = makeSafe(getLoggedMemberID()); + $uri = makeSafe($_SERVER['REQUEST_URI']); + + sql("INSERT INTO `appgini_query_log` SET + `statement`='$statement', + `error`='$error', + `memberID`='$memberID', + `uri`='$uri' + ", $o); + } + + ######################################################################## + function createQueryLogTable() { + static $created = false; + if($created) return true; + + $o = [ + 'silentErrors' => true, + 'noSlowQueryLog' => true, + 'noErrorQueryLog' => true + ]; + + sql("CREATE TABLE IF NOT EXISTS `appgini_query_log` ( + `datetime` TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + `statement` LONGTEXT, + `duration` DECIMAL(10,2) UNSIGNED DEFAULT 0.0, + `error` TEXT, + `memberID` VARCHAR(200), + `uri` VARCHAR(200) + ) CHARSET " . mysql_charset, $o); + + // check if table created + //$o2 = $o; + //$o2['error'] = ''; + //sql("SELECT COUNT(1) FROM 'appgini_query_log'", $o2); + + //$created = empty($o2['error']); + + $created = true; + return $created; } ######################################################################## - function sqlValue($statment, &$error = NULL) { - // executes a statment that retreives a single data value and returns the value retrieved + function sqlValue($statement, &$error = NULL) { + // executes a statement that retreives a single data value and returns the value retrieved $eo = ['silentErrors' => true]; - if(!$res = sql($statment, $eo)) { $error = $eo['error']; return false; } + if(!$res = sql($statement, $eo)) { $error = $eo['error']; return false; } if(!$row = db_fetch_row($res)) return false; return $row[0]; } diff --git a/app/admin/incHeader.php b/app/admin/incHeader.php index 97d9fe7..e1f5eb7 100644 --- a/app/admin/incHeader.php +++ b/app/admin/incHeader.php @@ -204,14 +204,16 @@ function hideDialogs() {
  • -
  • -
  • -
  • +
  • +
  • +
  • +
  • +
  • diff --git a/app/admin/pageBackupRestore.php b/app/admin/pageBackupRestore.php index afc5955..900b727 100644 --- a/app/admin/pageBackupRestore.php +++ b/app/admin/pageBackupRestore.php @@ -129,7 +129,7 @@ protected function utf8ize($mixed) { */ protected function get_specified_backup_file() { $md5_hash = $this->request['md5_hash']; - if(!preg_match('/^[a-f0-9]{32}$/i', $md5_hash)) return false; + if(!preg_match('/^[a-f0-9]{17,32}$/i', $md5_hash)) return false; $bfile = "{$this->curr_dir}/backups/{$md5_hash}.sql"; if(!is_file($bfile)) return false; @@ -361,10 +361,10 @@ public function get_backup_files() { $list = []; while(false !== ($entry = $d->read())) { - if(!preg_match('/^[a-f0-9]{32}\.sql$/i', $entry)) continue; + if(!preg_match('/^[a-f0-9]{17,32}\.sql$/i', $entry)) continue; $fts = @filemtime("{$bdir}/{$entry}"); $list[$fts] = array( - 'md5_hash' => substr($entry, 0, 32), + 'md5_hash' => substr($entry, 0, -4), 'datetime' => date($dtf, $fts), 'size' => number_format(@filesize("{$bdir}/{$entry}") / 1024) ); @@ -388,7 +388,7 @@ public function create_backup() { $config = ['dbServer' => '', 'dbUsername' => '', 'dbPassword' => '', 'dbDatabase' => '']; foreach($config as $k => $v) $config[$k] = escapeshellarg(config($k)); - $dump_file = escapeshellarg(normalize_path($this->curr_dir)) . '/backups/' . md5(microtime()) . '.sql'; + $dump_file = escapeshellarg(normalize_path($this->curr_dir)) . '/backups/' . substr(md5(microtime() . rand(0, 100000)), -17) . '.sql'; $pass_param = ($config['dbPassword'] ? "-p{$config['dbPassword']}" : ''); $this->cmd = "(mysqldump --no-tablespaces -u{$config['dbUsername']} {$pass_param} -h{$config['dbServer']} {$config['dbDatabase']} -r {$dump_file}) 2>&1"; diff --git a/app/admin/pageEditMember.php b/app/admin/pageEditMember.php index 943d676..c29d45f 100644 --- a/app/admin/pageEditMember.php +++ b/app/admin/pageEditMember.php @@ -383,7 +383,7 @@ .parents('.form-group').removeClass('has-error has-success'); }, success: function(resp) { - if(resp.match(/\ +
    ', '' . html_attr($_REQUEST['memberID']) . '', $Translation['username invalid']); ?> - +
    diff --git a/app/cli-update-calculated-fields.php b/app/cli-update-calculated-fields.php index 85ad3da..9c287f5 100644 --- a/app/cli-update-calculated-fields.php +++ b/app/cli-update-calculated-fields.php @@ -43,7 +43,7 @@ $args = []; for($i = 0; $i < count($argv); $i += 2) { if(!in_array($argv[$i], $allowed_args)) continue; - $args[$argv[$i]] = array_map(trim, explode(',', $argv[$i + 1])); + $args[$argv[$i]] = array_map('trim', explode(',', $argv[$i + 1])); } $calc = calculated_fields(); diff --git a/app/common.js b/app/common.js index 68e3c20..4dccf21 100644 --- a/app/common.js +++ b/app/common.js @@ -194,15 +194,13 @@ jQuery(function() { // in table view, hide unnecessary page elements if no records are displayed if($j('.table_view').length) { + var tvHasWarning = $j('.table_view tfoot .alert-warning').length > 0; + setInterval(function() { - if($j('tfoot .alert-warning').length) { - $j('#Print, #CSV, #tv-tools, thead, tr.success').addClass('hidden'); - $j('.tv-toggle').parent().addClass('hidden'); - return; - } + $j('#Print, #CSV, #tv-tools, .table_view thead, .table_view tr.success') + .toggleClass('hidden', tvHasWarning); - $j('#Print, #CSV, #tv-tools, thead, tr.success').removeClass('hidden'); - $j('.tv-toggle').parent().removeClass('hidden'); + $j('.tv-toggle').parent().toggleClass('hidden', tvHasWarning); }, 100); } diff --git a/app/datalist.php b/app/datalist.php index 7eb770b..feb1fcb 100644 --- a/app/datalist.php +++ b/app/datalist.php @@ -157,6 +157,8 @@ function Render() { if(isset($_REQUEST['record_selector']) && is_array($_REQUEST['record_selector'])) $record_selector = $_REQUEST['record_selector']; + $this->applyPermissionsToQuery($DisplayRecords); + if($SelectedID && !$Embedded && $this->AllowDVNavigation) { $setSelectedIDPreviousPage = !empty($_REQUEST['setSelectedIDPreviousPage']); $setSelectedIDNextPage = !empty($_REQUEST['setSelectedIDNextPage']) && !$setSelectedIDPreviousPage; @@ -461,7 +463,6 @@ function Render() { // TV code, only if user has view permission if($this->Permissions['view']) { - $QueryHasCustomWhere = (strlen($this->QueryWhere) > 0); // apply lookup filterers to the query foreach($this->filterers as $filterer => $caption) { @@ -477,26 +478,27 @@ function Render() { // apply quick search to the query if($SearchString != '') { - if($Search_x != '') { $FirstRecord = 1; } - - if($this->QueryWhere == '') - $this->QueryWhere = "where "; - else - $this->QueryWhere .= " and "; + if($Search_x != '') $FirstRecord = 1; foreach($this->QueryFieldsQS as $fName => $fCaption) - if(strpos($fName, 'QuerySearchableFields[$fName] = $fCaption; - $this->QueryWhere .= '(' . implode(" LIKE '%" . makeSafe($SearchString) . "%' or ", array_keys($this->QuerySearchableFields)) . " LIKE '%" . makeSafe($SearchString) . "%')"; + $sss = makeSafe($SearchString); // safe search string + + if(count($this->QuerySearchableFields)) + $this->QueryWhere .= ' AND (' . + implode( + " LIKE '%{$sss}%' OR ", + array_keys($this->QuerySearchableFields) + ) . " LIKE '%{$sss}%'" . + ')'; } // set query filters - // $this->QueryWhere might be empty or might contain a clause (starting with WHERE) to retrieve only user/group data - $QueryHasWhere = preg_match('/^WHERE\s+/i', $this->QueryWhere); - $WhereNeedsClosing = 0; + $filterGroups = []; for($i = 1; $i <= (datalist_filters_count * $FiltersPerGroup); $i += $FiltersPerGroup) { // Number of filters allowed // test current filter group $GroupHasFilters = 0; @@ -515,63 +517,78 @@ function Render() { } } - if($GroupHasFilters) { - if(stripos($this->QueryWhere, 'where ') === false) - $this->QueryWhere = 'WHERE ('; - elseif($QueryHasWhere) { - $this->QueryWhere .= ' and ('; - $QueryHasWhere = 0; - } + if(!$GroupHasFilters) continue; - $this->QueryWhere .= " " . $FilterAnd[$i] . " ("; + $filterGroups[] = [ + 'join' => '', + 'filters' => [ /* one or more strings, each describing a filter */ ] + ]; + $currentGroup =& $filterGroups[count($filterGroups) - 1]; - for($j = 0; $j < $FiltersPerGroup; $j++) { - $ij = $i + $j; - if($FilterField[$ij] != '' && $this->QueryFieldsIndexed[($FilterField[$ij])] != '' && $FilterOperator[$ij] != '' && ($FilterValue[$ij] != '' || strpos($FilterOperator[$ij], 'empty'))) { - if($FilterAnd[$ij] == '') { - $FilterAnd[$ij] = 'and'; - } - // test for date/time fields - $tries = 0; $isDateTime = $isDate = false; - $fieldName = str_replace('`', '', $this->QueryFieldsIndexed[($FilterField[$ij])]); - list($tn, $fn) = explode('.', $fieldName); - while(!($res = sql("SHOW COLUMNS FROM `{$tn}` LIKE '{$fn}'", $eo)) && $tries < 2) { - $tn = substr($tn, 0, -1); - $tries++; - } - if($res !== false && $row = @db_fetch_array($res)) { - $isDateTime = in_array($row['Type'], array('date', 'time', 'datetime')); - $isDate = in_array($row['Type'], ['date', 'datetime']); - } - // end of test - if($FilterOperator[$ij] == 'is-empty' && !$isDateTime) { - $this->QueryWhere .= ' ' . $FilterAnd[$ij] . ' (' . $this->QueryFieldsIndexed[($FilterField[$ij])] . "='' or " . $this->QueryFieldsIndexed[($FilterField[$ij])] . ' is NULL) '; - } elseif($FilterOperator[$ij] == 'is-not-empty' && !$isDateTime) { - $this->QueryWhere .= ' ' . $FilterAnd[$ij] . " " . $this->QueryFieldsIndexed[($FilterField[$ij])] . "!='' "; - } elseif($FilterOperator[$ij] == 'is-empty' && $isDateTime) { - $this->QueryWhere .= " " . $FilterAnd[$ij] . " (" . $this->QueryFieldsIndexed[($FilterField[$ij])] . "=0 or " . $this->QueryFieldsIndexed[($FilterField[$ij])] . " is NULL) "; - } elseif($FilterOperator[$ij] == 'is-not-empty' && $isDateTime) { - $this->QueryWhere .= " " . $FilterAnd[$ij] . " " . $this->QueryFieldsIndexed[($FilterField[$ij])] . "!=0 "; - } elseif($FilterOperator[$ij] == 'like' && !strstr($FilterValue[$ij], "%") && !strstr($FilterValue[$ij], "_")) { - $this->QueryWhere .= " " . $FilterAnd[$ij] . " " . $this->QueryFieldsIndexed[($FilterField[$ij])] . " like '%" . makeSafe($FilterValue[$ij]) . "%' "; - } elseif($FilterOperator[$ij] == 'not-like' && !strstr($FilterValue[$ij], "%") && !strstr($FilterValue[$ij], "_")) { - $this->QueryWhere .= " " . $FilterAnd[$ij] . " " . $this->QueryFieldsIndexed[($FilterField[$ij])] . " not like '%" . makeSafe($FilterValue[$ij]) . "%' "; - } elseif($isDate) { - $dateValue = mysql_datetime($FilterValue[$ij]); - $this->QueryWhere .= " " . $FilterAnd[$ij] . " " . $this->QueryFieldsIndexed[($FilterField[$ij])] . " " . $GLOBALS['filter_operators'][$FilterOperator[$ij]] . " '$dateValue' "; - } else { - $this->QueryWhere .= " " . $FilterAnd[$ij] . " " . $this->QueryFieldsIndexed[($FilterField[$ij])] . " " . $GLOBALS['filter_operators'][$FilterOperator[$ij]] . " '" . makeSafe($FilterValue[$ij]) . "' "; - } - } - } + for($j = 0; $j < $FiltersPerGroup; $j++) { + $ij = $i + $j; + + // not a valid filter? + if( + !$FilterField[$ij] || + !$this->QueryFieldsIndexed[($FilterField[$ij])] || + !$FilterOperator[$ij] || + (!$FilterValue[$ij] && strpos($FilterOperator[$ij], 'empty') === false) + ) continue; + + if($FilterAnd[$ij] == '') $FilterAnd[$ij] = 'and'; + $currentGroup['filters'][] = ''; + $currentFilter =& $currentGroup['filters'][count($currentGroup['filters']) - 1]; + + // always use the 1st FilterAnd of the group as the group's join + if(empty($currentGroup['join'])) $currentGroup['join'] = thisOr($FilterAnd[$i], 'and'); + + // if this is NOT the first filter in the group, add its FilterAnd, else ignore + if(count($currentGroup['filters']) > 1) + $currentFilter = $FilterAnd[$ij] . ' '; + + list($isDate, $isDateTime) = $this->fieldIsDateTime($FilterField[$ij]); + + if($FilterOperator[$ij] == 'is-empty' && !$isDateTime) + $currentFilter .= '(' . $this->QueryFieldsIndexed[($FilterField[$ij])] . "='' OR " . $this->QueryFieldsIndexed[($FilterField[$ij])] . ' IS NULL)'; + + elseif($FilterOperator[$ij] == 'is-not-empty' && !$isDateTime) + $currentFilter .= $this->QueryFieldsIndexed[($FilterField[$ij])] . "!=''"; + + elseif($FilterOperator[$ij] == 'is-empty' && $isDateTime) + $currentFilter .= '(' . $this->QueryFieldsIndexed[($FilterField[$ij])] . "=0 OR " . $this->QueryFieldsIndexed[($FilterField[$ij])] . ' IS NULL)'; + + elseif($FilterOperator[$ij] == 'is-not-empty' && $isDateTime) + $currentFilter .= $this->QueryFieldsIndexed[($FilterField[$ij])] . "!=0"; + + elseif($FilterOperator[$ij] == 'like' && !strstr($FilterValue[$ij], "%") && !strstr($FilterValue[$ij], "_")) + $currentFilter .= $this->QueryFieldsIndexed[($FilterField[$ij])] . " LIKE '%" . makeSafe($FilterValue[$ij]) . "%'"; + + elseif($FilterOperator[$ij] == 'not-like' && !strstr($FilterValue[$ij], "%") && !strstr($FilterValue[$ij], "_")) + $currentFilter .= $this->QueryFieldsIndexed[($FilterField[$ij])] . " NOT LIKE '%" . makeSafe($FilterValue[$ij]) . "%'"; + + elseif($isDate) { + $dateValue = mysql_datetime($FilterValue[$ij]); + $currentFilter .= $this->QueryFieldsIndexed[($FilterField[$ij])] . ' ' . $GLOBALS['filter_operators'][$FilterOperator[$ij]] . " '$dateValue'"; + + } else + $currentFilter .= $this->QueryFieldsIndexed[($FilterField[$ij])] . ' ' . $GLOBALS['filter_operators'][$FilterOperator[$ij]] . " '" . makeSafe($FilterValue[$ij]) . "'"; - $this->QueryWhere .= ") "; - $WhereNeedsClosing = 1; } } - if($WhereNeedsClosing && !$QueryHasCustomWhere) - $this->QueryWhere .= ")"; + // construct filters from $filterGroups + $filtersWhere = ''; + foreach($filterGroups as $fg) { + if(empty($fg['filters'])) continue; + + // ignore 1st join (i.e. use it only if filtersWhere already populated) + if($filtersWhere) $filtersWhere .= " {$fg['join']} "; + + $filtersWhere .= '(' . implode(' ', $fg['filters']) . ')'; + } + + if($filtersWhere) $this->QueryWhere .= " AND ($filtersWhere)"; // set query sort if(!stristr($this->QueryOrder, "order by ") && $SortField != '' && $this->AllowSorting) { @@ -580,22 +597,12 @@ function Render() { $actualSortField = str_replace(" $fieldNum ", " $fieldSort ", " $actualSortField "); $actualSortField = str_replace(",$fieldNum ", ",$fieldSort ", " $actualSortField "); } - $this->QueryOrder = "order by $actualSortField $SortDirection"; + $this->QueryOrder = "ORDER BY $actualSortField $SortDirection"; } - // clean up query - $this->QueryWhere = str_replace('( and ', '( ', $this->QueryWhere); - $this->QueryWhere = str_replace('( or ', '( ', $this->QueryWhere); - $this->QueryWhere = str_replace('( and ', '( ', $this->QueryWhere); - $this->QueryWhere = str_replace('( or ', '( ', $this->QueryWhere); - $this->QueryWhere = str_replace('', '', $this->QueryWhere); - $this->QueryWhere = str_replace('', '', $this->QueryWhere); - $this->QueryWhere = str_replace('', '', $this->QueryWhere); - $this->QueryWhere = str_replace('', '', $this->QueryWhere); - // if no 'order by' clause found, apply default sorting if specified if($this->DefaultSortField != '' && $this->QueryOrder == '') { - $this->QueryOrder = "order by {$this->DefaultSortField} {$this->DefaultSortDirection}"; + $this->QueryOrder = "ORDER BY {$this->DefaultSortField} {$this->DefaultSortDirection}"; } // Output CSV on request @@ -1187,7 +1194,12 @@ function Render() { ); if($dvCode) { - $this->HTML .= "\n\t
    TableName}\" class=\"col-xs-12 table-{$this->TableName} detail_view {$this->DVClasses}\">{$tv_dv_separator}
    {$dvCode}
    "; + $this->HTML .= sprintf( + '
    %s
    %s
    ', + $this->TableName, $this->TableName, $this->DVClasses, $tv_dv_separator, + $dvCode == $this->translation['tableAccessDenied'] ? 'alert alert-danger' : 'panel panel-default', + $dvCode + ); $this->ContentType = 'detailview'; $dvShown = true; } @@ -1210,7 +1222,7 @@ function Render() { // handle the case were user has no view access and has just inserted a record // by redirecting to tablename_view.php (which should redirect them to insert form) - if(!$this->Permissions['view'] && !$dvCode && $SelectedID && isset($_REQUEST['record-added-ok'])) { + if(!$this->Permissions['view'] && (!$dvCode || $dvCode == $this->translation['tableAccessDenied']) && $SelectedID && isset($_REQUEST['record-added-ok'])) { ob_start(); ?>'; + echo error_message($Translation['tableAccessDenied']); exit; } @@ -130,23 +129,6 @@ $x->AllowConsoleLog = false; $x->AllowDVNavigation = true; - // mm: build the query based on current member's permissions - $DisplayRecords = $_REQUEST['DisplayRecords']; - if(!in_array($DisplayRecords, ['user', 'group'])) { $DisplayRecords = 'all'; } - if($perm['view'] == 1 || ($perm['view'] > 1 && $DisplayRecords == 'user' && !$_REQUEST['NoFilter_x'])) { // view owner only - $x->QueryFrom .= ', `membership_userrecords`'; - $x->QueryWhere = "WHERE `employment_and_income_history`.`id`=`membership_userrecords`.`pkValue` AND `membership_userrecords`.`tableName`='employment_and_income_history' AND LCASE(`membership_userrecords`.`memberID`)='" . getLoggedMemberID() . "'"; - } elseif($perm['view'] == 2 || ($perm['view'] > 2 && $DisplayRecords == 'group' && !$_REQUEST['NoFilter_x'])) { // view group only - $x->QueryFrom .= ', `membership_userrecords`'; - $x->QueryWhere = "WHERE `employment_and_income_history`.`id`=`membership_userrecords`.`pkValue` AND `membership_userrecords`.`tableName`='employment_and_income_history' AND `membership_userrecords`.`groupID`='" . getLoggedGroupID() . "'"; - } elseif($perm['view'] == 3) { // view all - // no further action - } elseif($perm['view'] == 0) { // view none - $x->QueryFields = ['Not enough permissions' => 'NEP']; - $x->QueryFrom = '`employment_and_income_history`'; - $x->QueryWhere = ''; - $x->DefaultSortField = ''; - } // hook: employment_and_income_history_init $render = true; if(function_exists('employment_and_income_history_init')) { diff --git a/app/footer.php b/app/footer.php index 5f53929..f866811 100644 --- a/app/footer.php +++ b/app/footer.php @@ -9,7 +9,7 @@
    diff --git a/app/incCommon.php b/app/incCommon.php index 44aea34..e914d48 100644 --- a/app/incCommon.php +++ b/app/incCommon.php @@ -481,14 +481,14 @@ function htmlUserBar() { diff --git a/app/templates/employment_and_income_history_templateDVP.html b/app/templates/employment_and_income_history_templateDVP.html index 7e476a6..8e24a2a 100644 --- a/app/templates/employment_and_income_history_templateDVP.html +++ b/app/templates/employment_and_income_history_templateDVP.html @@ -79,3 +79,14 @@ + diff --git a/app/templates/properties_templateDVP.html b/app/templates/properties_templateDVP.html index 40ada07..2219583 100644 --- a/app/templates/properties_templateDVP.html +++ b/app/templates/properties_templateDVP.html @@ -97,6 +97,17 @@ +
    diff --git a/app/templates/property_photos_templateDVP.html b/app/templates/property_photos_templateDVP.html index 5250aba..f0a75ee 100644 --- a/app/templates/property_photos_templateDVP.html +++ b/app/templates/property_photos_templateDVP.html @@ -48,3 +48,14 @@
    + diff --git a/app/templates/references_templateDVP.html b/app/templates/references_templateDVP.html index 0d5c835..ed758e6 100644 --- a/app/templates/references_templateDVP.html +++ b/app/templates/references_templateDVP.html @@ -44,3 +44,14 @@ + diff --git a/app/templates/rental_owners_templateDVP.html b/app/templates/rental_owners_templateDVP.html index 86387de..9756d42 100644 --- a/app/templates/rental_owners_templateDVP.html +++ b/app/templates/rental_owners_templateDVP.html @@ -114,6 +114,17 @@ +
    diff --git a/app/templates/residence_and_rental_history_templateDVP.html b/app/templates/residence_and_rental_history_templateDVP.html index 8b5b246..2919233 100644 --- a/app/templates/residence_and_rental_history_templateDVP.html +++ b/app/templates/residence_and_rental_history_templateDVP.html @@ -86,3 +86,14 @@
    + diff --git a/app/templates/unit_photos_templateDVP.html b/app/templates/unit_photos_templateDVP.html index 969f9b9..697186b 100644 --- a/app/templates/unit_photos_templateDVP.html +++ b/app/templates/unit_photos_templateDVP.html @@ -48,3 +48,14 @@ + diff --git a/app/templates/units_templateDVP.html b/app/templates/units_templateDVP.html index befcb29..79a2091 100644 --- a/app/templates/units_templateDVP.html +++ b/app/templates/units_templateDVP.html @@ -132,6 +132,17 @@ +
    diff --git a/app/unit_photos_autofill.php b/app/unit_photos_autofill.php index ff21ad5..f83d820 100644 --- a/app/unit_photos_autofill.php +++ b/app/unit_photos_autofill.php @@ -1,5 +1,5 @@ Request::val('unit', ''), + 'unit' => Request::lookup('unit', ''), 'photo' => Request::fileUpload('photo', [ 'maxSize' => 2048000, 'types' => 'jpg|jpeg|gif|png', @@ -124,7 +124,7 @@ function unit_photos_update(&$selected_id, &$error_message = '') { if(!check_record_permission('unit_photos', $selected_id, 'edit')) return false; $data = [ - 'unit' => Request::val('unit', ''), + 'unit' => Request::lookup('unit', ''), 'photo' => Request::fileUpload('photo', [ 'maxSize' => 2048000, 'types' => 'jpg|jpeg|gif|png', @@ -206,7 +206,7 @@ function unit_photos_form($selected_id = '', $AllowUpdate = 1, $AllowInsert = 1, // mm: get table permissions $arrPerm = getTablePermissions('unit_photos'); - if(!$arrPerm['insert'] && $selected_id=='') { return ''; } + if(!$arrPerm['insert'] && $selected_id=='') return $Translation['tableAccessDenied']; $AllowInsert = ($arrPerm['insert'] ? true : false); // print preview? $dvprint = false; @@ -225,14 +225,14 @@ function unit_photos_form($selected_id = '', $AllowUpdate = 1, $AllowInsert = 1, if($selected_id) { // mm: check member permissions - if(!$arrPerm['view']) return ''; + if(!$arrPerm['view']) return $Translation['tableAccessDenied']; // mm: who is the owner? $ownerGroupID = sqlValue("SELECT `groupID` FROM `membership_userrecords` WHERE `tableName`='unit_photos' AND `pkValue`='" . makeSafe($selected_id) . "'"); $ownerMemberID = sqlValue("SELECT LCASE(`memberID`) FROM `membership_userrecords` WHERE `tableName`='unit_photos' AND `pkValue`='" . makeSafe($selected_id) . "'"); - if($arrPerm['view'] == 1 && getLoggedMemberID() != $ownerMemberID) return ''; - if($arrPerm['view'] == 2 && getLoggedGroupID() != $ownerGroupID) return ''; + if($arrPerm['view'] == 1 && getLoggedMemberID() != $ownerMemberID) return $Translation['tableAccessDenied']; + if($arrPerm['view'] == 2 && getLoggedGroupID() != $ownerGroupID) return $Translation['tableAccessDenied']; // can edit? $AllowUpdate = 0; @@ -258,7 +258,7 @@ function unit_photos_form($selected_id = '', $AllowUpdate = 1, $AllowInsert = 1, '; + echo error_message($Translation['tableAccessDenied']); exit; } @@ -103,23 +102,6 @@ $x->AllowConsoleLog = false; $x->AllowDVNavigation = true; - // mm: build the query based on current member's permissions - $DisplayRecords = $_REQUEST['DisplayRecords']; - if(!in_array($DisplayRecords, ['user', 'group'])) { $DisplayRecords = 'all'; } - if($perm['view'] == 1 || ($perm['view'] > 1 && $DisplayRecords == 'user' && !$_REQUEST['NoFilter_x'])) { // view owner only - $x->QueryFrom .= ', `membership_userrecords`'; - $x->QueryWhere = "WHERE `unit_photos`.`id`=`membership_userrecords`.`pkValue` AND `membership_userrecords`.`tableName`='unit_photos' AND LCASE(`membership_userrecords`.`memberID`)='" . getLoggedMemberID() . "'"; - } elseif($perm['view'] == 2 || ($perm['view'] > 2 && $DisplayRecords == 'group' && !$_REQUEST['NoFilter_x'])) { // view group only - $x->QueryFrom .= ', `membership_userrecords`'; - $x->QueryWhere = "WHERE `unit_photos`.`id`=`membership_userrecords`.`pkValue` AND `membership_userrecords`.`tableName`='unit_photos' AND `membership_userrecords`.`groupID`='" . getLoggedGroupID() . "'"; - } elseif($perm['view'] == 3) { // view all - // no further action - } elseif($perm['view'] == 0) { // view none - $x->QueryFields = ['Not enough permissions' => 'NEP']; - $x->QueryFrom = '`unit_photos`'; - $x->QueryWhere = ''; - $x->DefaultSortField = ''; - } // hook: unit_photos_init $render = true; if(function_exists('unit_photos_init')) { diff --git a/app/units_autofill.php b/app/units_autofill.php index 4ef4bdb..ec3c320 100644 --- a/app/units_autofill.php +++ b/app/units_autofill.php @@ -1,5 +1,5 @@ Request::val('property', ''), + 'property' => Request::lookup('property', ''), 'unit_number' => Request::val('unit_number', ''), 'photo' => Request::fileUpload('photo', [ 'maxSize' => 2048000, @@ -181,7 +181,7 @@ function units_update(&$selected_id, &$error_message = '') { if(!check_record_permission('units', $selected_id, 'edit')) return false; $data = [ - 'property' => Request::val('property', ''), + 'property' => Request::lookup('property', ''), 'unit_number' => Request::val('unit_number', ''), 'photo' => Request::fileUpload('photo', [ 'maxSize' => 2048000, @@ -282,7 +282,7 @@ function units_form($selected_id = '', $AllowUpdate = 1, $AllowInsert = 1, $Allo // mm: get table permissions $arrPerm = getTablePermissions('units'); - if(!$arrPerm['insert'] && $selected_id=='') { return ''; } + if(!$arrPerm['insert'] && $selected_id=='') return $Translation['tableAccessDenied']; $AllowInsert = ($arrPerm['insert'] ? true : false); // print preview? $dvprint = false; @@ -332,14 +332,14 @@ function units_form($selected_id = '', $AllowUpdate = 1, $AllowInsert = 1, $Allo if($selected_id) { // mm: check member permissions - if(!$arrPerm['view']) return ''; + if(!$arrPerm['view']) return $Translation['tableAccessDenied']; // mm: who is the owner? $ownerGroupID = sqlValue("SELECT `groupID` FROM `membership_userrecords` WHERE `tableName`='units' AND `pkValue`='" . makeSafe($selected_id) . "'"); $ownerMemberID = sqlValue("SELECT LCASE(`memberID`) FROM `membership_userrecords` WHERE `tableName`='units' AND `pkValue`='" . makeSafe($selected_id) . "'"); - if($arrPerm['view'] == 1 && getLoggedMemberID() != $ownerMemberID) return ''; - if($arrPerm['view'] == 2 && getLoggedGroupID() != $ownerGroupID) return ''; + if($arrPerm['view'] == 1 && getLoggedMemberID() != $ownerMemberID) return $Translation['tableAccessDenied']; + if($arrPerm['view'] == 2 && getLoggedGroupID() != $ownerGroupID) return $Translation['tableAccessDenied']; // can edit? $AllowUpdate = 0; @@ -370,7 +370,7 @@ function units_form($selected_id = '', $AllowUpdate = 1, $AllowInsert = 1, $Allo '; + echo error_message($Translation['tableAccessDenied']); exit; } @@ -175,23 +174,6 @@ $x->AllowConsoleLog = false; $x->AllowDVNavigation = true; - // mm: build the query based on current member's permissions - $DisplayRecords = $_REQUEST['DisplayRecords']; - if(!in_array($DisplayRecords, ['user', 'group'])) { $DisplayRecords = 'all'; } - if($perm['view'] == 1 || ($perm['view'] > 1 && $DisplayRecords == 'user' && !$_REQUEST['NoFilter_x'])) { // view owner only - $x->QueryFrom .= ', `membership_userrecords`'; - $x->QueryWhere = "WHERE `units`.`id`=`membership_userrecords`.`pkValue` AND `membership_userrecords`.`tableName`='units' AND LCASE(`membership_userrecords`.`memberID`)='" . getLoggedMemberID() . "'"; - } elseif($perm['view'] == 2 || ($perm['view'] > 2 && $DisplayRecords == 'group' && !$_REQUEST['NoFilter_x'])) { // view group only - $x->QueryFrom .= ', `membership_userrecords`'; - $x->QueryWhere = "WHERE `units`.`id`=`membership_userrecords`.`pkValue` AND `membership_userrecords`.`tableName`='units' AND `membership_userrecords`.`groupID`='" . getLoggedGroupID() . "'"; - } elseif($perm['view'] == 3) { // view all - // no further action - } elseif($perm['view'] == 0) { // view none - $x->QueryFields = ['Not enough permissions' => 'NEP']; - $x->QueryFrom = '`units`'; - $x->QueryWhere = ''; - $x->DefaultSortField = ''; - } // hook: units_init $render = true; if(function_exists('units_init')) { diff --git a/orpm.axp b/orpm.axp index cb9b3f6..b004532 100644 --- a/orpm.axp +++ b/orpm.axp @@ -1 +1 @@ -rental_property_managerlocalhostUTF-8False12FalseAmerica/New_YorkFalseFalseTrueFalsebootstrap.cssTrueTrue0345.952021-03-28 18:47:57C:\xampp\htdocs\open-source-apps\orpm\app0False402True{"events":{"end-of-lease":{"type":"end-of-lease","color":"danger","textColor":"danger","table":"applications_leases","customWhere":"`applications_leases`.`status` = 'Lease'","title":"<b>End of lease</b><br>Property {4} unit# {5}","allDay":true,"startDateField":"end_date","startTimeField":"","endDateField":"","endTimeField":""},"start-of-lease":{"type":"start-of-lease","color":"success","textColor":"success","table":"applications_leases","customWhere":"`applications_leases`.`status` = 'Lease'","title":"<b>Start of lease</b><br>Property {4} unit# {5}","allDay":true,"startDateField":"start_date","startTimeField":"","endDateField":"","endTimeField":""}},"calendars":{"lease-start-end":{"id":"lease-start-end","title":"Leases starting/ending","initial-view":"dayGridMonth","initial-date":"[today]","events":["end-of-lease","start-of-lease"],"locale":"","groups":["Admins"],"links-home":"1","links-navmenu":"1"}}}dummy12:9:1:4:13:9001:[{"report_hash":"id5fq91qu393nf0k42r1","title":"Applicants By Status","table":"applicants_and_tenants","table_index":0,"label":"status","caption1":"Status","caption2":"Count of Applicants and tenants","group_function":"count","group_function_field":null,"group_array":[],"look_up_table":"","look_up_value":"","label_field_index":"13","report_header_url":"","report_footer_url":"","data_table_section":1,"barchart_section":0,"piechart_section":1,"override_permissions":0,"custom_where":"","date_separator":"\/"}][{"label":"Change status","icon":"circle-arrow-right","field":"status","value":"allowUserToSpecify","fixedValue":"","confirmation":1,"groups":[],"hash":"m8xfpspfv9y3762768or"},{"label":"Edit Notes","icon":"pencil","field":"notes","value":"allowUserToSpecify","fixedValue":"","confirmation":1,"groups":[],"hash":"li3ml58uplm5oyp54b8x"}]applicants_and_tenantsFalseFalseTrueFalseFalseTrueFalseTrueTrueTrueTrueTrueTrueFalseTrueTrue11010applications_leases;residence_and_rental_history;employment_and_income_history;references;TrueFalseFalse2ascaccount_balances.png0False0TruehorizontalFalseFalse25%id400TrueFalseFalseTrueFalseTrueFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse0False00FalseFalseright0000Falselast_name15150FalseFalseFalseFalseFalseFalseFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse2False00FalseFalseleft0000Falsefirst_name15150FalseFalseFalseFalseFalseFalseFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse1False00FalseFalseleft0000Falseemail15800FalseFalseFalseFalseFalseFalseFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse0False31FalseFalseleft0000Falsephone15150FalseFalseFalseFalseFalseFalseFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse3False00FalseFalseleft0000Falsebirth_date900FalseFalseFalseFalseFalseFalseFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse0False00FalseFalseleft0000Falsedriver_license_number15150FalseFalseFalseFalseFalseFalseFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse4False00FalseFalsecenter0000Falsedriver_license_state15150FalseFalseFalseFalseFalseFalseFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueTrueFalseFalse5False00FalseFalsecenter0000Falserequested_lease_term15150FalseFalseFalseFalseFalseFalseFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueTrueFalseFalse8False00FalseFalseleft0000Falsemonthly_gross_pay882FalseFalseFalseFalseFalseFalseFalseFalse80True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse5False00FalseFalseright0000Falseadditional_income882FalseFalseFalseFalseFalseFalseFalseFalse80True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse7False00FalseFalseright0000Falseassets882FalseFalseFalseFalseFalseFalseFalseFalse80True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse8False00FalseFalseright0000Falsestatus15400FalseFalseTrueFalseFalseFalseFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse21FalseFalseFalseFalse9False00FalseFalsecenter0000Falsenotes1800FalseFalseFalseFalseFalseFalseFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseTrueFalseFalse0True00FalseFalseleft0000False
    1:3:2:5:7:8:16:9001:[{"report_hash":"rs1tinh2qcc2azdob0r6","title":"Applications\/Leases Over Time","table":"applications_leases","table_index":1,"label":"status","caption1":"Application status","caption2":"Count of Applications\/Leases","group_function":"count","group_function_field":null,"group_array":[],"look_up_table":"","look_up_value":"","label_field_index":"3","date_field":"start_date","date_field_index":"8","report_header_url":"","report_footer_url":"","data_table_section":1,"barchart_section":1,"piechart_section":0,"override_permissions":0,"custom_where":"","date_separator":"\/"},{"report_hash":"7dlamlewaen7fh5e7omb","title":"Applications\/Leases By Property","table":"applications_leases","table_index":1,"label":"property","caption1":"Property","caption2":"Count of Applications\/Leases","group_function":"count","group_function_field":null,"group_array":[],"look_up_table":"properties","look_up_value":"property_name","label_field_index":"4","date_field":"start_date","date_field_index":"8","report_header_url":"","report_footer_url":"","data_table_section":1,"barchart_section":0,"piechart_section":1,"override_permissions":0,"custom_where":"","date_separator":"\/"},{"report_hash":"uh2omkvwpr1oqfvdt70y","title":"Leases By Property Over Time","table":"applications_leases","table_index":1,"label":"property","caption1":"Property","caption2":"Count of Applications\/Leases","group_function":"count","group_function_field":null,"group_array":[],"look_up_table":"properties","look_up_value":"property_name","label_field_index":"4","date_field":"start_date","date_field_index":"8","report_header_url":"","report_footer_url":"","data_table_section":1,"barchart_section":0,"piechart_section":1,"override_permissions":0,"custom_where":"`applications_leases`.`status`='Lease'","date_separator":"\/"},{"report_hash":"lezfr2w8z8mwp5yq26pw","title":"Lease Value By Property Over Time","table":"applications_leases","table_index":1,"label":"property","caption1":"Property","caption2":"Sum of Applications\/Leases","group_function":"sum","group_function_field":"rent","group_array":[],"look_up_table":"properties","look_up_value":"property_name","label_field_index":"4","date_field":"start_date","date_field_index":"8","report_header_url":"","report_footer_url":"","data_table_section":1,"barchart_section":0,"piechart_section":1,"override_permissions":0,"custom_where":"`applications_leases`.`status` LIKE '%lease'","date_separator":"\/"}][{"label":"Approve application","icon":"ok","field":"status","value":"fixedValue","fixedValue":"Lease","confirmation":1,"groups":[],"hash":"ghqe4agakj7de10gc0ba"}]applications_leasesFalseFalseTrueFalseFalseTrueFalseTrueTrueTrueTrueTrueTrueFalseTrueTrue11010TrueFalseFalse0asccurriculum_vitae.png0True0TruehorizontalFalseFalse25%id400TrueFalseFalseTrueFalseTrueFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse0False00FalseFalseright0000Falsetenants400FalseFalseFalseFalseFalseTrueFalseFalse60True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalsefirst_namelast_nameidapplicants_and_tenantsTrueFalseFalse01FalseFalseFalseFalse3False00FalseFalseleft0000Falsestatus15400FalseFalseTrueFalseFalseFalseFalseFalse50True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse21FalseFalseFalseFalse7False00FalseFalseleft0000Falseproperty400FalseFalseFalseFalseFalseTrueFalseFalse80True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseproperty_nameidpropertiesTrueFalseFalse01FalseFalseFalseFalse1False00FalseFalseleft0000Falseunit400FalseFalseFalseFalseFalseTrueFalseFalse60True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseunit_numberidunitsTrueFalseFalse01FalseFalseFalseFalse11False00FalseFalsepropertyleft0000Falsetype15400FalseFalseTrueFalseFalseFalseFalseFalse40True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse21FalseFalseFalseFalse2False00FalseFalseleft0000Falsetotal_number_of_occupants15150FalseFalseFalseFalseFalseFalseFalseFalse70True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse6False00FalseFalsecenter0000Falsestart_date900FalseFalseFalseFalseFalseFalseFalseFalse70True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse0False00FalseFalseleft0000Falseend_date900FalseFalseFalseFalseFalseFalseFalseFalse60True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse21FalseFalseFalseFalse0False00FalseFalseleft0000Falserecurring_charges_frequency15400FalseFalseTrueFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse4False00FalseFalseleft0000Falsenext_due_date900FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse0False00FalseFalseleft0000Falserent882FalseFalseFalseFalseFalseFalseFalseFalse70True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse5False00FalseFalseright0000Falsesecurity_deposit8152FalseFalseFalseFalseFalseFalseFalseFalse80True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse6False00FalseFalseright0000Falsesecurity_deposit_date900FalseFalseFalseFalseFalseFalseFalseFalse80True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse0False00FalseFalseleft0000Falseemergency_contact151000FalseFalseFalseFalseFalseFalseFalseFalse120True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse10False00FalseFalseleft0000Falseco_signer_details151000FalseFalseFalseFalseFalseFalseFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse9False00FalseFalseleft0000Falsenotes1800FalseFalseFalseFalseFalseFalseFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse0True00FalseFalseleft0000FalseThe applicant must agree to the following terms:
    1. I understand that this is a routine application to establish credit, character, employment, and rental history.

    2. I also understand that this is NOT an agreement to rent and that all applications must be approved.

    3. I authorize verification of references given.

    4. I declare that the statements above are true and correct, and I agree that the landlord may terminate my agreement entered into in reliance on any misstatement made above.

    5. ]]>agreement15400FalseFalseFalseFalseFalseFalseFalseFalse70True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse8False00TrueFalsecenter0000False
    1:8:9:9001:residence_and_rental_historyFalseFalseTrueFalseFalseTrueFalseTrueTrueTrueTrueTrueTrueFalseTrueTrue11010TrueTrueTrue0ascdocument_comment_above.png0True0FalsehorizontalFalseFalse25%id400TrueFalseFalseTrueFalseTrueFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse0False00FalseFalseright0000Falsetenant400FalseFalseFalseFalseFalseTrueFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalsefirst_namelast_nameidapplicants_and_tenantsTrueFalseFalse01TrueFalseFalseFalse8False00FalseFalseright0000Falseaddress15400FalseFalseFalseFalseFalseTrueFalseFalse180True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse1False00FalseFalseleft0000Falselandlord_or_manager_name15150FalseFalseFalseFalseFalseFalseFalseFalse120True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse2False00FalseFalseleft0000Falselandlord_or_manager_phone15150FalseFalseFalseFalseFalseFalseFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse3False00FalseFalseleft0000Falsemonthly_rent862FalseFalseFalseFalseFalseFalseFalseFalse80True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse4False00FalseFalseright0000Falseduration_of_residency_from900FalseFalseFalseFalseFalseFalseFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse5False00FalseFalseleft0000Falseto900FalseFalseFalseFalseFalseFalseFalseFalse80True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse7False00FalseFalseleft0000Falsereason_for_leaving15400FalseFalseFalseFalseFalseFalseFalseFalse120True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse6False00FalseFalseleft0000Falsenotes1800FalseFalseFalseFalseFalseFalseFalseFalse120True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse0True00FalseFalseleft0000False
    1:2:7:8:9001:employment_and_income_historyFalseFalseTrueFalseFalseTrueFalseTrueTrueTrueTrueTrueTrueFalseTrueTrue11010TrueTrueTrue0asccash_stack.png0True0FalsehorizontalFalseFalse25%id400TrueFalseFalseTrueFalseTrueFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse0False00FalseFalseright0000Falsetenant400FalseFalseFalseFalseFalseTrueFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalsefirst_namelast_nameidapplicants_and_tenantsTrueFalseFalse01TrueFalseFalseFalse8False00FalseFalseright0000Falseemployer_name15150FalseFalseFalseFalseFalseFalseFalseFalse80True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse1False00FalseFalseleft0000Falsecity15200FalseFalseFalseFalseFalseFalseFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse2False00FalseFalseleft0000Falseemployer_phone15150FalseFalseFalseFalseFalseFalseFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse3False00FalseFalseleft0000Falseemployed_from900FalseFalseFalseFalseFalseFalseFalseFalse80True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse4False00FalseFalseleft0000Falseemployed_till900FalseFalseFalseFalseFalseFalseFalseFalse80True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse9False00FalseFalseleft0000Falseoccupation15400FalseFalseFalseFalseFalseFalseFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse6False00FalseFalsecenter0000Falsenotes1800FalseFalseFalseFalseFalseFalseFalseFalse50True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse0True00FalseFalseleft0000False
    1:9001:referencesFalseFalseTrueFalseFalseTrueFalseTrueTrueTrueTrueTrueTrueFalseTrueTrue11010TrueTrueTrue0ascapplication_from_storage.png0True0FalsehorizontalFalseFalse25%id400TrueFalseFalseTrueFalseTrueFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse0False00FalseFalseright0000Falsetenant400FalseFalseFalseFalseFalseTrueFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalsefirst_namelast_nameidapplicants_and_tenantsTrueFalseFalse01TrueFalseFalseFalse8False00FalseFalseleft0000Falsereference_name15150FalseFalseFalseFalseFalseFalseFalseFalse160True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse1False00FalseFalseleft0000Falsephone15150FalseFalseFalseFalseFalseFalseFalseFalse160True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse5False00FalseFalseleft0000False
    2:7:13:9001:rental_ownersFalseFalseTrueFalseFalseTrueFalseTrueTrueTrueTrueTrueTrueFalseTrueTrue11010properties;TrueFalseFalse0ascadministrator.png0True1TruehorizontalFalseFalse25%id400TrueFalseFalseTrueFalseTrueFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse0False00FalseFalseright0000Falsefirst_name15400FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse1False00FalseFalseleft0000Falselast_name15400FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse2False00FalseFalseleft0000Falsecompany_name15400FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse3False00FalseFalseleft0000Falsedate_of_birth900FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse4False00FalseFalseleft0000Falseprimary_email15400FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse5False31FalseFalseleft0000Falsealternate_email15400FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse6False31FalseFalseleft0000Falsephone15400FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse7False00FalseFalseleft0000Falsecountry15400FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse8False00FalseFalseleft0000Falsestreet15400FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse9False00FalseFalseleft0000Falsecity15400FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse10False00FalseFalseleft0000Falsestate15400FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse11False00FalseFalseleft0000Falsezip8150FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse12False00FalseFalseright0000Falsecomments1800FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse0True00FalseFalseleft0000False
    3:5:6:11:13:12:9001:propertiesFalseFalseTrueFalseFalseTrueFalseTrueTrueTrueTrueTrueTrueFalseTrueTrue11010applications_leases;property_photos;units;TrueFalseFalse1descapplication_home.png0True1Trueleft_imageTrueFalse25%id400TrueFalseFalseTrueFalseTrueFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse0False00FalseFalseright0000Falseproperty_name1800FalseFalseTrueFalseFalseFalseFalseFalse50True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse21FalseFalseFalseFalse1False00FalseFalseleft0000FalseAllowed file types: jpg, jpeg, gif, png]]>photo15400FalseFalseFalseFalseFalseFalseFalseFalse60True0TrueTrueFalseTrue250300TrueFalseTrue600800FalseFalse2048000jpg|jpeg|gif|pngFalseFalseTrueFalseFalse01FalseFalseFalseFalse0False00FalseFalseleft0000Falsetype15400FalseFalseTrueFalseFalseFalseFalseFalse80True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse21FalseFalseFalseFalse6False00FalseFalseleft0000Falsenumber_of_units8150FalseFalseFalseFalseFalseFalseFalseFalse50True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse8False00FalseFalseleft0000Falseowner400FalseFalseFalseFalseFalseTrueFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalsefirst_namelast_nameidrental_ownersTrueFalseFalse01FalseFalseFalseFalse17False00FalseFalseleft0000Falseoperating_account15400FalseFalseFalseFalseFalseFalseFalseFalse120True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseTrueFalseFalse10False00FalseFalseleft0000Falseproperty_reserve8150FalseFalseFalseFalseFalseFalseFalseFalse70True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseTrueFalseFalse11False00FalseFalseright0000Falselease_term15150FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueTrueFalseFalse5False00FalseFalseleft0000Falsecountry15400FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse12False00FalseFalseleft0000Falsestreet15400FalseFalseFalseFalseFalseFalseFalseFalse120True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse13False00FalseFalseleft0000FalseCity15400FalseFalseFalseFalseFalseFalseFalseFalse70True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse14False00FalseFalseleft0000FalseState15400FalseFalseFalseFalseFalseFalseFalseFalse50True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse15False00FalseFalseleft0000FalseZIP8150FalseFalseFalseFalseFalseFalseFalseFalse50True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse16False00FalseFalseleft0000False
    1:3:9001:property_photosFalseFalseTrueFalseFalseTrueFalseTrueTrueFalseTrueTrueTrueFalseTrueTrue11010TrueTrueTrue0asccamera_link.png0True1FalsehorizontalFalseFalse25%id400TrueFalseFalseTrueFalseTrueFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse0False00FalseFalseright0000Falseproperty400FalseFalseFalseFalseFalseTrueFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseproperty_nameidpropertiesTrueTrueFalse00TrueFalseFalseFalse1False00FalseFalseleft0000FalseAllowed file types: jpg, jpeg, gif, png]]>photo15400FalseFalseFalseFalseFalseFalseFalseFalse150False0TrueTrueFalseTrue100100TrueFalseTrue250250FalseFalse2048000jpg|jpeg|gif|pngFalseFalseTrueFalseFalse01FalseFalseFalseFalse0False00FalseFalseleft0000Falsedescription1800FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse0True00FalseFalseleft0000False
    1:8:7:9:2:4:11:12:13:15:9001:[{"label":"Change status","icon":"tags","field":"status","value":"allowUserToSpecify","fixedValue":"","confirmation":1,"groups":[],"hash":"02ra72cumuxuqy0sm1hq"}]unitsFalseFalseTrueFalseFalseTrueFalseTrueTrueTrueTrueTrueTrueFalseTrueTrue11010applications_leases;unit_photos;TrueFalseFalse2ascchange_password.png0True1TruehorizontalFalseFalse25%id400TrueFalseFalseTrueFalseTrueFalseFalse150True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse0False00FalseFalseright0000Falseproperty400FalseFalseFalseFalseFalseTrueFalseFalse90True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseproperty_nameidpropertiesTrueFalseFalse01FalseFalseFalseFalse1False00FalseFalseleft0000Falseunit_number15400FalseFalseFalseFalseFalseTrueFalseFalse40True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse2False00FalseFalseleft0000FalseAllowed file types: jpg, jpeg, gif, png]]>photo15400FalseFalseFalseFalseFalseFalseFalseFalse60True0TrueTrueFalseTrue250250TrueFalseTrue250250FalseFalse2048000jpg|jpeg|gif|pngFalseFalseTrueFalseFalse01FalseFalseFalseFalse0False00FalseFalseleft0000Falsestatus15400FalseFalseTrueFalseFalseFalseFalseFalse60True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse21FalseFalseFalseFalse13False00FalseFalseleft0000Falsesize15400FalseFalseFalseFalseFalseFalseFalseFalse60True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse3False00FalseFalsecenter0000Falsecountry400FalseFalseFalseFalseFalseTrueFalseFalse80True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalsecountryidpropertiesTrueFalseTrue01TrueFalseFalseFalse5False00FalseFalseleft0000Falsestreet400FalseFalseFalseFalseFalseTrueFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalsestreetidpropertiesTrueFalseTrue01FalseFalseFalseFalse6False00FalseFalseleft0000Falsecity400FalseFalseFalseFalseFalseTrueFalseFalse55True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseCityidpropertiesTrueFalseTrue01FalseFalseFalseFalse7False00FalseFalseleft0000Falsestate400FalseFalseFalseFalseFalseTrueFalseFalse40True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseStateidpropertiesTrueFalseTrue01FalseFalseFalseFalse8False00FalseFalsecenter0000Falsepostal_code400FalseFalseFalseFalseFalseTrueFalseFalse80True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseZIPidpropertiesTrueFalseTrue01TrueFalseFalseFalse9False00FalseFalseleft0000Falserooms15400FalseFalseFalseFalseFalseFalseFalseFalse45True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse10False00FalseFalsecenter0000Falsebathroom8150FalseFalseFalseFalseFalseFalseFalseFalse70True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse11False00FalseFalsecenter0000Falsefeatures1800FalseFalseFalseFalseFalseFalseFalseFalse150True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse31FalseFalseFalseFalse12False00FalseFalseleft0000Falsemarket_rent8150FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueTrueFalseFalse4False00FalseFalseright0000Falserental_amount862FalseFalseFalseFalseFalseFalseFalseFalse60True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse3False00FalseFalseright0000Falsedeposit_amount862FalseFalseFalseFalseFalseFalseFalseFalse50True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueTrueFalseFalse4False00FalseFalseright0000Falsedescription1800FalseFalseFalseFalseFalseFalseFalseFalse80True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse0True00FalseFalseleft0000False
    1:3:9001:unit_photosFalseFalseTrueFalseFalseTrueFalseTrueTrueTrueTrueTrueTrueFalseTrueTrue11010TrueTrueTrue0asccamera_link.png0True1FalsehorizontalFalseFalse25%id400TrueFalseFalseTrueFalseTrueFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse0False00FalseFalseright0000Falseunit400FalseFalseFalseFalseFalseTrueFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalsepropertyunit_numberidunitsTrueTrueFalse00TrueFalseFalseFalse1False00FalseFalseleft0000FalseAllowed file types: jpg, jpeg, gif, png]]>photo15400FalseFalseFalseFalseFalseFalseFalseFalse150False0TrueTrueFalseTrue100100TrueFalseTrue250250FalseFalse2048000jpg|jpeg|gif|pngFalseFalseTrueFalseFalse01FalseFalseFalseFalse0False00FalseFalseleft0000Falsedescription1800FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse0True00FalseFalseleft0000False
    +rental_property_managerlocalhostUTF-8False12FalseAmerica/New_YorkFalseFalseTrueFalsebootstrap.cssTrueTrue0345.972021-06-14 16:19:28C:\xampp\htdocs\open-source-apps\orpm\app0False402True{"events":{"end-of-lease":{"type":"end-of-lease","color":"danger","textColor":"danger","table":"applications_leases","customWhere":"`applications_leases`.`status` = 'Lease'","title":"<b>End of lease</b><br>Property {4} unit# {5}","allDay":true,"startDateField":"end_date","startTimeField":"","endDateField":"","endTimeField":""},"start-of-lease":{"type":"start-of-lease","color":"success","textColor":"success","table":"applications_leases","customWhere":"`applications_leases`.`status` = 'Lease'","title":"<b>Start of lease</b><br>Property {4} unit# {5}","allDay":true,"startDateField":"start_date","startTimeField":"","endDateField":"","endTimeField":""}},"calendars":{"lease-start-end":{"id":"lease-start-end","title":"Leases starting/ending","initial-view":"dayGridMonth","initial-date":"[today]","events":["end-of-lease","start-of-lease"],"locale":"","groups":["Admins"],"links-home":"1","links-navmenu":"1"}}}dummy12:9:1:4:13:9001:[{"report_hash":"id5fq91qu393nf0k42r1","title":"Applicants By Status","table":"applicants_and_tenants","table_index":0,"label":"status","caption1":"Status","caption2":"Count of Applicants and tenants","group_function":"count","group_function_field":null,"group_array":[],"look_up_table":"","look_up_value":"","label_field_index":"13","report_header_url":"","report_footer_url":"","data_table_section":1,"barchart_section":0,"piechart_section":1,"override_permissions":0,"custom_where":"","date_separator":"\/"}][{"label":"Change status","icon":"circle-arrow-right","field":"status","value":"allowUserToSpecify","fixedValue":"","confirmation":1,"groups":[],"hash":"m8xfpspfv9y3762768or"},{"label":"Edit Notes","icon":"pencil","field":"notes","value":"allowUserToSpecify","fixedValue":"","confirmation":1,"groups":[],"hash":"li3ml58uplm5oyp54b8x"}]applicants_and_tenantsFalseFalseTrueFalseFalseTrueFalseTrueTrueTrueTrueTrueTrueFalseTrueTrue11010applications_leases;residence_and_rental_history;employment_and_income_history;references;TrueFalseFalse2ascaccount_balances.png0False0TruehorizontalFalseFalse25%id400TrueFalseFalseTrueFalseTrueFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse0False00FalseFalseright0000Falselast_name15150FalseFalseFalseFalseFalseFalseFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse2False00FalseFalseleft0000Falsefirst_name15150FalseFalseFalseFalseFalseFalseFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse1False00FalseFalseleft0000Falseemail15800FalseFalseFalseFalseFalseFalseFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse0False31FalseFalseleft0000Falsephone15150FalseFalseFalseFalseFalseFalseFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse3False00FalseFalseleft0000Falsebirth_date900FalseFalseFalseFalseFalseFalseFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse0False00FalseFalseleft0000Falsedriver_license_number15150FalseFalseFalseFalseFalseFalseFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse4False00FalseFalsecenter0000Falsedriver_license_state15150FalseFalseFalseFalseFalseFalseFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueTrueFalseFalse5False00FalseFalsecenter0000Falserequested_lease_term15150FalseFalseFalseFalseFalseFalseFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueTrueFalseFalse8False00FalseFalseleft0000Falsemonthly_gross_pay882FalseFalseFalseFalseFalseFalseFalseFalse80True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse5False00FalseFalseright0000Falseadditional_income882FalseFalseFalseFalseFalseFalseFalseFalse80True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse7False00FalseFalseright0000Falseassets882FalseFalseFalseFalseFalseFalseFalseFalse80True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse8False00FalseFalseright0000Falsestatus15400FalseFalseTrueFalseFalseFalseFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse21FalseFalseFalseFalse9False00FalseFalsecenter0000Falsenotes1800FalseFalseFalseFalseFalseFalseFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseTrueFalseFalse0True00FalseFalseleft0000False
    1:3:2:5:7:8:16:9001:[{"report_hash":"rs1tinh2qcc2azdob0r6","title":"Applications\/Leases Over Time","table":"applications_leases","table_index":1,"label":"status","caption1":"Application status","caption2":"Count of Applications\/Leases","group_function":"count","group_function_field":null,"group_array":[],"look_up_table":"","look_up_value":"","label_field_index":"3","date_field":"start_date","date_field_index":"8","report_header_url":"","report_footer_url":"","data_table_section":1,"barchart_section":1,"piechart_section":0,"override_permissions":0,"custom_where":"","date_separator":"\/"},{"report_hash":"7dlamlewaen7fh5e7omb","title":"Applications\/Leases By Property","table":"applications_leases","table_index":1,"label":"property","caption1":"Property","caption2":"Count of Applications\/Leases","group_function":"count","group_function_field":null,"group_array":[],"look_up_table":"properties","look_up_value":"property_name","label_field_index":"4","date_field":"start_date","date_field_index":"8","report_header_url":"","report_footer_url":"","data_table_section":1,"barchart_section":0,"piechart_section":1,"override_permissions":0,"custom_where":"","date_separator":"\/"},{"report_hash":"uh2omkvwpr1oqfvdt70y","title":"Leases By Property Over Time","table":"applications_leases","table_index":1,"label":"property","caption1":"Property","caption2":"Count of Applications\/Leases","group_function":"count","group_function_field":null,"group_array":[],"look_up_table":"properties","look_up_value":"property_name","label_field_index":"4","date_field":"start_date","date_field_index":"8","report_header_url":"","report_footer_url":"","data_table_section":1,"barchart_section":0,"piechart_section":1,"override_permissions":0,"custom_where":"`applications_leases`.`status`='Lease'","date_separator":"\/"},{"report_hash":"lezfr2w8z8mwp5yq26pw","title":"Lease Value By Property Over Time","table":"applications_leases","table_index":1,"label":"property","caption1":"Property","caption2":"Sum of Applications\/Leases","group_function":"sum","group_function_field":"rent","group_array":[],"look_up_table":"properties","look_up_value":"property_name","label_field_index":"4","date_field":"start_date","date_field_index":"8","report_header_url":"","report_footer_url":"","data_table_section":1,"barchart_section":0,"piechart_section":1,"override_permissions":0,"custom_where":"`applications_leases`.`status` LIKE '%lease'","date_separator":"\/"}][{"label":"Approve application","icon":"ok","field":"status","value":"fixedValue","fixedValue":"Lease","confirmation":1,"groups":[],"hash":"ghqe4agakj7de10gc0ba"}]applications_leasesFalseFalseTrueFalseFalseTrueFalseTrueTrueTrueTrueTrueTrueFalseTrueTrue11010TrueFalseFalse0asccurriculum_vitae.png0True0TruehorizontalFalseFalse25%id400TrueFalseFalseTrueFalseTrueFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse0False00FalseFalseright0000Falsetenants400FalseFalseFalseFalseFalseTrueFalseFalse60True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalsefirst_namelast_nameidapplicants_and_tenantsTrueFalseFalse01FalseFalseFalseFalse3False00FalseFalseleft0000Falsestatus15400FalseFalseTrueFalseFalseFalseFalseFalse50True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse21FalseFalseFalseFalse7False00FalseFalseleft0000Falseproperty400FalseFalseFalseFalseFalseTrueFalseFalse80True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseproperty_nameidpropertiesTrueFalseFalse01FalseFalseFalseFalse1False00FalseFalseleft0000Falseunit400FalseFalseFalseFalseFalseTrueFalseFalse60True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseunit_numberidunitsTrueFalseFalse01FalseFalseFalseFalse11False00FalseFalsepropertyleft0000Falsetype15400FalseFalseTrueFalseFalseFalseFalseFalse40True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse21FalseFalseFalseFalse2False00FalseFalseleft0000Falsetotal_number_of_occupants15150FalseFalseFalseFalseFalseFalseFalseFalse70True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse6False00FalseFalsecenter0000Falsestart_date900FalseFalseFalseFalseFalseFalseFalseFalse70True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse0False00FalseFalseleft0000Falseend_date900FalseFalseFalseFalseFalseFalseFalseFalse60True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse21FalseFalseFalseFalse0False00FalseFalseleft0000Falserecurring_charges_frequency15400FalseFalseTrueFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse4False00FalseFalseleft0000Falsenext_due_date900FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse0False00FalseFalseleft0000Falserent882FalseFalseFalseFalseFalseFalseFalseFalse70True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse5False00FalseFalseright0000Falsesecurity_deposit8152FalseFalseFalseFalseFalseFalseFalseFalse80True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse6False00FalseFalseright0000Falsesecurity_deposit_date900FalseFalseFalseFalseFalseFalseFalseFalse80True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse0False00FalseFalseleft0000Falseemergency_contact151000FalseFalseFalseFalseFalseFalseFalseFalse120True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse10False00FalseFalseleft0000Falseco_signer_details151000FalseFalseFalseFalseFalseFalseFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse9False00FalseFalseleft0000Falsenotes1800FalseFalseFalseFalseFalseFalseFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse0True00FalseFalseleft0000FalseThe applicant must agree to the following terms:
    1. I understand that this is a routine application to establish credit, character, employment, and rental history.

    2. I also understand that this is NOT an agreement to rent and that all applications must be approved.

    3. I authorize verification of references given.

    4. I declare that the statements above are true and correct, and I agree that the landlord may terminate my agreement entered into in reliance on any misstatement made above.

    5. ]]>agreement15400FalseFalseFalseFalseFalseFalseFalseFalse70True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse8False00TrueFalsecenter0000False
    1:8:9:9001:residence_and_rental_historyFalseFalseTrueFalseFalseTrueFalseTrueTrueTrueTrueTrueTrueFalseTrueTrue11010TrueTrueTrue0ascdocument_comment_above.png0True0FalsehorizontalFalseFalse25%id400TrueFalseFalseTrueFalseTrueFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse0False00FalseFalseright0000Falsetenant400FalseFalseFalseFalseFalseTrueFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalsefirst_namelast_nameidapplicants_and_tenantsTrueFalseFalse01TrueFalseFalseFalse8False00FalseFalseright0000Falseaddress15400FalseFalseFalseFalseFalseTrueFalseFalse180True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse1False00FalseFalseleft0000Falselandlord_or_manager_name15150FalseFalseFalseFalseFalseFalseFalseFalse120True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse2False00FalseFalseleft0000Falselandlord_or_manager_phone15150FalseFalseFalseFalseFalseFalseFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse3False00FalseFalseleft0000Falsemonthly_rent862FalseFalseFalseFalseFalseFalseFalseFalse80True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse4False00FalseFalseright0000Falseduration_of_residency_from900FalseFalseFalseFalseFalseFalseFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse5False00FalseFalseleft0000Falseto900FalseFalseFalseFalseFalseFalseFalseFalse80True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse7False00FalseFalseleft0000Falsereason_for_leaving15400FalseFalseFalseFalseFalseFalseFalseFalse120True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse6False00FalseFalseleft0000Falsenotes1800FalseFalseFalseFalseFalseFalseFalseFalse120True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse0True00FalseFalseleft0000False
    1:2:7:8:9001:employment_and_income_historyFalseFalseTrueFalseFalseTrueFalseTrueTrueTrueTrueTrueTrueFalseTrueTrue11010TrueTrueTrue0asccash_stack.png0True0FalsehorizontalFalseFalse25%id400TrueFalseFalseTrueFalseTrueFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse0False00FalseFalseright0000Falsetenant400FalseFalseFalseFalseFalseTrueFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalsefirst_namelast_nameidapplicants_and_tenantsTrueFalseFalse01TrueFalseFalseFalse8False00FalseFalseright0000Falseemployer_name15150FalseFalseFalseFalseFalseFalseFalseFalse80True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse1False00FalseFalseleft0000Falsecity15200FalseFalseFalseFalseFalseFalseFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse2False00FalseFalseleft0000Falseemployer_phone15150FalseFalseFalseFalseFalseFalseFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse3False00FalseFalseleft0000Falseemployed_from900FalseFalseFalseFalseFalseFalseFalseFalse80True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse4False00FalseFalseleft0000Falseemployed_till900FalseFalseFalseFalseFalseFalseFalseFalse80True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse9False00FalseFalseleft0000Falseoccupation15400FalseFalseFalseFalseFalseFalseFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse6False00FalseFalsecenter0000Falsenotes1800FalseFalseFalseFalseFalseFalseFalseFalse50True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse0True00FalseFalseleft0000False
    1:9001:referencesFalseFalseTrueFalseFalseTrueFalseTrueTrueTrueTrueTrueTrueFalseTrueTrue11010TrueTrueTrue0ascapplication_from_storage.png0True0FalsehorizontalFalseFalse25%id400TrueFalseFalseTrueFalseTrueFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse0False00FalseFalseright0000Falsetenant400FalseFalseFalseFalseFalseTrueFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalsefirst_namelast_nameidapplicants_and_tenantsTrueFalseFalse01TrueFalseFalseFalse8False00FalseFalseleft0000Falsereference_name15150FalseFalseFalseFalseFalseFalseFalseFalse160True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse1False00FalseFalseleft0000Falsephone15150FalseFalseFalseFalseFalseFalseFalseFalse160True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse5False00FalseFalseleft0000False
    2:7:13:9001:rental_ownersFalseFalseTrueFalseFalseTrueFalseTrueTrueTrueTrueTrueTrueFalseTrueTrue11010properties;TrueFalseFalse0ascadministrator.png0True1TruehorizontalFalseFalse25%id400TrueFalseFalseTrueFalseTrueFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse0False00FalseFalseright0000Falsefirst_name15400FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse1False00FalseFalseleft0000Falselast_name15400FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse2False00FalseFalseleft0000Falsecompany_name15400FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse3False00FalseFalseleft0000Falsedate_of_birth900FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse4False00FalseFalseleft0000Falseprimary_email15400FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse5False31FalseFalseleft0000Falsealternate_email15400FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse6False31FalseFalseleft0000Falsephone15400FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse7False00FalseFalseleft0000Falsecountry15400FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse8False00FalseFalseleft0000Falsestreet15400FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse9False00FalseFalseleft0000Falsecity15400FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse10False00FalseFalseleft0000Falsestate15400FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse11False00FalseFalseleft0000Falsezip8150FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse12False00FalseFalseright0000Falsecomments1800FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse0True00FalseFalseleft0000False
    3:5:6:11:13:12:9001:propertiesFalseFalseTrueFalseFalseTrueFalseTrueTrueTrueTrueTrueTrueFalseTrueTrue11010applications_leases;property_photos;units;TrueFalseFalse1descapplication_home.png0True1Trueleft_imageTrueFalse25%id400TrueFalseFalseTrueFalseTrueFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse0False00FalseFalseright0000Falseproperty_name1800FalseFalseTrueFalseFalseFalseFalseFalse50True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse21FalseFalseFalseFalse1False00FalseFalseleft0000FalseAllowed file types: jpg, jpeg, gif, png]]>photo15400FalseFalseFalseFalseFalseFalseFalseFalse60True0TrueTrueFalseTrue250300TrueFalseTrue600800FalseFalse2048000jpg|jpeg|gif|pngFalseFalseTrueFalseFalse01FalseFalseFalseFalse0False00FalseFalseleft0000Falsetype15400FalseFalseTrueFalseFalseFalseFalseFalse80True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse21FalseFalseFalseFalse6False00FalseFalseleft0000Falsenumber_of_units8150FalseFalseFalseFalseFalseFalseFalseFalse50True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse8False00FalseFalseleft0000Falseowner400FalseFalseFalseFalseFalseTrueFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalsefirst_namelast_nameidrental_ownersTrueFalseFalse01FalseFalseFalseFalse17False00FalseFalseleft0000Falseoperating_account15400FalseFalseFalseFalseFalseFalseFalseFalse120True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseTrueFalseFalse10False00FalseFalseleft0000Falseproperty_reserve8150FalseFalseFalseFalseFalseFalseFalseFalse70True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseTrueFalseFalse11False00FalseFalseright0000Falselease_term15150FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueTrueFalseFalse5False00FalseFalseleft0000Falsecountry15400FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse12False00FalseFalseleft0000Falsestreet15400FalseFalseFalseFalseFalseFalseFalseFalse120True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse13False00FalseFalseleft0000FalseCity15400FalseFalseFalseFalseFalseFalseFalseFalse70True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse14False00FalseFalseleft0000FalseState15400FalseFalseFalseFalseFalseFalseFalseFalse50True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse15False00FalseFalseleft0000FalseZIP8150FalseFalseFalseFalseFalseFalseFalseFalse50True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse16False00FalseFalseleft0000False
    1:3:9001:property_photosFalseFalseTrueFalseFalseTrueFalseTrueTrueFalseTrueTrueTrueFalseTrueTrue11010TrueTrueTrue0asccamera_link.png0True1FalsehorizontalFalseFalse25%id400TrueFalseFalseTrueFalseTrueFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse0False00FalseFalseright0000Falseproperty400FalseFalseFalseFalseFalseTrueFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseproperty_nameidpropertiesTrueTrueFalse00TrueFalseFalseFalse1False00FalseFalseleft0000FalseAllowed file types: jpg, jpeg, gif, png]]>photo15400FalseFalseFalseFalseFalseFalseFalseFalse150False0TrueTrueFalseTrue100100TrueFalseTrue250250FalseFalse2048000jpg|jpeg|gif|pngFalseFalseTrueFalseFalse01FalseFalseFalseFalse0False00FalseFalseleft0000Falsedescription1800FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse0True00FalseFalseleft0000False
    1:8:7:9:2:4:11:12:13:15:9001:[{"label":"Change status","icon":"tags","field":"status","value":"allowUserToSpecify","fixedValue":"","confirmation":1,"groups":[],"hash":"02ra72cumuxuqy0sm1hq"}]unitsFalseFalseTrueFalseFalseTrueFalseTrueTrueTrueTrueTrueTrueFalseTrueTrue11010applications_leases;unit_photos;TrueFalseFalse2ascchange_password.png0True1TruehorizontalFalseFalse25%id400TrueFalseFalseTrueFalseTrueFalseFalse150True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse0False00FalseFalseright0000Falseproperty400FalseFalseFalseFalseFalseTrueFalseFalse90True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseproperty_nameidpropertiesTrueFalseFalse01FalseFalseFalseFalse1False00FalseFalseleft0000Falseunit_number15400FalseFalseFalseFalseFalseTrueFalseFalse40True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse2False00FalseFalseleft0000FalseAllowed file types: jpg, jpeg, gif, png]]>photo15400FalseFalseFalseFalseFalseFalseFalseFalse60True0TrueTrueFalseTrue250250TrueFalseTrue250250FalseFalse2048000jpg|jpeg|gif|pngFalseFalseTrueFalseFalse01FalseFalseFalseFalse0False00FalseFalseleft0000Falsestatus15400FalseFalseTrueFalseFalseFalseFalseFalse60True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse21FalseFalseFalseFalse13False00FalseFalseleft0000Falsesize15400FalseFalseFalseFalseFalseFalseFalseFalse60True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse3False00FalseFalsecenter0000Falsecountry400FalseFalseFalseFalseFalseTrueFalseFalse80True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalsecountryidpropertiesTrueFalseTrue01TrueFalseFalseFalse5False00FalseFalseleft0000Falsestreet400FalseFalseFalseFalseFalseTrueFalseFalse100True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalsestreetidpropertiesTrueFalseTrue01FalseFalseFalseFalse6False00FalseFalseleft0000Falsecity400FalseFalseFalseFalseFalseTrueFalseFalse55True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseCityidpropertiesTrueFalseTrue01FalseFalseFalseFalse7False00FalseFalseleft0000Falsestate400FalseFalseFalseFalseFalseTrueFalseFalse40True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseStateidpropertiesTrueFalseTrue01FalseFalseFalseFalse8False00FalseFalsecenter0000Falsepostal_code400FalseFalseFalseFalseFalseTrueFalseFalse80True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseZIPidpropertiesTrueFalseTrue01TrueFalseFalseFalse9False00FalseFalseleft0000Falserooms15400FalseFalseFalseFalseFalseFalseFalseFalse45True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse10False00FalseFalsecenter0000Falsebathroom8150FalseFalseFalseFalseFalseFalseFalseFalse70True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse11False00FalseFalsecenter0000Falsefeatures1800FalseFalseFalseFalseFalseFalseFalseFalse150True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse31FalseFalseFalseFalse12False00FalseFalseleft0000Falsemarket_rent8150FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueTrueFalseFalse4False00FalseFalseright0000Falserental_amount862FalseFalseFalseFalseFalseFalseFalseFalse60True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse3False00FalseFalseright0000Falsedeposit_amount862FalseFalseFalseFalseFalseFalseFalseFalse50True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueTrueFalseFalse4False00FalseFalseright0000Falsedescription1800FalseFalseFalseFalseFalseFalseFalseFalse80True0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse0True00FalseFalseleft0000False
    1:3:9001:unit_photosFalseFalseTrueFalseFalseTrueFalseTrueTrueTrueTrueTrueTrueFalseTrueTrue11010TrueTrueTrue0asccamera_link.png0True1FalsehorizontalFalseFalse25%id400TrueFalseFalseTrueFalseTrueFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01TrueFalseFalseFalse0False00FalseFalseright0000Falseunit400FalseFalseFalseFalseFalseTrueFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalsepropertyunit_numberidunitsTrueTrueFalse00TrueFalseFalseFalse1False00FalseFalseleft0000FalseAllowed file types: jpg, jpeg, gif, png]]>photo15400FalseFalseFalseFalseFalseFalseFalseFalse150False0TrueTrueFalseTrue100100TrueFalseTrue250250FalseFalse2048000jpg|jpeg|gif|pngFalseFalseTrueFalseFalse01FalseFalseFalseFalse0False00FalseFalseleft0000Falsedescription1800FalseFalseFalseFalseFalseFalseFalseFalse150False0FalseFalseFalseFalse00FalseFalseFalse00FalseFalse0FalseFalseTrueFalseFalse01FalseFalseFalseFalse0True00FalseFalseleft0000False