Compare commits
140 Commits
surplus_ac
...
yafr_20090
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d8760cf2b6 | ||
|
|
feb15cac49 | ||
|
|
40047d89d8 | ||
|
|
94cc553723 | ||
|
|
166a4f44d9 | ||
|
|
633a019fc5 | ||
|
|
bddcca8d9e | ||
|
|
6e6f7f4f43 | ||
|
|
64ce95e404 | ||
|
|
55bcdca935 | ||
|
|
6f035c2052 | ||
|
|
538c8077d2 | ||
|
|
e37e40f355 | ||
|
|
9fca2e7d4f | ||
|
|
5c7df5f2eb | ||
|
|
e0e7fcfc51 | ||
|
|
8ce654d22d | ||
|
|
6cd45236d9 | ||
|
|
009503bf7b | ||
|
|
4f652eb9a1 | ||
|
|
0b9061794e | ||
|
|
1055a00476 | ||
|
|
4f758b5480 | ||
|
|
ec2ea2a60e | ||
|
|
196a7ae6e6 | ||
|
|
24ad1ef49c | ||
|
|
019b59fdbc | ||
|
|
8892583db4 | ||
|
|
ab840075c2 | ||
|
|
10fe7bf230 | ||
|
|
5bcd424055 | ||
|
|
7cb0381060 | ||
|
|
935920a38a | ||
|
|
df3bbb698e | ||
|
|
a2c1779454 | ||
|
|
7a50d02a44 | ||
|
|
22edc5a524 | ||
|
|
bc33f3cb2c | ||
|
|
e3a606ebf0 | ||
|
|
8e91eadf53 | ||
|
|
7e665af8be | ||
|
|
2727812144 | ||
|
|
dd7135df49 | ||
|
|
0297266a34 | ||
|
|
3b1e06bade | ||
|
|
ce54ed2341 | ||
|
|
b4097850dd | ||
|
|
ac23a1be18 | ||
|
|
88d468d20c | ||
|
|
bb9ce64657 | ||
|
|
77a01a16c4 | ||
|
|
d26b6e99bd | ||
|
|
3096759738 | ||
|
|
011481be2d | ||
|
|
21e11298eb | ||
|
|
8b93f6ad91 | ||
|
|
9b9c6d8f29 | ||
|
|
44cda10211 | ||
|
|
0a62c8a816 | ||
|
|
c23d4c6209 | ||
|
|
9923ccc6c3 | ||
|
|
c4d4c3c989 | ||
|
|
b94c8e56b4 | ||
|
|
bde335f68c | ||
|
|
515046efd6 | ||
|
|
8c334f236d | ||
|
|
18848db6b1 | ||
|
|
e4d20cc849 | ||
|
|
355af40ed5 | ||
|
|
9f1a6b8087 | ||
|
|
77de94df54 | ||
|
|
00a306355a | ||
|
|
f7c2493f99 | ||
|
|
2bc2fb951b | ||
|
|
cc86bb99c1 | ||
|
|
eebb7c7c94 | ||
|
|
88a1a62087 | ||
|
|
29c157475b | ||
|
|
237e744002 | ||
|
|
6c38b08700 | ||
|
|
29bb08adca | ||
|
|
ca69698693 | ||
|
|
9274bb9b0c | ||
|
|
32ea8734e1 | ||
|
|
5bb240708f | ||
|
|
3e366d3dad | ||
|
|
0de2931f66 | ||
|
|
966dc495e2 | ||
|
|
df869ef70a | ||
|
|
8dcf5956fe | ||
|
|
654e79803f | ||
|
|
dcbff5a956 | ||
|
|
b1fb5e29db | ||
|
|
a6c3b612ba | ||
|
|
ee9ae2079c | ||
|
|
58495d5607 | ||
|
|
ebcc494e36 | ||
|
|
835853c51c | ||
|
|
622eca3f1a | ||
|
|
65b132ac8e | ||
|
|
410e588e97 | ||
|
|
9aba878ee6 | ||
|
|
bd90424080 | ||
|
|
a939b0839b | ||
|
|
2d8c536f33 | ||
|
|
2d51340a56 | ||
|
|
98c4a66f2f | ||
|
|
29b829d3af | ||
|
|
d0aa3799fa | ||
|
|
5e78d32ec4 | ||
|
|
a76421c858 | ||
|
|
28086651e5 | ||
|
|
da80c3623e | ||
|
|
309512dde0 | ||
|
|
8b1d3c9830 | ||
|
|
31265104e1 | ||
|
|
c719d11df2 | ||
|
|
e6d65a5212 | ||
|
|
e21233954a | ||
|
|
d36cfd9653 | ||
|
|
d141f61055 | ||
|
|
4b8dc3da02 | ||
|
|
709689b15b | ||
|
|
3eb989e03c | ||
|
|
eb019dd9e5 | ||
|
|
719373e534 | ||
|
|
1c5d97f06d | ||
|
|
589168440c | ||
|
|
73c5a20158 | ||
|
|
a44654ec01 | ||
|
|
7a331d5f4f | ||
|
|
daf9fe9391 | ||
|
|
d8767cfb73 | ||
|
|
64792e6fe2 | ||
|
|
424276eeb4 | ||
|
|
377a4cc88c | ||
|
|
170f660528 | ||
|
|
cbdce4f166 | ||
|
|
e9b9bdc420 | ||
|
|
704412727d |
5883
db/property_manager.sql
Normal file
@@ -878,7 +878,7 @@ INSERT INTO `pmgr_accounts` (`type`, `name`)
|
||||
VALUES
|
||||
('ASSET', 'A/R' ),
|
||||
('LIABILITY', 'A/P' ),
|
||||
('LIABILITY', 'Customer Credit' );
|
||||
('LIABILITY', 'Credit' );
|
||||
INSERT INTO `pmgr_accounts` (`type`, `name`, `receipts`)
|
||||
VALUES
|
||||
('ASSET', 'Cash', 1),
|
||||
@@ -971,6 +971,7 @@ CREATE TABLE `pmgr_transactions` (
|
||||
'CREDIT_NOTE', -- Inverse of Sales Invoice
|
||||
'PAYMENT', -- Actual payment
|
||||
'DEPOSIT',
|
||||
'AUTO_DEPOSIT', -- Fundamentally same as DEPOSIT
|
||||
'WITHDRAWAL',
|
||||
'CLOSE', -- Essentially an internal (not accounting) transaction
|
||||
-- 'CREDIT',
|
||||
@@ -1148,6 +1149,9 @@ CREATE TABLE `pmgr_tender_types` (
|
||||
-- include credit cards, debit cards, and ACH transfers.
|
||||
`tillable` TINYINT(1) UNSIGNED NOT NULL DEFAULT 1,
|
||||
|
||||
-- Should these items be deposited automatically?
|
||||
`auto_deposit` TINYINT(1) UNSIGNED NOT NULL DEFAULT 0,
|
||||
|
||||
-- Names of the 4 data fields (or NULL if not used)
|
||||
-- Not the most robust of solutions, especially since
|
||||
-- it requires (or strongly implicates) that all fields
|
||||
@@ -1171,6 +1175,10 @@ CREATE TABLE `pmgr_tender_types` (
|
||||
-- account, either distinct or non-distinct from others
|
||||
`account_id` INT(10) UNSIGNED NOT NULL,
|
||||
|
||||
-- Which account should these items be deposited in?
|
||||
-- This may or may not actually be used for all types
|
||||
-- but will likely get used for auto deposit items.
|
||||
`deposit_account_id` INT(10) UNSIGNED DEFAULT NULL,
|
||||
|
||||
`comment` VARCHAR(255) DEFAULT NULL,
|
||||
|
||||
@@ -1220,6 +1228,8 @@ CREATE TABLE `pmgr_tenders` (
|
||||
`ledger_entry_id` INT(10) UNSIGNED NOT NULL,
|
||||
-- The ledger entry if this tender is marked NSF
|
||||
`nsf_ledger_entry_id` INT(10) UNSIGNED DEFAULT NULL,
|
||||
-- The ledger entry if this actual deposit transaction
|
||||
`deposit_ledger_entry_id` INT(10) UNSIGNED DEFAULT NULL,
|
||||
-- The deposit transaction that included these monies
|
||||
`deposit_transaction_id` INT(10) UNSIGNED DEFAULT NULL,
|
||||
-- The NSF transaction coming back from the bank.
|
||||
|
||||
@@ -38,6 +38,80 @@ DELETE T FROM pmgr_transactions T
|
||||
WHERE T.id = @tid;
|
||||
|
||||
|
||||
-- Delete all but one customer
|
||||
SET @cid = 6;
|
||||
-- DELETE T FROM pmgr_transactions T
|
||||
-- LEFT JOIN pmgr_customers C ON C.id = T.customer_id
|
||||
-- WHERE C.id IS NOT NULL AND C.id <> @cid;
|
||||
DELETE C FROM pmgr_customers C
|
||||
WHERE C.id <> @cid;
|
||||
DELETE L FROM pmgr_leases L
|
||||
LEFT JOIN pmgr_customers C ON C.id = L.customer_id
|
||||
WHERE C.id IS NULL;
|
||||
DELETE T FROM pmgr_transactions T
|
||||
LEFT JOIN pmgr_customers C ON C.id = T.customer_id
|
||||
WHERE C.id IS NULL;
|
||||
DELETE SE FROM pmgr_statement_entries SE
|
||||
LEFT JOIN pmgr_customers C ON C.id = SE.customer_id
|
||||
WHERE C.id IS NULL;
|
||||
DELETE LE FROM pmgr_ledger_entries LE
|
||||
LEFT JOIN pmgr_transactions T ON T.id = LE.transaction_id
|
||||
WHERE T.id IS NULL;
|
||||
DELETE M FROM pmgr_tenders M
|
||||
LEFT JOIN pmgr_ledger_entries LE ON M.ledger_entry_id = LE.id
|
||||
WHERE LE.id IS NULL;
|
||||
DELETE DE FROM pmgr_double_entries DE
|
||||
LEFT JOIN pmgr_ledger_entries LE ON LE.id = DE.debit_entry_id
|
||||
WHERE LE.id IS NULL;
|
||||
DELETE DE FROM pmgr_double_entries DE
|
||||
LEFT JOIN pmgr_ledger_entries LE ON LE.id = DE.credit_entry_id
|
||||
WHERE LE.id IS NULL;
|
||||
UPDATE pmgr_ledger_entries LE, pmgr_ledgers L, pmgr_accounts A
|
||||
SET LE.ledger_id = L.id
|
||||
WHERE A.id = LE.account_id AND L.account_id = A.id AND L.sequence = 1;
|
||||
DELETE FROM pmgr_ledgers WHERE sequence > 1;
|
||||
UPDATE pmgr_ledgers SET prior_ledger_id = NULL, close_transaction_id = NULL;
|
||||
|
||||
|
||||
-- Delete a ledger entry, associated double entry, and matching ledger_entry
|
||||
SET @leid = 1365;
|
||||
DELETE FROM pmgr_ledger_entries WHERE id = @leid;
|
||||
DELETE DE FROM pmgr_double_entries DE
|
||||
LEFT JOIN pmgr_ledger_entries LE ON LE.id = DE.debit_entry_id
|
||||
WHERE LE.id IS NULL;
|
||||
DELETE DE FROM pmgr_double_entries DE
|
||||
LEFT JOIN pmgr_ledger_entries LE ON LE.id = DE.credit_entry_id
|
||||
WHERE LE.id IS NULL;
|
||||
DELETE LE FROM pmgr_ledger_entries LE
|
||||
LEFT JOIN pmgr_double_entries DE
|
||||
ON DE.credit_entry_id = LE.id OR DE.debit_entry_id = LE.id
|
||||
WHERE DE.id IS NULL;
|
||||
|
||||
-- Add and update every Tender.ledger_entry_id (for rolling up old databases)
|
||||
-- Takes a while to complete (~30s at time of writing)
|
||||
ALTER TABLE `pmgr_tenders`
|
||||
ADD `deposit_ledger_entry_id` INT UNSIGNED DEFAULT NULL
|
||||
AFTER `nsf_ledger_entry_id`;
|
||||
UPDATE
|
||||
pmgr_tenders Tnd
|
||||
JOIN pmgr_tender_types TndT ON TndT.id = Tnd.tender_type_id
|
||||
JOIN pmgr_transactions T ON T.id = Tnd.deposit_transaction_id
|
||||
JOIN pmgr_ledger_entries LE ON LE.transaction_id = T.id AND LE.account_id = TndT.account_id
|
||||
JOIN pmgr_double_entries DE ON DE.debit_entry_id = LE.id OR DE.credit_entry_id = LE.id
|
||||
JOIN pmgr_ledger_entries LEd ON (DE.debit_entry_id = LEd.id OR DE.credit_entry_id = LEd.id)
|
||||
AND LEd.id <> LE.id
|
||||
SET Tnd.deposit_ledger_entry_id = LEd.id;
|
||||
|
||||
|
||||
-- Add auto_deposit and deposit_account_id to tenders
|
||||
ALTER TABLE `pmgr_tender_types`
|
||||
ADD `auto_deposit` TINYINT(1) UNSIGNED DEFAULT '0' NOT NULL
|
||||
AFTER `tillable`;
|
||||
ALTER TABLE `pmgr_tender_types`
|
||||
ADD `deposit_account_id` INTEGER(10) UNSIGNED DEFAULT NULL
|
||||
AFTER `account_id`;
|
||||
|
||||
|
||||
-- Determine economic conditions
|
||||
SELECT `status`, COUNT(id), SUM(rent) FROM pmgr_units
|
||||
GROUP BY `status` WITH ROLLUP;
|
||||
|
||||
@@ -37,7 +37,7 @@ Operations to be functional
|
||||
X - Create Customer ID/Account
|
||||
X - Add Contact information to Customer
|
||||
X - Move Customer into Unit
|
||||
? - Enter Rent Concessions given
|
||||
X - Enter Rent Concessions given
|
||||
X - Asses Rent Charges
|
||||
X - Asses Late Charges
|
||||
X - Asses Security Deposits
|
||||
@@ -49,7 +49,7 @@ Operations to be functional
|
||||
X - Handle NSF checks
|
||||
X - Assess NSF Fees
|
||||
X - Determine Lease Paid-Through status
|
||||
- Report: List of customers overdue
|
||||
X - Report: List of customers overdue
|
||||
X - Flag unit as overlocked
|
||||
X - Flag unit as evicting
|
||||
X - Flag unit as normal status
|
||||
|
||||
@@ -5,7 +5,7 @@ use Data::Dumper;
|
||||
use File::Copy;
|
||||
|
||||
my $closing_one_transaction = 0;
|
||||
my $work_from_scratch = 0;
|
||||
my $work_from_scratch = 1;
|
||||
|
||||
# Internally adjust all numbers coming from the database to
|
||||
# be in inches. Not necessary to go to this detail, but the
|
||||
@@ -567,7 +567,9 @@ foreach my $tender_name ('Cash', 'Check', 'Money Order', 'ACH',
|
||||
addRow('tender_types', {
|
||||
'name' => $tender_name,
|
||||
'account_id' => $newdb{'lookup'}{'account'}{$tender_name}{'account_id'},
|
||||
'deposit_account_id' => $newdb{'lookup'}{'account'}{'Bank'}{'account_id'},
|
||||
'tillable' => $tillable,
|
||||
'auto_deposit' => ($tender_name eq 'ACH') ? 1 : 0,
|
||||
'data1_name' => $name1,
|
||||
'data2_name' => $name2,
|
||||
'data3_name' => $name3,
|
||||
|
||||
@@ -27,25 +27,29 @@
|
||||
* @license http://www.opensource.org/licenses/mit-license.php The MIT License
|
||||
*/
|
||||
|
||||
$default_path = array('controller' => 'maps', 'action' => 'view', '1');
|
||||
|
||||
/**
|
||||
* Here, we are connecting '/' (base path) to our site map.
|
||||
* It's hardcoded to map #1, but at some point we'll implement
|
||||
* a login mechanism and the default path will be to log on instead.
|
||||
*/
|
||||
Router::connect('/', array('controller' => 'maps', 'action' => 'view', '1'));
|
||||
Router::connect('/', $default_path);
|
||||
|
||||
/*
|
||||
* Route for admin functionality
|
||||
*/
|
||||
Router::connect('/admin',
|
||||
array('admin_route' => true) + $default_path);
|
||||
Router::connect('/admin/:controller/:action/*',
|
||||
array('action' => null, 'admin_route' => true)
|
||||
);
|
||||
array('admin_route' => true, 'action' => null));
|
||||
|
||||
/*
|
||||
* Route for development functionality
|
||||
*/
|
||||
Router::connect('/dev',
|
||||
array('dev_route' => true) + $default_path);
|
||||
Router::connect('/dev/:controller/:action/*',
|
||||
array('action' => null, 'dev_route' => true)
|
||||
);
|
||||
array('dev_route' => true, 'action' => null));
|
||||
|
||||
?>
|
||||
@@ -326,7 +326,37 @@ class CustomersController extends AppController {
|
||||
}
|
||||
|
||||
if ($id) {
|
||||
$this->data = $this->Customer->details($id);
|
||||
// REVISIT <AP>: 20090816
|
||||
// This should never need to be done by a controller.
|
||||
// However, until things stabilize, this gives the
|
||||
// user a way to update any cached items on the
|
||||
// customer, by just clicking Edit then Cancel.
|
||||
$this->Customer->update($id);
|
||||
|
||||
// Get details on this customer, its contacts and leases
|
||||
$customer = $this->Customer->find
|
||||
('first', array
|
||||
('contain' => array
|
||||
(// Models
|
||||
'Contact' =>
|
||||
array('order' => array('Contact.display_name'),
|
||||
// Models
|
||||
'ContactPhone',
|
||||
'ContactEmail',
|
||||
'ContactAddress',
|
||||
),
|
||||
'Lease' =>
|
||||
array('Unit' =>
|
||||
array('order' => array('sort_order'),
|
||||
'fields' => array('id', 'name'),
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
'conditions' => array('Customer.id' => $id),
|
||||
));
|
||||
|
||||
$this->data = $customer;
|
||||
$title = 'Customer: ' . $this->data['Customer']['name'] . " : Edit";
|
||||
}
|
||||
else {
|
||||
|
||||
@@ -202,6 +202,13 @@ class LedgerEntriesController extends AppController {
|
||||
else
|
||||
$entry['DoubleEntry'] = $entry['DebitDoubleEntry'];
|
||||
|
||||
// REVISIT <AP>: 20090816
|
||||
// This page doesn't seem very useful, let's just keep it
|
||||
// all to the double entry view.
|
||||
$this->redirect(array('controller' => 'double_entries',
|
||||
'action' => 'view',
|
||||
$entry['DoubleEntry']['id']));
|
||||
|
||||
// Prepare to render.
|
||||
$title = "Ledger Entry #{$entry['LedgerEntry']['id']}";
|
||||
$this->set(compact('entry', 'title'));
|
||||
|
||||
@@ -95,8 +95,10 @@ class MapsController extends AppController {
|
||||
array('fields' => array()),
|
||||
|
||||
'CurrentLease' =>
|
||||
array('fields' => array($this->Map->Unit->CurrentLease->
|
||||
delinquentField('CurrentLease'))),
|
||||
array('fields' => array('id', 'paid_through_date',
|
||||
$this->Map->Unit->CurrentLease->
|
||||
delinquentField('CurrentLease')),
|
||||
'Customer'),
|
||||
|
||||
'UnitSize' =>
|
||||
array('fields' => array('id', 'depth', 'width',
|
||||
@@ -166,12 +168,13 @@ class MapsController extends AppController {
|
||||
'n-s' => $unit['MapsUnit']['transpose'] ? 0 : 1,
|
||||
'status' => (($unit['Unit']['status'] === 'OCCUPIED' &&
|
||||
!empty($unit[0]['delinquent']))
|
||||
? 'LATE' : $unit['Unit']['status'])
|
||||
? 'LATE' : $unit['Unit']['status']),
|
||||
'data' => $unit,
|
||||
);
|
||||
}
|
||||
|
||||
/* pr($info); */
|
||||
/* $this->render('/empty'); */
|
||||
/* $this->render('/empty'); exit(); */
|
||||
return $info;
|
||||
}
|
||||
|
||||
|
||||
@@ -203,9 +203,42 @@ class StatementEntriesController extends AppController {
|
||||
* action: reverse the ledger entry
|
||||
*/
|
||||
|
||||
function reverse($id) {
|
||||
$this->StatementEntry->reverse($id);
|
||||
$this->redirect(array('action'=>'view', $id));
|
||||
function reverse($id = null) {
|
||||
if ($this->data) {
|
||||
//pr($this->data); die();
|
||||
|
||||
$this->StatementEntry->reverse
|
||||
($this->data['StatementEntry']['id'],
|
||||
$this->data['Transaction']['stamp'],
|
||||
$this->data['Transaction']['comment']);
|
||||
|
||||
$this->redirect(array('action'=>'view',
|
||||
$this->data['StatementEntry']['id']));
|
||||
$this->INTERNAL_ERROR('SHOULD HAVE REDIRECTED');
|
||||
}
|
||||
|
||||
$this->StatementEntry->id = $id;
|
||||
$entry = $this->StatementEntry->find
|
||||
('first', array
|
||||
('contain' => array('Customer', 'Transaction', 'Account'),
|
||||
));
|
||||
|
||||
if (empty($entry)) {
|
||||
$this->Session->setFlash(__('Invalid Item.', true));
|
||||
$this->redirect(array('controller' => 'customers',
|
||||
'action'=>'index'));
|
||||
}
|
||||
|
||||
if (!$this->StatementEntry->reversable($id)) {
|
||||
$this->Session->setFlash(__('Item not reversable.', true));
|
||||
$this->redirect(array('action'=>'view', $id));
|
||||
}
|
||||
|
||||
// Prepare to render.
|
||||
$title = ("Charge #{$entry['StatementEntry']['id']}" .
|
||||
" : {$entry['StatementEntry']['amount']}" .
|
||||
" : Reverse");
|
||||
$this->set(compact('entry', 'title'));
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -121,25 +121,32 @@ class Account extends AppModel {
|
||||
* - Returns the ID of the desired account
|
||||
*/
|
||||
|
||||
function securityDepositAccountID() { return $this->nameToID('Security Deposit'); }
|
||||
function rentAccountID() { return $this->nameToID('Rent'); }
|
||||
function lateChargeAccountID() { return $this->nameToID('Late Charge'); }
|
||||
function nsfAccountID() { return $this->nameToID('NSF'); }
|
||||
function nsfChargeAccountID() { return $this->nameToID('NSF Charge'); }
|
||||
function taxAccountID() { return $this->nameToID('Tax'); }
|
||||
function accountReceivableAccountID() { return $this->nameToID('A/R'); }
|
||||
function accountPayableAccountID() { return $this->nameToID('A/P'); }
|
||||
function cashAccountID() { return $this->nameToID('Cash'); }
|
||||
function checkAccountID() { return $this->nameToID('Check'); }
|
||||
function moneyOrderAccountID() { return $this->nameToID('Money Order'); }
|
||||
function achAccountID() { return $this->nameToID('ACH'); }
|
||||
function concessionAccountID() { return $this->nameToID('Concession'); }
|
||||
function waiverAccountID() { return $this->nameToID('Waiver'); }
|
||||
function pettyCashAccountID() { return $this->nameToID('Petty Cash'); }
|
||||
function invoiceAccountID() { return $this->nameToID('Invoice'); }
|
||||
function receiptAccountID() { return $this->nameToID('Receipt'); }
|
||||
function badDebtAccountID() { return $this->nameToID('Bad Debt'); }
|
||||
function customerCreditAccountID() { return $this->nameToID(
|
||||
function lookup($name, $check = true) {
|
||||
$id = $this->nameToID($name);
|
||||
if (empty($id) && $check)
|
||||
$this->INTERNAL_ERROR("Missing Account '$name'");
|
||||
return $id;
|
||||
}
|
||||
|
||||
function securityDepositAccountID() { return $this->lookup('Security Deposit'); }
|
||||
function rentAccountID() { return $this->lookup('Rent'); }
|
||||
function lateChargeAccountID() { return $this->lookup('Late Charge'); }
|
||||
function nsfAccountID() { return $this->lookup('NSF'); }
|
||||
function nsfChargeAccountID() { return $this->lookup('NSF Charge'); }
|
||||
function taxAccountID() { return $this->lookup('Tax'); }
|
||||
function accountReceivableAccountID() { return $this->lookup('A/R'); }
|
||||
function accountPayableAccountID() { return $this->lookup('A/P'); }
|
||||
function cashAccountID() { return $this->lookup('Cash'); }
|
||||
function checkAccountID() { return $this->lookup('Check'); }
|
||||
function moneyOrderAccountID() { return $this->lookup('Money Order'); }
|
||||
function achAccountID() { return $this->lookup('ACH'); }
|
||||
function concessionAccountID() { return $this->lookup('Concession'); }
|
||||
function waiverAccountID() { return $this->lookup('Waiver'); }
|
||||
function pettyCashAccountID() { return $this->lookup('Petty Cash'); }
|
||||
function invoiceAccountID() { return $this->lookup('Invoice'); }
|
||||
function receiptAccountID() { return $this->lookup('Receipt'); }
|
||||
function badDebtAccountID() { return $this->lookup('Bad Debt'); }
|
||||
function customerCreditAccountID() { return $this->lookup(
|
||||
// REVISIT <AP>: 20090816
|
||||
// Use of A/R works, and saves an excess of accounts.
|
||||
// However, a dedicated account is nice, since it can
|
||||
@@ -238,8 +245,8 @@ class Account extends AppModel {
|
||||
$this->nsfAccountID(),
|
||||
$this->waiverAccountID(),
|
||||
$this->badDebtAccountID(),
|
||||
//$this->nameToID('Closing'),
|
||||
//$this->nameToID('Equity'),
|
||||
//$this->lookup('Closing'),
|
||||
//$this->lookup('Equity'),
|
||||
)
|
||||
AS $account_id) {
|
||||
$accounts[$account_id] = $this->name($account_id);
|
||||
|
||||
@@ -101,12 +101,35 @@ class Customer extends AppModel {
|
||||
$this->prEnter(compact('id', 'query'));
|
||||
$this->queryInit($query);
|
||||
|
||||
$query['conditions'][] = array('StatementEntry.customer_id' => $id);
|
||||
$query['conditions'][] = array('StatementEntry.account_id' =>
|
||||
$this->StatementEntry->Account->securityDepositAccountID());
|
||||
$sd_account_id =
|
||||
$this->StatementEntry->Account->securityDepositAccountID();
|
||||
|
||||
$stats = $this->StatementEntry->stats(null, $query);
|
||||
return $this->prReturn($stats['account_balance']);
|
||||
$squery = $query;
|
||||
$squery['conditions'][] = array('StatementEntry.customer_id' => $id);
|
||||
$squery['conditions'][] = array('StatementEntry.account_id' => $sd_account_id);
|
||||
$stats = $this->StatementEntry->stats(null, $squery);
|
||||
$this->pr(26, compact('squery', 'stats'));
|
||||
|
||||
// OK, we know now how much we charged for a security
|
||||
// deposit, as well as how much we received to pay for it.
|
||||
// Now we need to know if any has been released.
|
||||
// Yes... this sucks.
|
||||
$lquery = $query;
|
||||
$lquery['link'] = array('Transaction' =>
|
||||
array('fields' => array(),
|
||||
'Customer' =>
|
||||
(empty($query['link'])
|
||||
? array('fields' => array())
|
||||
: $query['link'])));
|
||||
$lquery['conditions'][] = array('Transaction.customer_id' => $id);
|
||||
$lquery['conditions'][] = array('LedgerEntry.account_id' => $sd_account_id);
|
||||
$lquery['conditions'][] = array('LedgerEntry.crdr' => 'DEBIT');
|
||||
$lquery['fields'][] = 'SUM(LedgerEntry.amount) AS total';
|
||||
$released = $this->StatementEntry->Transaction->LedgerEntry->find
|
||||
('first', $lquery);
|
||||
$this->pr(26, compact('lquery', 'released'));
|
||||
|
||||
return $this->prReturn($stats['Charge']['disbursement'] - $released[0]['total']);
|
||||
}
|
||||
|
||||
|
||||
@@ -208,6 +231,19 @@ class Customer extends AppModel {
|
||||
* - Update any cached or calculated fields
|
||||
*/
|
||||
function update($id) {
|
||||
$this->prEnter(compact('id'));
|
||||
|
||||
if (empty($id)) {
|
||||
$customers = $this->find('all', array('contain' => false, 'fields' => array('id')));
|
||||
foreach ($customers AS $customer) {
|
||||
// This SHOULDN'T happen, but check to be sure
|
||||
// or we'll get infinite recursion.
|
||||
if (empty($customer['Customer']['id']))
|
||||
continue;
|
||||
$this->update($customer['Customer']['id']);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// REVISIT <AP>: 20090812
|
||||
// updateLeaseCount is handled directly when needed.
|
||||
@@ -216,11 +252,21 @@ class Customer extends AppModel {
|
||||
|
||||
$current_leases =
|
||||
$this->find('all',
|
||||
array('link' => array('CurrentLease' => array('type' => 'INNER')),
|
||||
// REVISIT <AP>: 20090816
|
||||
// Do we need to update leases other than the current ones?
|
||||
// It may be necessary. For example, a non-current lease
|
||||
// can still be hit with an NSF item. In that case, it
|
||||
// could have stale data if we look only to current leases.
|
||||
//array('link' => array('CurrentLease' => array('type' => 'INNER')),
|
||||
array('link' => array('Lease' => array('type' => 'INNER')),
|
||||
'conditions' => array('Customer.id' => $id)));
|
||||
|
||||
foreach ($current_leases AS $lease)
|
||||
$this->Lease->update($lease['CurrentLease']['id']);
|
||||
foreach ($current_leases AS $lease) {
|
||||
if (!empty($lease['CurrentLease']['id']))
|
||||
$this->Lease->update($lease['CurrentLease']['id']);
|
||||
if (!empty($lease['Lease']['id']))
|
||||
$this->Lease->update($lease['Lease']['id']);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -53,7 +53,7 @@ class DoubleEntry extends AppModel {
|
||||
*/
|
||||
|
||||
function addDoubleEntry($entry1, $entry2, $entry1_tender = null) {
|
||||
$this->prFunctionLevel(16);
|
||||
//$this->prFunctionLevel(16);
|
||||
$this->prEnter(compact('entry1', 'entry2', 'entry1_tender'));
|
||||
|
||||
$ret = array();
|
||||
|
||||
@@ -150,6 +150,7 @@ class Lease extends AppModel {
|
||||
'conditions' => array
|
||||
('SEx.effective_date = DATE_ADD(StatementEntry.through_date, INTERVAL 1 day)',
|
||||
'SEx.lease_id = StatementEntry.lease_id',
|
||||
'SEx.reverse_transaction_id IS NULL',
|
||||
),
|
||||
),
|
||||
),
|
||||
@@ -159,6 +160,7 @@ class Lease extends AppModel {
|
||||
'conditions' => array(array('Lease.id' => $id),
|
||||
array('StatementEntry.type' => 'CHARGE'),
|
||||
array('StatementEntry.account_id' => $rent_account_id),
|
||||
array('StatementEntry.reverse_transaction_id IS NULL'),
|
||||
array('SEx.id' => null),
|
||||
),
|
||||
)
|
||||
@@ -259,7 +261,9 @@ class Lease extends AppModel {
|
||||
|
||||
'conditions' =>
|
||||
array(array('StatementEntry.lease_id' => $id),
|
||||
array('StatementEntry.account_id' => $rent_account_id)),
|
||||
array('StatementEntry.account_id' => $rent_account_id),
|
||||
array('StatementEntry.reverse_transaction_id IS NULL'),
|
||||
),
|
||||
|
||||
'order' => array('StatementEntry.effective_date'),
|
||||
),
|
||||
@@ -278,7 +282,9 @@ class Lease extends AppModel {
|
||||
('CHARGE',
|
||||
array('conditions' =>
|
||||
array(array('StatementEntry.lease_id' => $id),
|
||||
array('StatementEntry.account_id' => $rent_account_id)),
|
||||
array('StatementEntry.account_id' => $rent_account_id),
|
||||
array('StatementEntry.reverse_transaction_id IS NULL'),
|
||||
),
|
||||
|
||||
'order' => array('StatementEntry.through_date DESC'),
|
||||
),
|
||||
@@ -408,7 +414,6 @@ class Lease extends AppModel {
|
||||
*/
|
||||
|
||||
function assessMonthlyLate($id, $date = null) {
|
||||
$this->prFunctionLevel(25);
|
||||
$this->prEnter(compact('id', 'date'));
|
||||
$this->id = $id;
|
||||
|
||||
@@ -537,7 +542,7 @@ class Lease extends AppModel {
|
||||
function conditionDelinquent($table_name = 'Lease') {
|
||||
if (empty($table_name)) $t = ''; else $t = $table_name . '.';
|
||||
return ("({$t}close_date IS NULL AND" .
|
||||
" NOW() > DATE_ADD({$t}paid_through_date, INTERVAL 15 DAY))");
|
||||
" NOW() > DATE_ADD({$t}paid_through_date, INTERVAL 10 DAY))");
|
||||
}
|
||||
|
||||
function delinquentDaysSQL($table_name = 'Lease') {
|
||||
@@ -792,6 +797,8 @@ class Lease extends AppModel {
|
||||
* - Update any cached or calculated fields
|
||||
*/
|
||||
function update($id) {
|
||||
$this->prEnter(compact('id'));
|
||||
|
||||
$this->id = $id;
|
||||
$this->saveField('charge_through_date', $this->rentChargeThrough($id));
|
||||
$this->saveField('paid_through_date', $this->rentPaidThrough($id));
|
||||
|
||||
@@ -127,7 +127,7 @@ class LedgerEntry extends AppModel {
|
||||
* - Inserts new Ledger Entry into the database
|
||||
*/
|
||||
function addLedgerEntry($entry, $tender = null) {
|
||||
$this->prFunctionLevel(16);
|
||||
//$this->prFunctionLevel(16);
|
||||
$this->prEnter(compact('entry', 'tender'));
|
||||
|
||||
$ret = array('data' => $entry);
|
||||
@@ -165,53 +165,13 @@ class LedgerEntry extends AppModel {
|
||||
*/
|
||||
function stats($id = null, $query = null, $set = null) {
|
||||
$this->queryInit($query);
|
||||
unset($query['group']);
|
||||
|
||||
if (!isset($query['link']['DoubleEntry']))
|
||||
$query['link']['DoubleEntry'] = array();
|
||||
/* if (!isset($query['link']['DoubleEntry']['fields'])) */
|
||||
/* $query['link']['DoubleEntry']['fields'] = array(); */
|
||||
|
||||
if (isset($id))
|
||||
$query['conditions'][] = array('Entry.id' => $id);
|
||||
|
||||
if (isset($set))
|
||||
$set = strtoupper($set);
|
||||
|
||||
//pr(array('stats()', compact('id', 'query', 'set')));
|
||||
|
||||
$rtypes = array('charge', 'disbursement',
|
||||
// 'debit', 'credit',
|
||||
);
|
||||
|
||||
$stats = array();
|
||||
foreach($rtypes AS $rtype) {
|
||||
$Rtype = ucfirst($rtype);
|
||||
|
||||
if (($rtype == 'charge' && (!isset($set) || $set == 'DISBURSEMENT')) ||
|
||||
($rtype == 'disbursement' && (!isset($set) || $set == 'CHARGE'))
|
||||
) {
|
||||
|
||||
$rquery = $query;
|
||||
$rquery['link'][$Rtype] =
|
||||
array('fields' => array("SUM(COALESCE(Applied{$Rtype}.amount,0)) AS reconciled"));
|
||||
|
||||
$rquery['fields'] = array();
|
||||
//$rquery['fields'][] = "SUM(DoubleEntry.amount) AS total";
|
||||
$rquery['fields'][] = "SUM(DoubleEntry.amount) - SUM(COALESCE(Applied{$Rtype}.amount,0)) AS balance";
|
||||
$rquery['conditions'][] = array("Applied{$Rtype}.id !=" => null);
|
||||
|
||||
$result = $this->find('first', $rquery);
|
||||
//pr(compact('Rtype', 'rquery', 'result'));
|
||||
|
||||
$sumfld = $Rtype;
|
||||
$stats[$sumfld] = $result[0];
|
||||
/* if (!isset($stats[$sumfld]['applied'])) */
|
||||
/* $stats[$sumfld]['applied'] = 0; */
|
||||
}
|
||||
}
|
||||
|
||||
return $stats;
|
||||
// REVISIT <AP>: 20090816
|
||||
// This function appeared to be dramatically broken,
|
||||
// a throwback to an earlier time. I deleted its
|
||||
// contents and added this error to ensure it does
|
||||
// not get used.
|
||||
$this->INTERNAL_ERROR('This function should not be used');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@ class StatementEntry extends AppModel {
|
||||
|
||||
);
|
||||
|
||||
var $default_log_level = array('log' => 30, 'show' => 15);
|
||||
//var $default_log_level = array('log' => 30, 'show' => 15);
|
||||
var $max_log_level = 19;
|
||||
|
||||
/**************************************************************************
|
||||
@@ -185,6 +185,9 @@ class StatementEntry extends AppModel {
|
||||
function reversable($id) {
|
||||
$this->prEnter(compact('id'));
|
||||
|
||||
if (empty($id))
|
||||
return $this->prReturn(false);
|
||||
|
||||
// Verify the item is an actual charge
|
||||
$this->id = $id;
|
||||
$charge_type = $this->field('type');
|
||||
@@ -205,7 +208,7 @@ class StatementEntry extends AppModel {
|
||||
* function: reverse
|
||||
* - Reverses the charges
|
||||
*/
|
||||
function reverse($id, $stamp = null) {
|
||||
function reverse($id, $stamp = null, $comment) {
|
||||
$this->prEnter(compact('id', 'stamp'));
|
||||
|
||||
// Verify the item can be reversed
|
||||
@@ -222,7 +225,7 @@ class StatementEntry extends AppModel {
|
||||
|
||||
// Record the reversal transaction
|
||||
$result = $this->Transaction->addReversal
|
||||
($charge, $stamp, 'Charge Reversal');
|
||||
($charge, $stamp, $comment ? $comment : 'Charge Reversal');
|
||||
|
||||
if (empty($result['error'])) {
|
||||
// Mark the charge as reversed
|
||||
@@ -258,7 +261,7 @@ class StatementEntry extends AppModel {
|
||||
}
|
||||
|
||||
function reconciledSet($set, $query = null, $unrec = false, $if_rec_include_partial = false) {
|
||||
$this->prFunctionLevel(array('log' => 16, 'show' => 10));
|
||||
//$this->prFunctionLevel(array('log' => 16, 'show' => 10));
|
||||
$this->prEnter(compact('set', 'query', 'unrec', 'if_rec_include_partial'));
|
||||
$lquery = $this->reconciledSetQuery($set, $query);
|
||||
$result = $this->find('all', $lquery);
|
||||
@@ -645,7 +648,7 @@ class StatementEntry extends AppModel {
|
||||
* - Returns summary data from the requested statement entry
|
||||
*/
|
||||
function stats($id = null, $query = null) {
|
||||
$this->prFunctionLevel(array('log' => 16, 'show' => 10));
|
||||
//$this->prFunctionLevel(array('log' => 16, 'show' => 10));
|
||||
$this->prEnter(compact('id', 'query'));
|
||||
|
||||
$this->queryInit($query);
|
||||
|
||||
@@ -8,6 +8,9 @@ class Tender extends AppModel {
|
||||
'DepositTransaction' => array(
|
||||
'className' => 'Transaction',
|
||||
),
|
||||
'DepositLedgerEntry' => array(
|
||||
'className' => 'LedgerEntry',
|
||||
),
|
||||
'NsfTransaction' => array(
|
||||
'className' => 'Transaction',
|
||||
'dependent' => true,
|
||||
@@ -131,6 +134,7 @@ class Tender extends AppModel {
|
||||
('contain' =>
|
||||
array('LedgerEntry',
|
||||
'DepositTransaction',
|
||||
'DepositLedgerEntry',
|
||||
'NsfTransaction'),
|
||||
));
|
||||
$this->pr(20, compact('tender'));
|
||||
|
||||
@@ -50,7 +50,7 @@ class Transaction extends AppModel {
|
||||
);
|
||||
|
||||
|
||||
var $default_log_level = array('log' => 30, 'show' => 15);
|
||||
//var $default_log_level = array('log' => 30, 'show' => 15);
|
||||
//var $max_log_level = 10;
|
||||
|
||||
/**************************************************************************
|
||||
@@ -121,19 +121,114 @@ class Transaction extends AppModel {
|
||||
'lease_id' => $lease_id,
|
||||
);
|
||||
|
||||
// Go through the statement entries and flag as disbursements
|
||||
foreach ($data['Entry'] AS &$entry)
|
||||
$entry += array('type' => 'DISBURSEMENT', // not used
|
||||
'account_id' =>
|
||||
(isset($entry['Tender']['tender_type_id'])
|
||||
? ($this->LedgerEntry->Tender->TenderType->
|
||||
accountID($entry['Tender']['tender_type_id']))
|
||||
: null),
|
||||
);
|
||||
// Go through the statement entries, making sure the tender
|
||||
// is recorded into the correct account, and then performing
|
||||
// an auto-deposit if necessary.
|
||||
$deposit = array();
|
||||
foreach ($data['Entry'] AS &$entry) {
|
||||
if (empty($entry['Tender']['tender_type_id']))
|
||||
continue;
|
||||
|
||||
$ttype = $this->LedgerEntry->Tender->TenderType->find
|
||||
('first', array('contain' => false,
|
||||
'conditions' =>
|
||||
array('id' => $entry['Tender']['tender_type_id'])));
|
||||
$ttype = $ttype['TenderType'];
|
||||
|
||||
// Set the account for posting.
|
||||
$entry += array('account_id' => $ttype['account_id']);
|
||||
|
||||
/* // Check for auto deposit */
|
||||
/* if (!empty($ttype['auto_deposit'])) { */
|
||||
/* $deposit[] = array('id' => 0, */
|
||||
/* 'account_id' => $ttype['deposit_account_id']); */
|
||||
/* } */
|
||||
}
|
||||
unset($entry); // prevent trouble since $entry is reference
|
||||
|
||||
$ids = $this->addTransaction($data['control'], $data['Transaction'], $data['Entry']);
|
||||
if (isset($ids['transaction_id']))
|
||||
$ids['receipt_id'] = $ids['transaction_id'];
|
||||
if (!empty($ids['error']))
|
||||
return $this->prReturn(array('error' => true) + $ids);
|
||||
|
||||
$tender_ids = array();
|
||||
foreach ($ids['entries'] AS $entry) {
|
||||
$entry1 = $entry['DoubleEntry']['Entry1'];
|
||||
if (!empty($entry1['Tender']['tender_id']))
|
||||
$tender_ids[] = $entry1['Tender']['tender_id'];
|
||||
}
|
||||
|
||||
$ids = $this->_autoDeposit($tender_ids, $ids);
|
||||
|
||||
return $this->prReturn($ids);
|
||||
}
|
||||
|
||||
// REVISIT <AP>: 20090817
|
||||
// Delete after rolling up the old items
|
||||
function _autoDeposit($tender_ids, $ids) {
|
||||
$deposit_tenders = $this->LedgerEntry->Tender->find
|
||||
('all', array('contain' => array('TenderType' => array('fields' => array()),
|
||||
'LedgerEntry' => array('fields' => array()),
|
||||
),
|
||||
'fields' => array('TenderType.deposit_account_id',
|
||||
'TenderType.account_id',
|
||||
'CONCAT("CREDIT") AS crdr',
|
||||
'CONCAT("Auto Deposit") AS comment',
|
||||
'SUM(LedgerEntry.amount) AS amount'),
|
||||
'conditions' => array('Tender.id' => $tender_ids,
|
||||
'TenderType.auto_deposit' => true,
|
||||
),
|
||||
'group' => 'TenderType.deposit_account_id',
|
||||
));
|
||||
|
||||
if (!empty($deposit_tenders)) {
|
||||
foreach ($deposit_tenders AS &$tender)
|
||||
$tender = $tender[0] + array_diff_key($tender['TenderType'], array('id'=>1));
|
||||
|
||||
$this->pr(10, compact('tender_ids', 'deposit_tenders'));
|
||||
|
||||
// REVISIT <AP>: 20090817
|
||||
// Multiple tenders could result in deposits to more than one
|
||||
// account. We're already mucking with things by having a
|
||||
// ledger entry that's not involved with the account_id of the
|
||||
// transaction. We could handle this by not using the helper
|
||||
// _splitEntries function, and just building or individual
|
||||
// entries right here (which we should probably do anyway).
|
||||
// However, I'm ignoring the issue for now...
|
||||
if (count($deposit_tenders) > 1)
|
||||
$this->INTERNAL_ERROR("Only expecting one tender type");
|
||||
|
||||
$deposit_ids = $this->addTransactionEntries
|
||||
(array('include_ledger_entry' => true,
|
||||
'include_statement_entry' => false,
|
||||
),
|
||||
|
||||
array('id' => $ids['transaction_id'],
|
||||
// REVISIT <AP>: 20090817
|
||||
// This is an awful cheat, and we're going to
|
||||
// get burned from it someday.
|
||||
'type' => 'DEPOSIT',
|
||||
'crdr' => 'DEBIT',
|
||||
'account_id' => $deposit_tenders[0]['deposit_account_id'],
|
||||
),
|
||||
|
||||
$deposit_tenders);
|
||||
|
||||
$ids['deposit'] = $deposit_ids;
|
||||
if (!empty($deposit_ids['error']))
|
||||
return $this->prReturn(array('error' => true) + $ids);
|
||||
|
||||
if (!empty($tender_ids)) {
|
||||
$entry_id = $deposit_ids['entries'][0]['DoubleEntry']['Entry2']['ledger_entry_id'];
|
||||
$this->pr(10, compact('tender_ids', 'entry_id'));
|
||||
$this->LedgerEntry->Tender->updateAll
|
||||
(array('Tender.deposit_transaction_id' => $ids['transaction_id'],
|
||||
'Tender.deposit_ledger_entry_id' => $entry_id),
|
||||
array('Tender.id' => $tender_ids)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
return $this->prReturn($ids);
|
||||
}
|
||||
@@ -221,6 +316,7 @@ class Transaction extends AppModel {
|
||||
array('assign' => false,
|
||||
'include_ledger_entry' => true,
|
||||
'include_statement_entry' => false,
|
||||
'update_tender' => true,
|
||||
);
|
||||
|
||||
// Establish the transaction as a deposit
|
||||
@@ -239,12 +335,14 @@ class Transaction extends AppModel {
|
||||
|
||||
// Go through the statement entries and re-group by account id
|
||||
$group = array();
|
||||
foreach ($data['Entry'] AS &$entry) {
|
||||
$tender_groups = array();
|
||||
foreach ($data['Entry'] AS $entry) {
|
||||
if (!isset($group[$entry['account_id']]))
|
||||
$group[$entry['account_id']] =
|
||||
array('account_id' => $entry['account_id'],
|
||||
'amount' => 0);
|
||||
$group[$entry['account_id']]['amount'] += $entry['amount'];
|
||||
$tender_groups[$entry['account_id']][] = $entry['tender_id'];
|
||||
}
|
||||
$data['Entry'] = $group;
|
||||
|
||||
@@ -252,11 +350,16 @@ class Transaction extends AppModel {
|
||||
if (isset($ids['transaction_id']))
|
||||
$ids['deposit_id'] = $ids['transaction_id'];
|
||||
|
||||
if (!empty($ids['deposit_id'])) {
|
||||
$this->LedgerEntry->Tender->updateAll
|
||||
(array('Tender.deposit_transaction_id' => $ids['deposit_id']),
|
||||
array('Tender.id' => $tender_ids)
|
||||
);
|
||||
if (!empty($ids['deposit_id']) && !empty($control['update_tender'])) {
|
||||
foreach ($tender_groups AS $group => $tender_ids) {
|
||||
$entry_id = $ids['entries'][$group]['DoubleEntry']['Entry2']['ledger_entry_id'];
|
||||
$this->pr(10, compact('group', 'tender_ids', 'entry_id'));
|
||||
$this->LedgerEntry->Tender->updateAll
|
||||
(array('Tender.deposit_transaction_id' => $ids['deposit_id'],
|
||||
'Tender.deposit_ledger_entry_id' => $entry_id),
|
||||
array('Tender.id' => $tender_ids)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
return $this->prReturn($ids);
|
||||
@@ -279,6 +382,7 @@ class Transaction extends AppModel {
|
||||
array('assign' => false,
|
||||
'include_ledger_entry' => true,
|
||||
'include_statement_entry' => false,
|
||||
'allow_no_entries' => true,
|
||||
);
|
||||
|
||||
// Establish the transaction as a close
|
||||
@@ -554,7 +658,9 @@ class Transaction extends AppModel {
|
||||
$ret['error'] = true;
|
||||
}
|
||||
|
||||
$this->Customer->update($transaction['customer_id']);
|
||||
if (!empty($transaction['customer_id'])) {
|
||||
$this->Customer->update($transaction['customer_id']);
|
||||
}
|
||||
return $this->prReturn($ret);
|
||||
}
|
||||
|
||||
@@ -656,7 +762,7 @@ class Transaction extends AppModel {
|
||||
|
||||
// Verify that we have a transaction and entries
|
||||
if (empty($transaction) ||
|
||||
($transaction['type'] !== 'CLOSE' && empty($entries)))
|
||||
(empty($entries) && empty($control['allow_no_entries'])))
|
||||
return $this->prReturn(array('error' => true));
|
||||
|
||||
// set ledger ID as the current ledger of the specified account
|
||||
@@ -820,7 +926,13 @@ class Transaction extends AppModel {
|
||||
// and recording it in the NSF account. It has nothing to do
|
||||
// with the customer statement (charges, disbursements, credits, etc).
|
||||
$bounce_result = $this->addDeposit
|
||||
(array('Transaction' =>
|
||||
(array('control' =>
|
||||
// This is not a "normal" deposit, so we don't
|
||||
// want to update the tender deposit transaction id
|
||||
// (it already has the correct one).
|
||||
array('update_tender' => false),
|
||||
|
||||
'Transaction' =>
|
||||
array('stamp' => $stamp,
|
||||
'type' => 'WITHDRAWAL',
|
||||
'crdr' => 'CREDIT'),
|
||||
@@ -830,7 +942,7 @@ class Transaction extends AppModel {
|
||||
'account_id' => $this->Account->nsfAccountID(),
|
||||
'amount' => $tender['LedgerEntry']['amount'],
|
||||
))),
|
||||
$tender['Transaction']['account_id']);
|
||||
$tender['DepositLedgerEntry']['account_id']);
|
||||
|
||||
$this->pr(20, compact('bounce_result'));
|
||||
$ret['bounce'] = $bounce_result;
|
||||
@@ -902,16 +1014,20 @@ class Transaction extends AppModel {
|
||||
}
|
||||
}
|
||||
|
||||
// Add the sole ledger entry for this transaction
|
||||
$rollback['Entry'][] =
|
||||
array('include_ledger_entry' => true,
|
||||
'include_statement_entry' => false,
|
||||
'amount' => $rollback['Transaction']['amount'],
|
||||
'account_id' => $this->Account->accountReceivableAccountID(),
|
||||
);
|
||||
// Add the sole ledger entry for this transaction. If there
|
||||
// is not a transaction amount, then there is no point in
|
||||
// recording a ledger entry of $0.00
|
||||
if (!empty($rollback['Transaction']['amount'])) {
|
||||
$rollback['Entry'][] =
|
||||
array('include_ledger_entry' => true,
|
||||
'include_statement_entry' => false,
|
||||
'amount' => $rollback['Transaction']['amount'],
|
||||
'account_id' => $this->Account->accountReceivableAccountID(),
|
||||
);
|
||||
|
||||
// Set the transaction amount to be negative
|
||||
$rollback['Transaction']['amount'] *= -1;
|
||||
// Set the transaction amount to be negative
|
||||
$rollback['Transaction']['amount'] *= -1;
|
||||
}
|
||||
|
||||
// Record the transaction, which will un-pay previously paid
|
||||
// charges, void any credits, and other similar work.
|
||||
@@ -966,8 +1082,12 @@ class Transaction extends AppModel {
|
||||
}
|
||||
}
|
||||
}
|
||||
if (empty($ret['rollback']['error']) && empty($ret['nsf_ledger_entry_id']))
|
||||
$this->INTERNAL_ERROR("NSF LE ID not found under rollback entries");
|
||||
if (empty($ret['rollback']['error']) && empty($ret['nsf_ledger_entry_id'])) {
|
||||
//$this->INTERNAL_ERROR("NSF LE ID not found under rollback entries");
|
||||
// Actually, this can happen if an item is NSF without having ever
|
||||
// been applied to any charges.
|
||||
$ret['nsf_ledger_entry_id'] = null;
|
||||
}
|
||||
|
||||
$ret['nsf_transaction_id'] = $ret['bounce']['transaction_id'];
|
||||
return $this->prReturn($ret + array('error' => false));
|
||||
|
||||
@@ -265,6 +265,7 @@ echo $this->element('customers', array
|
||||
array('gridstate' =>
|
||||
'onGridState("#"+$(this).attr("id"), gridstate)'),
|
||||
),
|
||||
'action' => 'current',
|
||||
'nolinks' => true,
|
||||
'limit' => 10,
|
||||
)));
|
||||
|
||||
@@ -103,10 +103,17 @@ echo ('<DIV CLASS="ledger-double-entry">' . "\n");
|
||||
foreach ($ledgers AS $type => $ledger) {
|
||||
$rows = array();
|
||||
|
||||
$rows[] = array('ID', $html->link('#' . $entries[$type]['id'],
|
||||
array('controller' => 'entries',
|
||||
'action' => 'view',
|
||||
$entries[$type]['id'])));
|
||||
// REVISIT <AP>: 20090816
|
||||
// Due to low priority, the ledger_entry/double_entry stuff
|
||||
// is a bit piecemeal at the moment (trying to reuse old
|
||||
// code as much as possible). So, LedgerEntry view is just
|
||||
// redirecting here. Of course, presenting a link for the
|
||||
// LedgerEntry then is, well, quite pointless.
|
||||
$rows[] = array('ID', '#' . $entries[$type]['id']);
|
||||
/* $rows[] = array('ID', $html->link('#' . $entries[$type]['id'], */
|
||||
/* array('controller' => 'entries', */
|
||||
/* 'action' => 'view', */
|
||||
/* $entries[$type]['id']))); */
|
||||
$rows[] = array('Account', $html->link($ledger['Account']['name'],
|
||||
array('controller' => 'accounts',
|
||||
'action' => 'view',
|
||||
|
||||
@@ -19,6 +19,7 @@ if (!isset($limitOptions)) {
|
||||
}
|
||||
sort($limitOptions, SORT_NUMERIC);
|
||||
$limitOptions = array_unique($limitOptions, SORT_NUMERIC);
|
||||
//$limitOptions[] = 'ALL'; // Would be nice... jqGrid shows 'NaN of NaN'
|
||||
|
||||
if (!isset($height))
|
||||
$height = 'auto';
|
||||
@@ -46,12 +47,9 @@ if (!isset($grid_setup))
|
||||
$grid_setup = array();
|
||||
|
||||
// Do some prework to bring in the appropriate libraries
|
||||
$imgpath = '/pmgr/site/css/jqGrid/basic/images';
|
||||
$html->css('jqGrid/basic/grid', null, null, false);
|
||||
$html->css('jqGrid/jqModal', null, null, false);
|
||||
$javascript->link('jqGrid/jquery.jqGrid.js', false);
|
||||
$javascript->link('jqGrid/js/jqModal', false);
|
||||
$javascript->link('jqGrid/js/jqDnR', false);
|
||||
$html->css('ui.jqgrid', null, null, false);
|
||||
$javascript->link('jqGrid/grid.locale-en', false);
|
||||
$javascript->link('jqGrid/jquery.jqGrid.min', false);
|
||||
$javascript->link('pmgr_jqGrid', false);
|
||||
|
||||
|
||||
@@ -187,9 +185,12 @@ if (isset($sort_order)) {
|
||||
$sortorder = 'ASC';
|
||||
}
|
||||
|
||||
if (1) { // debug
|
||||
$debug = !empty($this->params['dev']);
|
||||
if ($debug)
|
||||
$caption .= '<span class="debug grid-query"> :: <span id="'.$grid_id.'-query"></span></span>';
|
||||
}
|
||||
|
||||
$caption .= ('<span class="grid-error" id="'.$grid_id.'-error"' .
|
||||
' style="display:none"> :: Error (Please Reload)</span>');
|
||||
|
||||
foreach (array_merge(array('loadComplete' => '', 'loadError' => ''),
|
||||
$grid_events) AS $event => $statement) {
|
||||
@@ -199,14 +200,22 @@ foreach (array_merge(array('loadComplete' => '', 'loadError' => ''),
|
||||
$statement = current($statement);
|
||||
}
|
||||
|
||||
if ($event == 'loadComplete') {
|
||||
if ($event == 'loadComplete' && $debug) {
|
||||
$grid_events[$event] =
|
||||
array('--special' => "function($params) {url=jQuery('#{$grid_id}').getGridParam('url');url=url+'/debug:1?'; pd=jQuery('#{$grid_id}').getPostData();$.each(pd,function(i){ url+=i+'='+escape(pd[i])+'&'; }); jQuery('#{$grid_id}-query').html('<A HREF=\"'+url+'\">Grid Query</A><BR>'); $statement;}");
|
||||
}
|
||||
elseif ($event == 'loadError') {
|
||||
elseif ($event == 'loadError' && $debug) {
|
||||
$grid_events[$event] =
|
||||
array('--special' => "function($params) {url=jQuery('#{$grid_id}').getGridParam('url');url=url+'/debug:1?'; pd=jQuery('#{$grid_id}').getPostData();$.each(pd,function(i){ url+=i+'='+escape(pd[i])+'&'; }); jQuery('#{$grid_id}-query').html('<A HREF=\"'+url+'\">Grid Error Query</A><BR>'); $statement;}");
|
||||
}
|
||||
elseif ($event == 'loadComplete' && !$debug) {
|
||||
$grid_events[$event] =
|
||||
array('--special' => "function($params) {jQuery('#{$grid_id}-error').hide(); $statement;}");
|
||||
}
|
||||
elseif ($event == 'loadError' && !$debug) {
|
||||
$grid_events[$event] =
|
||||
array('--special' => "function($params) {jQuery('#{$grid_id}-error').show(); $statement;}");
|
||||
}
|
||||
else {
|
||||
$grid_events[$event] =
|
||||
array('--special' => "function($params) { $statement; }");
|
||||
@@ -230,8 +239,8 @@ $jqGrid_setup = array_merge
|
||||
'sortname' => $sortname,
|
||||
'sortorder' => $sortorder,
|
||||
'caption' => $caption,
|
||||
'imgpath' => $imgpath,
|
||||
'viewrecords' => true,
|
||||
'gridview' => true,
|
||||
'pager' => $grid_id.'-pager',
|
||||
),
|
||||
$grid_events,
|
||||
@@ -250,16 +259,16 @@ $jqGrid_setup = array_merge
|
||||
<script type="text/javascript"><!--
|
||||
|
||||
jQuery(document).ready(function(){
|
||||
currencyFormatter = function(el, cellval, opts) {
|
||||
currencyFormatter = function(cellval, opts, rowObject) {
|
||||
if (!cellval)
|
||||
return;
|
||||
$(el).html(fmtCurrency(cellval));
|
||||
return "";
|
||||
return fmtCurrency(cellval);
|
||||
}
|
||||
|
||||
idFormatter = function(el, cellval, opts) {
|
||||
idFormatter = function(cellval, opts, rowObject) {
|
||||
if (!cellval)
|
||||
return;
|
||||
$(el).html('#'+cellval);
|
||||
return cellval;
|
||||
return '#'+cellval;
|
||||
}
|
||||
|
||||
jQuery('#<?php echo $grid_id; ?>').jqGrid(
|
||||
@@ -271,36 +280,6 @@ jQuery(document).ready(function(){
|
||||
del:false,
|
||||
search:true,
|
||||
refresh:true});
|
||||
|
||||
<?php
|
||||
/* jQuery('#t_<?php echo $grid_id; ?>').height(25).hide() */
|
||||
/* .filterGrid('#<?php echo $grid_id; ?>', { */
|
||||
/* gridModel:true, */
|
||||
/* gridToolbar:true, */
|
||||
/* autosearch:true, */
|
||||
/* }); */
|
||||
|
||||
/* jQuery('#<?php echo $grid_id; ?>').navGrid('#<?php echo $grid_id; ?>-pager', */
|
||||
/* { view:false, */
|
||||
/* edit:false, */
|
||||
/* add:false, */
|
||||
/* del:false, */
|
||||
/* search:false, */
|
||||
/* refresh:false}) */
|
||||
/* .navButtonAdd('#<?php echo $grid_id; ?>-pager',{ */
|
||||
/* caption:"Search", */
|
||||
/* title:"Toggle Search", */
|
||||
/* buttonimg:'<?php echo $imgpath; ?>' + '/find.gif', */
|
||||
/* onClickButton:function(){ */
|
||||
/* if(jQuery('#t_<?php echo $grid_id; ?>').css("display")=="none") { */
|
||||
/* jQuery('#t_<?php echo $grid_id; ?>').css("display",""); */
|
||||
/* } else { */
|
||||
/* jQuery('#t_<?php echo $grid_id; ?>').css("display","none"); */
|
||||
/* } */
|
||||
/* } */
|
||||
/* }); */
|
||||
?>
|
||||
|
||||
});
|
||||
|
||||
--></script>
|
||||
|
||||
@@ -9,8 +9,6 @@ $cols['Date'] = array('index' => 'Transaction.stamp', 'formatter' =>
|
||||
$cols['Effective'] = array('index' => 'StatementEntry.effective_date', 'formatter' => 'date');
|
||||
$cols['Through'] = array('index' => 'StatementEntry.through_date', 'formatter' => 'date');
|
||||
|
||||
$cols['Account'] = array('index' => 'Account.name', 'formatter' => 'name');
|
||||
|
||||
$cols['Customer'] = array('index' => 'Customer.name', 'formatter' => 'longname');
|
||||
$cols['Lease'] = array('index' => 'Lease.number', 'formatter' => 'id');
|
||||
$cols['Unit'] = array('index' => 'Unit.name', 'formatter' => 'shortname');
|
||||
@@ -18,6 +16,7 @@ $cols['Unit'] = array('index' => 'Unit.name', 'formatter' =>
|
||||
$cols['Comment'] = array('index' => 'StatementEntry.comment', 'formatter' => 'comment', 'width'=>150);
|
||||
|
||||
$cols['Type'] = array('index' => 'StatementEntry.type', 'formatter' => 'enum', 'width'=>120);
|
||||
$cols['Account'] = array('index' => 'Account.name', 'formatter' => 'name');
|
||||
$cols['Debit'] = array('index' => 'charge', 'formatter' => 'currency');
|
||||
$cols['Credit'] = array('index' => 'disbursement', 'formatter' => 'currency');
|
||||
|
||||
|
||||
@@ -61,7 +61,7 @@ class FormatHelper extends AppHelper {
|
||||
$date_html = '<span class="fmt-date '.$class.'">'.$date_html.'</span>';
|
||||
|
||||
if ($age) {
|
||||
$date_html .= ' (' . self::age($date, $class, $time ? 0 : 60*60*24) . ')';
|
||||
$date_html .= ' (' . self::age($date, $class, true, $time ? 0 : 60*60*24) . ')';
|
||||
$date_html = '<span class="fmt-dateage '.$class.'">'.$date_html.'</span>';
|
||||
}
|
||||
|
||||
@@ -100,7 +100,7 @@ class FormatHelper extends AppHelper {
|
||||
return $comment;
|
||||
}
|
||||
|
||||
function age($datetime, $class, $min_span = 0) {
|
||||
function age($datetime, $class, $suffix = false, $min_span = 0) {
|
||||
if (!isset($datetime))
|
||||
return null;
|
||||
|
||||
@@ -207,9 +207,12 @@ class FormatHelper extends AppHelper {
|
||||
|
||||
$age .= ' ' . self::_n($approx, $unit);
|
||||
|
||||
if ($backwards)
|
||||
$age .= ' ago';
|
||||
|
||||
if ($suffix) {
|
||||
if ($backwards)
|
||||
$age .= ' from now';
|
||||
else
|
||||
$age .= ' ago';
|
||||
}
|
||||
}
|
||||
|
||||
$age = '<span class="fmt-age '.$class.'">'.__($age, true).'</span>';
|
||||
|
||||
@@ -35,12 +35,12 @@
|
||||
echo $html->css('layout') . "\n";
|
||||
echo $html->css('print', null, array('media' => 'print')) . "\n";
|
||||
echo $html->css('sidemenu') . "\n";
|
||||
//echo $html->css('jquery/base/ui.all') . "\n";
|
||||
//echo $html->css('jquery/smoothness/ui.all') . "\n";
|
||||
//echo $html->css('jquery/dotluv/ui.all') . "\n";
|
||||
echo $html->css('jquery/start/ui.all') . "\n";
|
||||
echo $javascript->link('jquery/jquery') . "\n";
|
||||
echo $javascript->link('jquery/jquery-ui') . "\n";
|
||||
echo $javascript->link('http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js') . "\n";
|
||||
echo $javascript->link('http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js') . "\n";
|
||||
//echo $html->css('themes/base/ui.all') . "\n";
|
||||
//echo $html->css('themes/smoothness/ui.all') . "\n";
|
||||
//echo $html->css('themes/dotluv/ui.all') . "\n";
|
||||
echo $html->css('themes/start/ui.all') . "\n";
|
||||
echo $javascript->link('jquery.form') . "\n";
|
||||
echo $javascript->link('pmgr') . "\n";
|
||||
echo $scripts_for_layout . "\n";
|
||||
|
||||
@@ -71,7 +71,7 @@ function showResponse(responseText, statusText) {
|
||||
<?php else: ?>
|
||||
"<?php echo $html->url(array('controller' => 'customers',
|
||||
'action' => 'receipt')); ?>"
|
||||
+ "/" + $("#lease-id").val();
|
||||
+ "/" + "<?php echo $customer['id']; ?>";
|
||||
<?php endif; ?>
|
||||
return;
|
||||
}
|
||||
@@ -222,6 +222,7 @@ if (empty($movein))
|
||||
array('gridstate' =>
|
||||
'onGridState("#"+$(this).attr("id"), gridstate)'),
|
||||
),
|
||||
'action' => 'active',
|
||||
'nolinks' => true,
|
||||
'limit' => 10,
|
||||
)));
|
||||
|
||||
@@ -16,8 +16,20 @@
|
||||
$html->url(array('controller' => 'units',
|
||||
'action' => 'view',
|
||||
$unit['id'])) .
|
||||
'" alt="' .
|
||||
'" alt="Unit #' .
|
||||
$unit['name'] .
|
||||
'" title="Unit #' .
|
||||
$unit['name'] .
|
||||
(empty($unit['data']['CurrentLease']['id'])
|
||||
? ''
|
||||
: ('; ' .
|
||||
/* 'Lease #' . */
|
||||
/* $unit['data']['CurrentLease']['id'] . */
|
||||
/* '; ' . */
|
||||
$unit['data']['Customer']['name'] .
|
||||
'; Paid Through ' .
|
||||
$unit['data']['CurrentLease']['paid_through_date'])
|
||||
) .
|
||||
'">' . "\n");
|
||||
}
|
||||
}// for indentation purposes
|
||||
|
||||
74
site/views/statement_entries/reverse.ctp
Normal file
@@ -0,0 +1,74 @@
|
||||
<?php /* -*- mode:PHP -*- */
|
||||
|
||||
echo '<div class="reverse input">' . "\n";
|
||||
|
||||
$customer = $entry['Customer'];
|
||||
$transaction = $entry['Transaction'];
|
||||
$account = $entry['Account'];
|
||||
|
||||
if (isset($entry['StatementEntry']))
|
||||
$entry = $entry['StatementEntry'];
|
||||
|
||||
// We're not actually using a grid to select the customer,
|
||||
// but selection-text makes for reasonable formatting
|
||||
echo ('<DIV CLASS="reverse grid-selection-text">' .
|
||||
'<TABLE>' . "\n");
|
||||
|
||||
echo ('<TR><TD style="padding-right: 1em;">' . $customer['name'] . '</TD>' .
|
||||
' <TD>' . '(Customer #' . $customer['id'] . ')' . '</TD>' .
|
||||
'</TR>' . "\n");
|
||||
|
||||
echo ('<TR><TD style="padding-right: 1em;">' . $account['name'] . '</TD>' .
|
||||
' <TD>' . '(StatementEntry #' . $entry['id'] . ')' . '</TD>' .
|
||||
'</TR>' . "\n");
|
||||
|
||||
echo ('<TR><TD style="padding-right: 1em;">Amount:</TD>' .
|
||||
' <TD>' . FormatHelper::currency($entry['amount']) . '</TD>' .
|
||||
'</TR>' . "\n");
|
||||
|
||||
echo ('</TABLE>' .
|
||||
'</DIV>' . "\n");
|
||||
|
||||
|
||||
echo $form->create(null, array('id' => 'reverse-form',
|
||||
'url' => array('action' => 'reverse'))) . "\n";
|
||||
|
||||
echo $form->input("StatementEntry.id",
|
||||
array('type' => 'hidden',
|
||||
'value' => $entry['id'])) . "\n";
|
||||
|
||||
echo $this->element('form_table',
|
||||
array('class' => "item reverse transaction entry",
|
||||
//'with_name_after' => ':',
|
||||
'field_prefix' => 'Transaction',
|
||||
'fields' => array
|
||||
("stamp" => array('opts' => array('type' => 'text'),
|
||||
'between' => '<A HREF="#" ONCLICK="datepickerNow(\'TransactionStamp\'); return false;">Now</A>',
|
||||
),
|
||||
"comment" => array('opts' => array('size' => 50),
|
||||
),
|
||||
))) . "\n";
|
||||
|
||||
echo $form->end('Reverse Charge');
|
||||
?>
|
||||
|
||||
<script type="text/javascript"><!--
|
||||
|
||||
// Reset the form
|
||||
function resetForm() {
|
||||
datepickerNow('TransactionStamp');
|
||||
}
|
||||
|
||||
$(document).ready(function(){
|
||||
$("#TransactionStamp")
|
||||
.attr('autocomplete', 'off')
|
||||
.datepicker({ constrainInput: true,
|
||||
numberOfMonths: [1, 1],
|
||||
showCurrentAtPos: 0,
|
||||
dateFormat: 'mm/dd/yy' });
|
||||
|
||||
resetForm();
|
||||
});
|
||||
--></script>
|
||||
|
||||
</div>
|
||||
@@ -34,6 +34,7 @@ if (!empty($nsf_tender['id']))
|
||||
array('controller' => 'tenders',
|
||||
'action' => 'view',
|
||||
$nsf_tender['id'])));
|
||||
$rows[] = array('Comment', $transaction['comment']);
|
||||
|
||||
echo $this->element('table',
|
||||
array('class' => 'item transaction detail',
|
||||
|
||||
@@ -1,447 +0,0 @@
|
||||
.GridHeader {
|
||||
}
|
||||
.Header {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.Header th {
|
||||
font-size: 100%; font-weight: bold; text-align: left;
|
||||
padding: 2px;
|
||||
background-image: url(images/headerbg.gif) ;
|
||||
color: #FFFFFF;
|
||||
width: 100%;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.HeaderLeft {
|
||||
background-image: url(images/headerleft.gif);
|
||||
}
|
||||
|
||||
.HeaderRight {
|
||||
background-image: url(images/headerright.gif);
|
||||
}
|
||||
.HeaderButton {
|
||||
background-image: url(images/headerbg.gif);
|
||||
}
|
||||
.HeaderButton img{
|
||||
width: 17px;
|
||||
}
|
||||
|
||||
.HeaderLeft img{
|
||||
width: 14px;
|
||||
}
|
||||
|
||||
.HeaderRight img{
|
||||
width: 10px;
|
||||
}
|
||||
|
||||
.GridHeader table {margin:0;}
|
||||
.GridHeader td, tr {padding:0;}
|
||||
/* Grid */
|
||||
table.scroll {
|
||||
table-layout: fixed;
|
||||
/*border-right: 1px solid #D4D0C8;*/
|
||||
margin-bottom:0;
|
||||
}
|
||||
table.scroll tbody tr {
|
||||
background-color: #ffffff;
|
||||
}
|
||||
|
||||
table.scroll tbody tr.alt {
|
||||
background-color: #F9F9F9;
|
||||
}
|
||||
|
||||
table.scroll tr.over td{
|
||||
background-color: #E1DCF4;
|
||||
}
|
||||
|
||||
table.scroll tr.selected td {
|
||||
background: #3d84cc;
|
||||
color: White;
|
||||
}
|
||||
|
||||
table.scroll tbody td {
|
||||
padding: 2px;
|
||||
text-align: left;
|
||||
border-bottom: 1px solid #D4D0C8;
|
||||
border-left: 1px solid #D4D0C8;
|
||||
text-overflow: ellipsis;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
height : auto;
|
||||
}
|
||||
|
||||
table.scroll thead th {
|
||||
padding: 2px;
|
||||
border-bottom: 1px solid #CBC7B8;
|
||||
border-left: 1px solid #D4D0C8;
|
||||
text-align: left;
|
||||
font-weight: normal;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
background-image: url(images/grid-blue-hd.gif);
|
||||
height : 17px;
|
||||
}
|
||||
|
||||
table.scroll th div {
|
||||
overflow: hidden;
|
||||
/* white-space: nowrap;*/
|
||||
word-wrap: break-word;
|
||||
height : 17px;
|
||||
}
|
||||
table.scroll th span {
|
||||
cursor: e-resize;
|
||||
/* border-right: 1px solid #D6D2C2; */
|
||||
width: 10px;
|
||||
float: right;
|
||||
display: block;
|
||||
margin: -2px -1px -2px 0px;
|
||||
height: 17px;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
/* End Grid */
|
||||
|
||||
/* Pager */
|
||||
div.scroll {
|
||||
vertical-align: top;
|
||||
height: 23px;
|
||||
white-space: nowrap;
|
||||
text-align: center;
|
||||
background-image: url(images/grid-blue-ft.gif);
|
||||
}
|
||||
div.scroll span {
|
||||
vertical-align : top;
|
||||
}
|
||||
.selbox {
|
||||
font-size: x-small;
|
||||
vertical-align : top;
|
||||
}
|
||||
input.selbox{
|
||||
font-size: x-small;
|
||||
vertical-align : top;
|
||||
}
|
||||
.pgbuttons {
|
||||
margin-top :2px;
|
||||
}
|
||||
.nav-table-left {
|
||||
padding:1px;
|
||||
float: left;
|
||||
/* position:absolute;*/
|
||||
}
|
||||
.nav-table-right {
|
||||
padding:1px;
|
||||
float: right;
|
||||
}
|
||||
|
||||
table.navtable {margin-bottom:0; width: auto;}
|
||||
table.navtable tr{
|
||||
background-image: url(images/grid-blue-ft.gif);
|
||||
}
|
||||
|
||||
table.navtable td.nav-button {
|
||||
border: 1px solid #E2ECF8;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
table.navtable td.nav-hover {
|
||||
border: 1px solid #83B4D8;
|
||||
}
|
||||
|
||||
table.tbutton tr td{
|
||||
border : none;
|
||||
padding:0px;
|
||||
}
|
||||
|
||||
img.jsHover { /*not used */
|
||||
border: 1px solid #99CCFF;
|
||||
}
|
||||
/* End Pager */
|
||||
/*multiselect checkbox */
|
||||
.cbox {
|
||||
height: 10px;
|
||||
width: 10px;
|
||||
/*border:1px solid #999;*/
|
||||
}
|
||||
/* end multiselect */
|
||||
|
||||
|
||||
/* loading div */
|
||||
div.loading {
|
||||
position: absolute;
|
||||
padding: 3px;
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
background: red;
|
||||
color: white;
|
||||
display: none;
|
||||
}
|
||||
|
||||
div.loadingui {
|
||||
display:none;
|
||||
z-index:6000;
|
||||
position:absolute;
|
||||
}
|
||||
|
||||
|
||||
div.loadingui div.msgbox {
|
||||
position: relative;
|
||||
z-index:6001;
|
||||
left: 35%;
|
||||
top:45%;
|
||||
background: url(images/loading.gif) no-repeat left;
|
||||
width: 100px;
|
||||
border: 2px solid #B2D2FF;
|
||||
text-align: right;
|
||||
height: auto;
|
||||
padding:2px;
|
||||
margin: 0px;
|
||||
}
|
||||
/* end loading div */
|
||||
/* toolbar */
|
||||
div.userdata {
|
||||
margin-top: 0px;
|
||||
background-color : #EAF9F9;
|
||||
height : 20px;
|
||||
overflow: hidden;
|
||||
}
|
||||
/* end toolbar */
|
||||
/*Subgrid text mode*/
|
||||
.subgrid {
|
||||
height: 100%;
|
||||
overflow: auto;
|
||||
}
|
||||
.tablediv {
|
||||
background-color: White;
|
||||
border-spacing: 1px; /*cellspacing:poor IE support for this*/
|
||||
border-collapse: separate;
|
||||
width:100%; /* FF hack poor when scroling subgrid */
|
||||
}
|
||||
.celldiv {
|
||||
float: left;
|
||||
display: table-cell;
|
||||
border: 1px dotted #CCCCCC;
|
||||
overflow: auto;
|
||||
white-space: normal;
|
||||
}
|
||||
.celldivth {
|
||||
float: left; /*fix for buggy browsers*/
|
||||
border: 1px solid #CCCCCC;
|
||||
background-color: #99CCFF;
|
||||
border-bottom: 1px solid #CBC7B8;
|
||||
text-align: left;
|
||||
overflow: auto;
|
||||
}
|
||||
.rowdiv {
|
||||
display: table-row;
|
||||
background: #F9F9F9 none;
|
||||
color: #000000;
|
||||
width: 100%;
|
||||
overflow:auto;
|
||||
}
|
||||
/* End Subgrid */
|
||||
|
||||
/* InLine editing */
|
||||
input.editable[type="text"] {
|
||||
font-size: x-small;
|
||||
overflow: hidden;
|
||||
height : 15px;
|
||||
}
|
||||
input.editable[type="checkbox"] {
|
||||
}
|
||||
|
||||
textarea.editable {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
select.editable {
|
||||
font-size: x-small;
|
||||
}
|
||||
/* End Inline Editing */
|
||||
|
||||
/*Modal Window */
|
||||
.modaltext{
|
||||
text-align : left;
|
||||
}
|
||||
.modalwin{
|
||||
border:1px solid #555555;
|
||||
background:#F9F9F9;
|
||||
text-align:left;
|
||||
margin: 0 auto;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
|
||||
.modalhead {
|
||||
background-image: url(images/grid-blue-hd.gif);
|
||||
height: 20px;
|
||||
|
||||
}
|
||||
.modalcontent {
|
||||
overflow: auto;
|
||||
margin-bottom: 9px;
|
||||
margin-left: 5px;
|
||||
}
|
||||
/* end Modal window*/
|
||||
/* Search window */
|
||||
input.search {
|
||||
margin: 2px;
|
||||
width: 70px;
|
||||
font-size: 10px;
|
||||
color: #15428B;
|
||||
}
|
||||
|
||||
select.search {
|
||||
margin: 2px;
|
||||
width: 70px;
|
||||
font-size: 10px;
|
||||
color: #15428B;
|
||||
}
|
||||
.buttonsearch {
|
||||
width : 50px;
|
||||
font-size: 10px;
|
||||
color: #15428B;
|
||||
}
|
||||
/*End search */
|
||||
|
||||
/* Form edit */
|
||||
|
||||
.FormGrid {
|
||||
margin: 0px;
|
||||
}
|
||||
.EditTable {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.FormData { /* tr */
|
||||
|
||||
}
|
||||
|
||||
#FormError td {
|
||||
font-size: 90%;
|
||||
color: #FF0000;
|
||||
vertical-align: top;
|
||||
background-color: #f7f7f7;
|
||||
}
|
||||
|
||||
.CaptionTD{ /* td */
|
||||
font-weight: normal; text-align: left; vertical-align: top;
|
||||
padding: 1px;
|
||||
border-top: 1px solid #D4D0C8;
|
||||
white-space: nowrap;
|
||||
color: #000000;
|
||||
}
|
||||
.DataTD { /* td */
|
||||
padding: 1px;
|
||||
border-top: 1px solid #D4D0C8;
|
||||
vertical-align: top;
|
||||
}
|
||||
.navButton{
|
||||
border-top: 1px solid #D4D0C8;
|
||||
border-bottom: 1px solid #D4D0C8;
|
||||
text-align: center;
|
||||
}
|
||||
.navButton input{
|
||||
width:17px;
|
||||
}
|
||||
input.EditButton { /* buttons are at footer tr */
|
||||
font-size: 10px;
|
||||
color: #15428B;
|
||||
}
|
||||
td.EditButton {
|
||||
text-align: right;
|
||||
border-top: 1px solid #D4D0C8;
|
||||
border-bottom: 1px solid #D4D0C8;
|
||||
}
|
||||
|
||||
.FormElement { /* form element - input -text,textarea,checkbox - select */
|
||||
|
||||
}
|
||||
.FormElement {
|
||||
font-size: 10px;
|
||||
}
|
||||
input[type="text"].FormElement{
|
||||
color: #15428B;
|
||||
}
|
||||
input[type="checkbox"].FormElement{
|
||||
width: 15px;
|
||||
color: #15428B;
|
||||
}
|
||||
input[type="textarea"].FormElement{
|
||||
color: #15428B;
|
||||
}
|
||||
select.FormElement {
|
||||
font-size: 10px;
|
||||
color: #15428B;
|
||||
}
|
||||
/* End Eorm edit */
|
||||
|
||||
/* Delete Dialog */
|
||||
.DelButton > input { /* buttons are at footer tr */
|
||||
font-size: 10px;
|
||||
color: #15428B;
|
||||
}
|
||||
.DelButton {
|
||||
text-align: right;
|
||||
}
|
||||
/* End Delete Dialog */
|
||||
|
||||
img.jqResize {
|
||||
position:absolute;
|
||||
bottom: 0px;
|
||||
right: 0px;
|
||||
cursor :se-resize;
|
||||
}
|
||||
.dirty-cell {
|
||||
background: transparent url(images/dirty.gif) no-repeat 0 0;
|
||||
}
|
||||
#DelError td {
|
||||
font-size: 90%;
|
||||
color: #FF0000;
|
||||
vertical-align: top;
|
||||
background-color: #f7f7f7;
|
||||
}
|
||||
/* Tree Grid */
|
||||
.tree-wrap
|
||||
{
|
||||
float: left;
|
||||
position: relative;
|
||||
height: 18px;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
}
|
||||
.tree-minus
|
||||
{
|
||||
position: absolute;
|
||||
height: 18px;
|
||||
width: 16px;
|
||||
overflow: hidden;
|
||||
background: url(images/tree_minus.gif) no-repeat;
|
||||
}
|
||||
.tree-plus
|
||||
{
|
||||
position: absolute;
|
||||
height: 18px;
|
||||
width: 16px;
|
||||
overflow: hidden;
|
||||
background: url(images/tree_plus.gif) no-repeat;
|
||||
}
|
||||
.tree-leaf
|
||||
{
|
||||
position: absolute;
|
||||
height: 18px;
|
||||
width: 16px;
|
||||
overflow: hidden;
|
||||
background: url(images/tree_leaf.gif) no-repeat;
|
||||
}
|
||||
.treeclick
|
||||
{
|
||||
cursor: pointer;
|
||||
}
|
||||
.edit-cell {
|
||||
background-color: #E1DCF4 !important;
|
||||
}
|
||||
.selected-row, .selected-row TD {
|
||||
background-color: #3d84cc;
|
||||
}
|
||||
|
Before Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 832 B |
|
Before Width: | Height: | Size: 309 B |
|
Before Width: | Height: | Size: 986 B |
|
Before Width: | Height: | Size: 925 B |
|
Before Width: | Height: | Size: 229 B |
|
Before Width: | Height: | Size: 821 B |
|
Before Width: | Height: | Size: 821 B |
|
Before Width: | Height: | Size: 87 B |
|
Before Width: | Height: | Size: 425 B |
|
Before Width: | Height: | Size: 87 B |
|
Before Width: | Height: | Size: 957 B |
|
Before Width: | Height: | Size: 923 B |
|
Before Width: | Height: | Size: 70 B |
|
Before Width: | Height: | Size: 771 B |
|
Before Width: | Height: | Size: 85 B |
|
Before Width: | Height: | Size: 875 B |
|
Before Width: | Height: | Size: 66 B |
|
Before Width: | Height: | Size: 925 B |
|
Before Width: | Height: | Size: 923 B |
|
Before Width: | Height: | Size: 875 B |
|
Before Width: | Height: | Size: 879 B |
|
Before Width: | Height: | Size: 89 B |
|
Before Width: | Height: | Size: 879 B |
|
Before Width: | Height: | Size: 581 B |
|
Before Width: | Height: | Size: 862 B |
|
Before Width: | Height: | Size: 635 B |
|
Before Width: | Height: | Size: 634 B |
|
Before Width: | Height: | Size: 996 B |
|
Before Width: | Height: | Size: 830 B |
|
Before Width: | Height: | Size: 833 B |
|
Before Width: | Height: | Size: 43 B |
|
Before Width: | Height: | Size: 351 B |
|
Before Width: | Height: | Size: 134 B |
|
Before Width: | Height: | Size: 132 B |
|
Before Width: | Height: | Size: 138 B |
|
Before Width: | Height: | Size: 312 B |
@@ -1,457 +0,0 @@
|
||||
.GridHeader {
|
||||
}
|
||||
.Header {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.Header th {
|
||||
font-size: 100%; font-weight: bold; text-align: left;
|
||||
padding: 2px;
|
||||
background-image: url(images/headerbg.gif); color: #ffffff;
|
||||
width: 100%;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.HeaderLeft {
|
||||
background-image: url(images/headerleft.gif);
|
||||
}
|
||||
|
||||
.HeaderRight {
|
||||
background-image: url(images/headerright.gif);
|
||||
}
|
||||
.HeaderButton {
|
||||
background-image: url(images/headerbg.gif);
|
||||
}
|
||||
.HeaderButton img{
|
||||
width: 21px;
|
||||
}
|
||||
|
||||
.HeaderLeft img{
|
||||
width: 4px;
|
||||
}
|
||||
|
||||
.HeaderRight img{
|
||||
width: 9px;
|
||||
}
|
||||
.GridHeader table {margin:0;}
|
||||
.GridHeader td, tr {padding:0;}
|
||||
|
||||
|
||||
/* Grid */
|
||||
table.scroll {
|
||||
border-right: 1px solid #FFFFFF;
|
||||
table-layout: fixed;
|
||||
margin-bottom:0;
|
||||
}
|
||||
table.scroll tbody tr {
|
||||
background-color: #eceae3;
|
||||
}
|
||||
|
||||
table.scroll tbody tr.alt{
|
||||
background-color: #e3dfd1;
|
||||
}
|
||||
|
||||
table.scroll tr.over td{
|
||||
background-color: #D2B48C;
|
||||
}
|
||||
|
||||
|
||||
table.scroll tr.selected td {
|
||||
background-color: #c9b9b1;
|
||||
color: Black;
|
||||
}
|
||||
|
||||
table.scroll tbody tr td {
|
||||
font-size: 90%;
|
||||
padding: 2px;
|
||||
text-align: left;
|
||||
border-left: 1px solid #FFFFFF;
|
||||
border-bottom: 1px solid #FFFFFF;
|
||||
text-overflow: ellipsis;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
height : auto;
|
||||
}
|
||||
|
||||
table.scroll thead tr th {
|
||||
font-size: 90%;
|
||||
font-weight: normal;
|
||||
padding: 2px;
|
||||
border-left: 1px solid #FFFFFF;
|
||||
border-bottom: 1px solid #FFFFFF;
|
||||
text-align: left;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
background: url(images/grid-blue-hd.gif) transparent repeat-x;
|
||||
height : 18px;
|
||||
}
|
||||
table.scroll thead tr th div img {
|
||||
width: 9px;
|
||||
}
|
||||
|
||||
table.scroll th div {
|
||||
overflow: hidden;
|
||||
/* white-space: nowrap;*/
|
||||
word-wrap: break-word;
|
||||
height : 18px;
|
||||
}
|
||||
table.scroll th span {
|
||||
cursor: e-resize;
|
||||
/* border-right: 1px solid #D6D2C2; */
|
||||
width: 5px;
|
||||
float: right;
|
||||
position: relative;
|
||||
display: block;
|
||||
margin: -1px -1px -1px 0px;
|
||||
height: 18px;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
table.scroll thead {
|
||||
}
|
||||
|
||||
/* End Grid */
|
||||
|
||||
/* Pager */
|
||||
div.scroll {
|
||||
vertical-align: top;
|
||||
height: 23px;
|
||||
text-align: center;
|
||||
white-space: nowrap;
|
||||
background-image: url(images/grid-blue-ft.gif);
|
||||
border-right: 1px solid #FFFFFF;
|
||||
border-left: 1px solid #FFFFFF;
|
||||
border-bottom: 1px solid #FFFFFF;
|
||||
}
|
||||
div.scroll span {
|
||||
vertical-align : top;
|
||||
}
|
||||
.selbox {
|
||||
font-size: x-small;
|
||||
vertical-align : top;
|
||||
}
|
||||
input.selbox{
|
||||
font-size: x-small;
|
||||
vertical-align : top;
|
||||
}
|
||||
.pgbuttons {
|
||||
margin-top :1px;
|
||||
}
|
||||
.nav-table-left {
|
||||
padding:1px;
|
||||
float: left;
|
||||
margin-top:2px;
|
||||
/* position:absolute;*/
|
||||
}
|
||||
.nav-table-right {
|
||||
padding:1px;
|
||||
float: right;
|
||||
margin-top:2px;
|
||||
}
|
||||
table.navtable {margin-bottom:0; width: auto;}
|
||||
table.navtable tbody tr {
|
||||
background-image: url(images/grid-blue-ft.gif);
|
||||
}
|
||||
table.navtable tbody tr td.nav-button {
|
||||
border: 1px solid #FFFFFF;
|
||||
white-space: nowrap;
|
||||
}
|
||||
table.navtable tbody tr td.nav-hover {
|
||||
border: 1px solid #c9b9b1;
|
||||
}
|
||||
table.tbutton tbody tr td {
|
||||
border : none;
|
||||
padding:0px;
|
||||
}
|
||||
img.jsHover { /*not used */
|
||||
border: 1px solid #99CCFF;
|
||||
}
|
||||
/* End Pager */
|
||||
/*multiselect checkbox */
|
||||
.cbox {
|
||||
height: 10px;
|
||||
width: 10px;
|
||||
/* text-align: center;*/
|
||||
/*border:1px solid #999;*/
|
||||
}
|
||||
/* end multiselect */
|
||||
|
||||
|
||||
/* loading div */
|
||||
div.loading {
|
||||
position: absolute;
|
||||
padding: 3px;
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
background: red;
|
||||
color: white;
|
||||
display: none;
|
||||
}
|
||||
div.loadingui {
|
||||
display:none;
|
||||
z-index:6000;
|
||||
position:absolute;
|
||||
}
|
||||
|
||||
|
||||
div.loadingui div.msgbox {
|
||||
position: relative;
|
||||
z-index:6001;
|
||||
left: 35%;
|
||||
top:45%;
|
||||
background: url(images/loading.gif) no-repeat left;
|
||||
width: 100px;
|
||||
border: 2px solid #B2D2FF;
|
||||
text-align: right;
|
||||
height: auto;
|
||||
padding:2px;
|
||||
margin: 0px;
|
||||
}
|
||||
|
||||
/* end loading div */
|
||||
/*toolbar */
|
||||
div.userdata {
|
||||
margin-top: 0px;
|
||||
background-color : #e3dfd1;
|
||||
height : 20px;
|
||||
overflow: hidden;
|
||||
}
|
||||
/* end toolbar */
|
||||
/*Subgrid text mode*/
|
||||
.subgrid {
|
||||
height: 100%;
|
||||
overflow: auto;
|
||||
}
|
||||
.tablediv {
|
||||
background-color: White;
|
||||
border-spacing: 1px; /*cellspacing:poor IE support for this*/
|
||||
border-collapse: separate;
|
||||
width:100%; /* FF hack poor when scroling subgrid */
|
||||
}
|
||||
.celldiv {
|
||||
float: left;
|
||||
display: table-cell;
|
||||
border: 1px dotted #CCCCCC;
|
||||
overflow: auto;
|
||||
white-space: normal;
|
||||
}
|
||||
.celldivth {
|
||||
float: left; /*fix for buggy browsers*/
|
||||
border: 1px solid #CCCCCC;
|
||||
background-color: #99CCFF;
|
||||
border-bottom: 1px solid #CBC7B8;
|
||||
text-align: left;
|
||||
overflow: auto;
|
||||
}
|
||||
.rowdiv {
|
||||
display: table-row;
|
||||
background: #F9F9F9 none;
|
||||
color: #000000;
|
||||
width: 100%;
|
||||
overflow:auto;
|
||||
}
|
||||
/* End Subgrid */
|
||||
|
||||
/* InLine editing */
|
||||
input.editable[type="text"] {
|
||||
font-size: x-small;
|
||||
overflow: hidden;
|
||||
}
|
||||
input.editable[type="checkbox"] {
|
||||
}
|
||||
|
||||
textarea.editable {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
select.editable {
|
||||
font-size: x-small;
|
||||
}
|
||||
/* End Inline Editing */
|
||||
|
||||
/*Modal Window */
|
||||
.modaltext{
|
||||
text-align : left;
|
||||
}
|
||||
.modalwin{
|
||||
border:1px solid #555555;
|
||||
background:#F9F9F9;
|
||||
text-align:left;
|
||||
margin: 0 auto;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
|
||||
.modalhead {
|
||||
background-image: url(images/grid-blue-hd.gif);
|
||||
height: 20px;
|
||||
|
||||
}
|
||||
.modalcontent {
|
||||
overflow: auto;
|
||||
margin-bottom: 9px;
|
||||
margin-left: 5px;
|
||||
}
|
||||
/* end Modal window*/
|
||||
/* Search window */
|
||||
input.search {
|
||||
margin: 2px;
|
||||
width: 70px;
|
||||
font-size: 10px;
|
||||
color: #15428B;
|
||||
}
|
||||
|
||||
select.search {
|
||||
margin: 2px;
|
||||
width: 70px;
|
||||
font-size: 10px;
|
||||
color: #15428B;
|
||||
}
|
||||
.buttonsearch {
|
||||
width : 50px;
|
||||
font-size: 10px;
|
||||
color: #15428B;
|
||||
}
|
||||
/*End search */
|
||||
|
||||
/* Form edit */
|
||||
|
||||
.FormGrid {
|
||||
margin: 0px;
|
||||
}
|
||||
.EditTable {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.FormData { /* tr */
|
||||
|
||||
}
|
||||
|
||||
#FormError td {
|
||||
font-size: 90%;
|
||||
color: #FF0000;
|
||||
vertical-align: top;
|
||||
background-color: #f7f7f7;
|
||||
}
|
||||
|
||||
.CaptionTD{ /* td */
|
||||
font-weight: normal; text-align: left; vertical-align: top;
|
||||
padding: 1px;
|
||||
border-top: 1px solid #D4D0C8;
|
||||
white-space: nowrap;
|
||||
color: #000000;
|
||||
}
|
||||
.DataTD { /* td */
|
||||
padding: 1px;
|
||||
border-top: 1px solid #D4D0C8;
|
||||
vertical-align: top;
|
||||
}
|
||||
.navButton{
|
||||
border-top: 1px solid #D4D0C8;
|
||||
border-bottom: 1px solid #D4D0C8;
|
||||
text-align: center;
|
||||
}
|
||||
.navButton input{
|
||||
width:19px;
|
||||
}
|
||||
input.EditButton { /* buttons are at footer tr */
|
||||
font-size: 10px;
|
||||
color: #15428B;
|
||||
}
|
||||
td.EditButton {
|
||||
text-align: right;
|
||||
border-top: 1px solid #D4D0C8;
|
||||
border-bottom: 1px solid #D4D0C8;
|
||||
}
|
||||
|
||||
.FormElement { /* form element - input -text,textarea,checkbox - select */
|
||||
|
||||
}
|
||||
.FormElement {
|
||||
font-size: 10px;
|
||||
}
|
||||
input[type="text"].FormElement{
|
||||
color: #15428B;
|
||||
}
|
||||
input[type="checkbox"].FormElement{
|
||||
width: 15px;
|
||||
color: #15428B;
|
||||
}
|
||||
input[type="textarea"].FormElement{
|
||||
color: #15428B;
|
||||
}
|
||||
select.FormElement {
|
||||
font-size: 10px;
|
||||
color: #15428B;
|
||||
}
|
||||
/* End Eorm edit */
|
||||
|
||||
/* Delete Dialog */
|
||||
.DelButton > input { /* buttons are at footer tr */
|
||||
font-size: 10px;
|
||||
color: #15428B;
|
||||
}
|
||||
.DelButton {
|
||||
text-align: right;
|
||||
}
|
||||
/* End Delete Dialog */
|
||||
|
||||
img.jqResize {
|
||||
position:absolute;
|
||||
bottom: 0px;
|
||||
right: 0px;
|
||||
cursor :se-resize;
|
||||
}
|
||||
.dirty-cell {
|
||||
background: transparent url(images/dirty.gif) no-repeat 0 0;
|
||||
}
|
||||
#DelError td {
|
||||
font-size: 90%;
|
||||
color: #FF0000;
|
||||
vertical-align: top;
|
||||
background-color: #f7f7f7;
|
||||
}
|
||||
/* Tree Grid */
|
||||
.tree-wrap
|
||||
{
|
||||
float: left;
|
||||
position: relative;
|
||||
height: 18px;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
}
|
||||
.tree-minus
|
||||
{
|
||||
position: absolute;
|
||||
height: 18px;
|
||||
width: 16px;
|
||||
overflow: hidden;
|
||||
background: url(images/tree_minus.gif) no-repeat;
|
||||
}
|
||||
.tree-plus
|
||||
{
|
||||
position: absolute;
|
||||
height: 18px;
|
||||
width: 16px;
|
||||
overflow: hidden;
|
||||
background: url(images/tree_plus.gif) no-repeat;
|
||||
}
|
||||
.tree-leaf
|
||||
{
|
||||
position: absolute;
|
||||
height: 18px;
|
||||
width: 16px;
|
||||
overflow: hidden;
|
||||
background: url(images/tree_leaf.gif) no-repeat;
|
||||
}
|
||||
.treeclick
|
||||
{
|
||||
cursor: pointer;
|
||||
}
|
||||
.edit-cell {
|
||||
background-color: #D2B48C !important;
|
||||
}
|
||||
.selected-row, .selected-row TD {
|
||||
background-color: #c9b9b1;
|
||||
}
|
||||
|
Before Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 832 B |
|
Before Width: | Height: | Size: 683 B |
|
Before Width: | Height: | Size: 986 B |
|
Before Width: | Height: | Size: 734 B |
|
Before Width: | Height: | Size: 229 B |
|
Before Width: | Height: | Size: 165 B |
|
Before Width: | Height: | Size: 165 B |
|
Before Width: | Height: | Size: 105 B |
|
Before Width: | Height: | Size: 236 B |
|
Before Width: | Height: | Size: 235 B |
|
Before Width: | Height: | Size: 854 B |
|
Before Width: | Height: | Size: 737 B |
|
Before Width: | Height: | Size: 70 B |
|
Before Width: | Height: | Size: 771 B |
|
Before Width: | Height: | Size: 85 B |
|
Before Width: | Height: | Size: 483 B |
|
Before Width: | Height: | Size: 66 B |
|
Before Width: | Height: | Size: 483 B |
|
Before Width: | Height: | Size: 485 B |
|
Before Width: | Height: | Size: 476 B |
|
Before Width: | Height: | Size: 479 B |
|
Before Width: | Height: | Size: 89 B |
|
Before Width: | Height: | Size: 483 B |
|
Before Width: | Height: | Size: 581 B |
|
Before Width: | Height: | Size: 862 B |
|
Before Width: | Height: | Size: 635 B |
|
Before Width: | Height: | Size: 634 B |
|
Before Width: | Height: | Size: 996 B |
|
Before Width: | Height: | Size: 114 B |
|
Before Width: | Height: | Size: 113 B |
|
Before Width: | Height: | Size: 43 B |
|
Before Width: | Height: | Size: 351 B |