Merge in from the pre_0.1 branch
git-svn-id: file:///svn-source/pmgr/branches/sandbox_0.1@794 97e9348a-65ac-dc4b-aefc-98561f571b83
This commit is contained in:
@@ -239,8 +239,6 @@ SET character_set_client = @saved_cs_client;
|
||||
|
||||
LOCK TABLES `pmgr_contact_addresses` WRITE;
|
||||
/*!40000 ALTER TABLE `pmgr_contact_addresses` DISABLE KEYS */;
|
||||
INSERT INTO `pmgr_contact_addresses` VALUES (1,'1324 N Liberty Lake Rd\nPMB 263','Liberty Lake','WA','99019','USA',NULL);
|
||||
INSERT INTO `pmgr_contact_addresses` VALUES (2,'5221 W Myrtlewood Ct','Spokane','WA','99208','USA',NULL);
|
||||
INSERT INTO `pmgr_contact_addresses` VALUES (3,'PO Box 275','Valley','WA','99181','USA',NULL);
|
||||
INSERT INTO `pmgr_contact_addresses` VALUES (4,'4045 Hesseltine Rd','Springdale','WA','99173','USA',NULL);
|
||||
INSERT INTO `pmgr_contact_addresses` VALUES (5,'PO Box 275','Valley','WA','99181','USA',NULL);
|
||||
@@ -309,9 +307,6 @@ SET character_set_client = @saved_cs_client;
|
||||
|
||||
LOCK TABLES `pmgr_contact_emails` WRITE;
|
||||
/*!40000 ALTER TABLE `pmgr_contact_emails` DISABLE KEYS */;
|
||||
INSERT INTO `pmgr_contact_emails` VALUES (1,'abijah@PerkinsHouse.com',NULL);
|
||||
INSERT INTO `pmgr_contact_emails` VALUES (2,'abijah@PerkinsREI.com',NULL);
|
||||
INSERT INTO `pmgr_contact_emails` VALUES (3,'abijah@ValleyStorage.info',NULL);
|
||||
/*!40000 ALTER TABLE `pmgr_contact_emails` ENABLE KEYS */;
|
||||
UNLOCK TABLES;
|
||||
|
||||
@@ -339,11 +334,6 @@ SET character_set_client = @saved_cs_client;
|
||||
|
||||
LOCK TABLES `pmgr_contact_phones` WRITE;
|
||||
/*!40000 ALTER TABLE `pmgr_contact_phones` DISABLE KEYS */;
|
||||
INSERT INTO `pmgr_contact_phones` VALUES (1,'MOBILE','5098445573',NULL,NULL);
|
||||
INSERT INTO `pmgr_contact_phones` VALUES (2,'MOBILE','5098445973',NULL,NULL);
|
||||
INSERT INTO `pmgr_contact_phones` VALUES (3,'VIRTUAL','5095901112',NULL,NULL);
|
||||
INSERT INTO `pmgr_contact_phones` VALUES (4,'VIRTUAL','8774488664',NULL,NULL);
|
||||
INSERT INTO `pmgr_contact_phones` VALUES (5,'FAX','8662960131',NULL,NULL);
|
||||
INSERT INTO `pmgr_contact_phones` VALUES (6,'LANDLINE','5099374611',NULL,NULL);
|
||||
INSERT INTO `pmgr_contact_phones` VALUES (7,'LANDLINE','5092182061',NULL,NULL);
|
||||
INSERT INTO `pmgr_contact_phones` VALUES (8,'LANDLINE','5099374611',NULL,NULL);
|
||||
@@ -421,7 +411,7 @@ CREATE TABLE `pmgr_contacts` (
|
||||
`middle_name` varchar(255) DEFAULT NULL,
|
||||
`last_name` varchar(255) DEFAULT NULL,
|
||||
`company_name` varchar(255) DEFAULT NULL,
|
||||
`display_name` varchar(512) DEFAULT NULL,
|
||||
`display_name` varchar(512) NOT NULL,
|
||||
`id_federal` varchar(16) DEFAULT NULL,
|
||||
`id_local` varchar(16) DEFAULT NULL,
|
||||
`id_local_state` char(2) DEFAULT NULL,
|
||||
@@ -437,7 +427,6 @@ SET character_set_client = @saved_cs_client;
|
||||
|
||||
LOCK TABLES `pmgr_contacts` WRITE;
|
||||
/*!40000 ALTER TABLE `pmgr_contacts` DISABLE KEYS */;
|
||||
INSERT INTO `pmgr_contacts` VALUES (1,'Abijah',NULL,'Perkins',NULL,'Perkins, Abijah',NULL,NULL,NULL,NULL,NULL);
|
||||
INSERT INTO `pmgr_contacts` VALUES (2,'Vern',NULL,'Emert',NULL,'Emert, Vern',NULL,NULL,NULL,NULL,NULL);
|
||||
INSERT INTO `pmgr_contacts` VALUES (3,'Georgann',NULL,'Dahlen',NULL,'Dahlen, Georgann',NULL,'DAHLEGS501DS','WA',NULL,NULL);
|
||||
INSERT INTO `pmgr_contacts` VALUES (4,'Vicky',NULL,'Emert',NULL,'Emert, Vicky',NULL,NULL,NULL,NULL,NULL);
|
||||
@@ -452,7 +441,7 @@ INSERT INTO `pmgr_contacts` VALUES (12,'Joe',NULL,'Barrett',NULL,'Barrett, Joe',
|
||||
INSERT INTO `pmgr_contacts` VALUES (13,'Tabbi',NULL,'Barrett',NULL,'Barrett, Tabbi',NULL,NULL,NULL,NULL,NULL);
|
||||
INSERT INTO `pmgr_contacts` VALUES (14,'Scott',NULL,'Riese',NULL,'Riese, Scott',NULL,'RIESESL339MD','WA',NULL,NULL);
|
||||
INSERT INTO `pmgr_contacts` VALUES (15,'James',NULL,'McBride',NULL,'McBride, James',NULL,'MCBRIJC432C1','WA',NULL,NULL);
|
||||
INSERT INTO `pmgr_contacts` VALUES (16,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
|
||||
INSERT INTO `pmgr_contacts` VALUES (16,NULL,NULL,NULL,NULL,'McBride Contact - Unknown',NULL,NULL,NULL,NULL,NULL);
|
||||
INSERT INTO `pmgr_contacts` VALUES (17,'Glen',NULL,'Wittner',NULL,'Wittner, Glen',NULL,NULL,NULL,NULL,NULL);
|
||||
INSERT INTO `pmgr_contacts` VALUES (18,'Marlana',NULL,'Francis',NULL,'Francis, Marlana',NULL,'FRANCMM371JS','WA',NULL,NULL);
|
||||
INSERT INTO `pmgr_contacts` VALUES (19,'Don',NULL,'Francis',NULL,'Francis, Don',NULL,NULL,NULL,NULL,NULL);
|
||||
@@ -490,9 +479,9 @@ INSERT INTO `pmgr_contacts` VALUES (50,'Vivian',NULL,'McMahon',NULL,'McMahon, Vi
|
||||
INSERT INTO `pmgr_contacts` VALUES (51,'Murray',NULL,'McMahon',NULL,'McMahon, Murray',NULL,NULL,NULL,NULL,NULL);
|
||||
INSERT INTO `pmgr_contacts` VALUES (52,'Ron',NULL,'Linhoff',NULL,'Linhoff, Ron',NULL,NULL,NULL,NULL,NULL);
|
||||
INSERT INTO `pmgr_contacts` VALUES (53,'Ed',NULL,'Hatcher',NULL,'Hatcher, Ed',NULL,'HATCHEW441D9','WA',NULL,NULL);
|
||||
INSERT INTO `pmgr_contacts` VALUES (54,NULL,NULL,NULL,'Valley Bible Church',NULL,NULL,NULL,NULL,NULL,NULL);
|
||||
INSERT INTO `pmgr_contacts` VALUES (54,NULL,NULL,NULL,'Valley Bible Church','Valley Bible Church',NULL,NULL,NULL,NULL,NULL);
|
||||
INSERT INTO `pmgr_contacts` VALUES (55,'Pamela',NULL,'Hovland',NULL,'Hovland, Pamela',NULL,'HIGGIPD461L7','WA',NULL,NULL);
|
||||
INSERT INTO `pmgr_contacts` VALUES (56,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
|
||||
INSERT INTO `pmgr_contacts` VALUES (56,NULL,NULL,NULL,NULL,'Hoveland Contact - Unknown ',NULL,NULL,NULL,NULL,NULL);
|
||||
INSERT INTO `pmgr_contacts` VALUES (57,'R.R.',NULL,'Hooke',NULL,'Hooke, R.R.',NULL,NULL,NULL,NULL,NULL);
|
||||
INSERT INTO `pmgr_contacts` VALUES (58,'Bill',NULL,'Clark',NULL,'Clark, Bill',NULL,NULL,NULL,NULL,NULL);
|
||||
INSERT INTO `pmgr_contacts` VALUES (59,'Shirley',NULL,'Jackson',NULL,'Jackson, Shirley',NULL,NULL,NULL,NULL,NULL);
|
||||
@@ -633,7 +622,7 @@ CREATE TABLE `pmgr_contacts_methods` (
|
||||
`method` enum('ADDRESS','PHONE','EMAIL') NOT NULL,
|
||||
`method_id` int(10) unsigned NOT NULL,
|
||||
`type` enum('MAIN','HOME','BUSINESS','OTHER') NOT NULL DEFAULT 'MAIN',
|
||||
`preference` enum('PRIMARY','WORK','ALTERNATE','EMERGENCY') NOT NULL DEFAULT 'PRIMARY',
|
||||
`preference` enum('PRIMARY','ALTERNATE','EMERGENCY') NOT NULL DEFAULT 'PRIMARY',
|
||||
`comment` varchar(255) DEFAULT NULL,
|
||||
PRIMARY KEY (`contact_id`,`method`,`method_id`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||
@@ -645,16 +634,6 @@ SET character_set_client = @saved_cs_client;
|
||||
|
||||
LOCK TABLES `pmgr_contacts_methods` WRITE;
|
||||
/*!40000 ALTER TABLE `pmgr_contacts_methods` DISABLE KEYS */;
|
||||
INSERT INTO `pmgr_contacts_methods` VALUES (1,'ADDRESS',1,'MAIN','PRIMARY',NULL);
|
||||
INSERT INTO `pmgr_contacts_methods` VALUES (1,'ADDRESS',2,'HOME','ALTERNATE',NULL);
|
||||
INSERT INTO `pmgr_contacts_methods` VALUES (1,'PHONE',1,'MAIN','PRIMARY',NULL);
|
||||
INSERT INTO `pmgr_contacts_methods` VALUES (1,'PHONE',2,'MAIN','ALTERNATE',NULL);
|
||||
INSERT INTO `pmgr_contacts_methods` VALUES (1,'PHONE',3,'BUSINESS','WORK',NULL);
|
||||
INSERT INTO `pmgr_contacts_methods` VALUES (1,'PHONE',4,'BUSINESS','WORK',NULL);
|
||||
INSERT INTO `pmgr_contacts_methods` VALUES (1,'PHONE',5,'BUSINESS','WORK',NULL);
|
||||
INSERT INTO `pmgr_contacts_methods` VALUES (1,'EMAIL',1,'HOME','PRIMARY',NULL);
|
||||
INSERT INTO `pmgr_contacts_methods` VALUES (1,'EMAIL',2,'HOME','WORK',NULL);
|
||||
INSERT INTO `pmgr_contacts_methods` VALUES (1,'EMAIL',3,'BUSINESS','WORK',NULL);
|
||||
INSERT INTO `pmgr_contacts_methods` VALUES (2,'ADDRESS',3,'HOME','PRIMARY',NULL);
|
||||
INSERT INTO `pmgr_contacts_methods` VALUES (2,'PHONE',6,'MAIN','PRIMARY',NULL);
|
||||
INSERT INTO `pmgr_contacts_methods` VALUES (3,'ADDRESS',4,'HOME','PRIMARY',NULL);
|
||||
@@ -5685,6 +5664,11 @@ SET character_set_client = utf8;
|
||||
CREATE TABLE `pmgr_unit_types` (
|
||||
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`code` varchar(12) NOT NULL,
|
||||
`residential` tinyint(1) unsigned NOT NULL DEFAULT '0',
|
||||
`enclosed` tinyint(1) unsigned NOT NULL DEFAULT '0',
|
||||
`climate` tinyint(1) unsigned NOT NULL DEFAULT '0',
|
||||
`outdoor` tinyint(1) unsigned NOT NULL DEFAULT '0',
|
||||
`covered` tinyint(1) unsigned NOT NULL DEFAULT '0',
|
||||
`name` varchar(80) NOT NULL,
|
||||
`comment` varchar(255) DEFAULT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
@@ -5697,9 +5681,9 @@ SET character_set_client = @saved_cs_client;
|
||||
|
||||
LOCK TABLES `pmgr_unit_types` WRITE;
|
||||
/*!40000 ALTER TABLE `pmgr_unit_types` DISABLE KEYS */;
|
||||
INSERT INTO `pmgr_unit_types` VALUES (1,'xxx','Self Storage',NULL);
|
||||
INSERT INTO `pmgr_unit_types` VALUES (2,'xxx','Yard Parking',NULL);
|
||||
INSERT INTO `pmgr_unit_types` VALUES (3,'xxx','Apartment',NULL);
|
||||
INSERT INTO `pmgr_unit_types` VALUES (1,'xxx',0,1,0,0,0,'Self Storage',NULL);
|
||||
INSERT INTO `pmgr_unit_types` VALUES (2,'xxx',0,0,0,1,0,'Yard Parking',NULL);
|
||||
INSERT INTO `pmgr_unit_types` VALUES (3,'xxx',1,0,0,0,0,'Apartment',NULL);
|
||||
/*!40000 ALTER TABLE `pmgr_unit_types` ENABLE KEYS */;
|
||||
UNLOCK TABLES;
|
||||
|
||||
@@ -5716,7 +5700,6 @@ CREATE TABLE `pmgr_units` (
|
||||
`code` varchar(12) NOT NULL,
|
||||
`name` varchar(80) NOT NULL,
|
||||
`status` enum('DELETED','DAMAGED','COMPANY','UNAVAILABLE','RESERVED','DIRTY','VACANT','OCCUPIED','LOCKED','LIENED') NOT NULL DEFAULT 'VACANT',
|
||||
`current_lease_id` int(10) unsigned DEFAULT NULL,
|
||||
`sort_order` mediumint(8) unsigned NOT NULL,
|
||||
`walk_order` mediumint(8) unsigned NOT NULL,
|
||||
`deposit` float(12,2) DEFAULT NULL,
|
||||
@@ -5732,84 +5715,84 @@ SET character_set_client = @saved_cs_client;
|
||||
|
||||
LOCK TABLES `pmgr_units` WRITE;
|
||||
/*!40000 ALTER TABLE `pmgr_units` DISABLE KEYS */;
|
||||
INSERT INTO `pmgr_units` VALUES (1,1,'10','10','OCCUPIED',11,23,10,25.00,90.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (2,1,'11','11','VACANT',13,24,9,25.00,90.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (3,1,'12','12','VACANT',NULL,25,8,25.00,90.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (4,1,'13','13','OCCUPIED',18,26,7,25.00,90.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (5,2,'14','14','OCCUPIED',3,27,6,25.00,35.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (6,2,'15','15','VACANT',47,28,5,25.00,35.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (7,2,'16','16','OCCUPIED',21,29,4,25.00,35.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (8,2,'17','17','VACANT',8,30,3,25.00,35.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (9,2,'18','18','OCCUPIED',27,31,2,25.00,35.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (10,2,'19','19','VACANT',10,32,1,25.00,35.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (11,2,'22','22','UNAVAILABLE',NULL,33,50,25.00,35.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (12,2,'23','23','VACANT',50,34,49,25.00,35.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (13,2,'24','24','OCCUPIED',33,35,48,25.00,35.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (14,2,'25','25','VACANT',NULL,36,47,25.00,35.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (15,2,'26','26','OCCUPIED',22,37,46,25.00,35.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (16,2,'27','27','OCCUPIED',5,38,45,25.00,35.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (17,1,'28','28','VACANT',17,39,31,25.00,90.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (18,1,'29','29','OCCUPIED',2,40,30,25.00,90.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (19,1,'30','30','OCCUPIED',15,41,29,25.00,90.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (20,3,'31','31','OCCUPIED',NULL,42,28,25.00,70.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (21,3,'32','32','VACANT',37,43,27,25.00,70.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (22,3,'33','33','OCCUPIED',49,44,26,25.00,70.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (23,3,'34','34','OCCUPIED',51,45,25,25.00,70.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (24,3,'35','35','VACANT',26,46,24,25.00,70.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (25,3,'36','36','OCCUPIED',38,47,23,25.00,70.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (26,4,'37','37','OCCUPIED',31,48,22,25.00,50.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (27,4,'38','38','UNAVAILABLE',NULL,49,21,25.00,50.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (28,5,'39','39','OCCUPIED',14,50,68,25.00,80.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (29,6,'40','40','LOCKED',NULL,51,67,25.00,55.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (30,6,'41','41','LOCKED',NULL,52,66,25.00,55.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (31,6,'42','42','OCCUPIED',NULL,53,65,25.00,55.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (32,6,'43','43','VACANT',NULL,54,64,25.00,55.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (33,6,'44','44','VACANT',NULL,55,63,25.00,55.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (34,6,'45','45','OCCUPIED',4,56,62,25.00,55.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (35,7,'A01','A01','VACANT',35,1,39,25.00,49.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (36,7,'A02','A02','VACANT',NULL,2,40,25.00,49.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (37,7,'A03','A03','OCCUPIED',9,3,41,25.00,49.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (38,7,'A04','A04','OCCUPIED',7,4,42,25.00,49.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (39,8,'A05','A05','VACANT',NULL,5,43,25.00,63.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (40,8,'A06','A06','VACANT',NULL,6,44,25.00,63.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (41,9,'APT','APT','OCCUPIED',40,68,20,150.00,375.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (42,7,'B01','B01','OCCUPIED',19,7,32,25.00,49.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (43,7,'B02','B02','VACANT',6,8,33,25.00,49.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (44,7,'B03','B03','VACANT',NULL,9,34,25.00,49.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (45,7,'B04','B04','VACANT',41,10,35,25.00,49.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (46,8,'B05','B05','LOCKED',42,11,36,25.00,63.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (47,8,'B06','B06','OCCUPIED',16,12,37,25.00,63.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (48,8,'B07','B07','VACANT',NULL,13,38,25.00,63.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (49,10,'C01','C01','OCCUPIED',43,14,11,25.00,40.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (50,10,'C02','C02','OCCUPIED',25,15,12,25.00,40.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (51,10,'C03','C03','OCCUPIED',20,16,13,25.00,40.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (52,10,'C04','C04','OCCUPIED',36,17,14,25.00,40.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (53,10,'C05','C05','VACANT',12,18,15,25.00,40.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (54,10,'C06','C06','OCCUPIED',NULL,19,16,25.00,40.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (55,8,'C07','C07','VACANT',NULL,20,17,25.00,63.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (56,8,'C08','C08','VACANT',28,21,18,25.00,63.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (57,8,'C09','C09','OCCUPIED',NULL,22,19,25.00,63.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (58,3,'D01','D01','OCCUPIED',1,57,61,25.00,70.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (59,3,'D02','D02','OCCUPIED',23,58,60,25.00,70.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (60,3,'D03','D03','OCCUPIED',30,59,59,25.00,70.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (61,3,'D04','D04','OCCUPIED',45,60,58,25.00,70.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (62,3,'D05','D05','OCCUPIED',24,61,57,25.00,70.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (63,3,'D06','D06','OCCUPIED',NULL,62,56,25.00,70.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (64,3,'D07','D07','OCCUPIED',39,63,55,25.00,70.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (65,3,'D08','D08','OCCUPIED',NULL,64,54,25.00,70.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (66,3,'D09','D09','OCCUPIED',32,65,53,25.00,70.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (67,11,'D10','D10','VACANT',48,66,52,25.00,60.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (68,11,'D11','D11','VACANT',NULL,67,51,25.00,60.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (69,12,'Y01','Y01','OCCUPIED',34,69,69,0.00,35.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (70,12,'Y02','Y02','OCCUPIED',29,70,70,0.00,35.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (71,12,'Y03','Y03','OCCUPIED',52,71,71,0.00,35.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (72,12,'Y04','Y04','VACANT',NULL,72,72,0.00,35.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (73,12,'Y05','Y05','OCCUPIED',NULL,73,73,0.00,35.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (74,12,'Y06','Y06','VACANT',NULL,74,74,0.00,35.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (75,12,'Y07','Y07','UNAVAILABLE',NULL,75,75,0.00,35.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (76,12,'Y08','Y08','UNAVAILABLE',NULL,76,76,0.00,35.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (77,12,'Y09','Y09','UNAVAILABLE',NULL,77,77,0.00,35.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (78,12,'Y10','Y10','UNAVAILABLE',NULL,78,78,0.00,35.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (1,1,'10','10','OCCUPIED',23,10,25.00,90.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (2,1,'11','11','VACANT',24,9,25.00,90.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (3,1,'12','12','VACANT',25,8,25.00,90.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (4,1,'13','13','OCCUPIED',26,7,25.00,90.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (5,2,'14','14','OCCUPIED',27,6,25.00,35.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (6,2,'15','15','VACANT',28,5,25.00,35.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (7,2,'16','16','OCCUPIED',29,4,25.00,35.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (8,2,'17','17','VACANT',30,3,25.00,35.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (9,2,'18','18','OCCUPIED',31,2,25.00,35.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (10,2,'19','19','VACANT',32,1,25.00,35.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (11,2,'22','22','DAMAGED',33,50,25.00,35.00,'Water leaks down the east wall');
|
||||
INSERT INTO `pmgr_units` VALUES (12,2,'23','23','VACANT',34,49,25.00,35.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (13,2,'24','24','OCCUPIED',35,48,25.00,35.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (14,2,'25','25','VACANT',36,47,25.00,35.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (15,2,'26','26','OCCUPIED',37,46,25.00,35.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (16,2,'27','27','OCCUPIED',38,45,25.00,35.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (17,1,'28','28','VACANT',39,31,25.00,90.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (18,1,'29','29','OCCUPIED',40,30,25.00,90.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (19,1,'30','30','OCCUPIED',41,29,25.00,90.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (20,3,'31','31','OCCUPIED',42,28,25.00,70.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (21,3,'32','32','VACANT',43,27,25.00,70.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (22,3,'33','33','OCCUPIED',44,26,25.00,70.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (23,3,'34','34','OCCUPIED',45,25,25.00,70.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (24,3,'35','35','VACANT',46,24,25.00,70.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (25,3,'36','36','OCCUPIED',47,23,25.00,70.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (26,4,'37','37','OCCUPIED',48,22,25.00,50.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (27,4,'38','38','COMPANY',49,21,25.00,50.00,'Contains lumber, tools, etc.');
|
||||
INSERT INTO `pmgr_units` VALUES (28,5,'39','39','OCCUPIED',50,68,25.00,80.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (29,6,'40','40','LOCKED',51,67,25.00,55.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (30,6,'41','41','LOCKED',52,66,25.00,55.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (31,6,'42','42','OCCUPIED',53,65,25.00,55.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (32,6,'43','43','VACANT',54,64,25.00,55.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (33,6,'44','44','VACANT',55,63,25.00,55.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (34,6,'45','45','OCCUPIED',56,62,25.00,55.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (35,7,'A01','A01','VACANT',1,39,25.00,49.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (36,7,'A02','A02','VACANT',2,40,25.00,49.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (37,7,'A03','A03','OCCUPIED',3,41,25.00,49.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (38,7,'A04','A04','OCCUPIED',4,42,25.00,49.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (39,8,'A05','A05','VACANT',5,43,25.00,63.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (40,8,'A06','A06','VACANT',6,44,25.00,63.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (41,9,'APT','APT','OCCUPIED',68,20,150.00,375.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (42,7,'B01','B01','OCCUPIED',7,32,25.00,49.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (43,7,'B02','B02','VACANT',8,33,25.00,49.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (44,7,'B03','B03','VACANT',9,34,25.00,49.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (45,7,'B04','B04','VACANT',10,35,25.00,49.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (46,8,'B05','B05','LOCKED',11,36,25.00,63.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (47,8,'B06','B06','OCCUPIED',12,37,25.00,63.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (48,8,'B07','B07','VACANT',13,38,25.00,63.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (49,10,'C01','C01','OCCUPIED',14,11,25.00,40.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (50,10,'C02','C02','OCCUPIED',15,12,25.00,40.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (51,10,'C03','C03','OCCUPIED',16,13,25.00,40.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (52,10,'C04','C04','OCCUPIED',17,14,25.00,40.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (53,10,'C05','C05','VACANT',18,15,25.00,40.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (54,10,'C06','C06','OCCUPIED',19,16,25.00,40.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (55,8,'C07','C07','VACANT',20,17,25.00,63.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (56,8,'C08','C08','VACANT',21,18,25.00,63.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (57,8,'C09','C09','OCCUPIED',22,19,25.00,63.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (58,3,'D01','D01','OCCUPIED',57,61,25.00,70.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (59,3,'D02','D02','OCCUPIED',58,60,25.00,70.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (60,3,'D03','D03','OCCUPIED',59,59,25.00,70.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (61,3,'D04','D04','OCCUPIED',60,58,25.00,70.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (62,3,'D05','D05','OCCUPIED',61,57,25.00,70.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (63,3,'D06','D06','OCCUPIED',62,56,25.00,70.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (64,3,'D07','D07','OCCUPIED',63,55,25.00,70.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (65,3,'D08','D08','OCCUPIED',64,54,25.00,70.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (66,3,'D09','D09','OCCUPIED',65,53,25.00,70.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (67,11,'D10','D10','VACANT',66,52,25.00,60.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (68,11,'D11','D11','VACANT',67,51,25.00,60.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (69,12,'Y01','Y01','OCCUPIED',69,69,0.00,35.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (70,12,'Y02','Y02','OCCUPIED',70,70,0.00,35.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (71,12,'Y03','Y03','OCCUPIED',71,71,0.00,35.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (72,12,'Y04','Y04','VACANT',72,72,0.00,35.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (73,12,'Y05','Y05','OCCUPIED',73,73,0.00,35.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (74,12,'Y06','Y06','VACANT',74,74,0.00,35.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (75,12,'Y07','Y07','VACANT',75,75,0.00,35.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (76,12,'Y08','Y08','VACANT',76,76,0.00,35.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (77,12,'Y09','Y09','VACANT',77,77,0.00,35.00,NULL);
|
||||
INSERT INTO `pmgr_units` VALUES (78,12,'Y10','Y10','VACANT',78,78,0.00,35.00,NULL);
|
||||
/*!40000 ALTER TABLE `pmgr_units` ENABLE KEYS */;
|
||||
UNLOCK TABLES;
|
||||
|
||||
@@ -5880,4 +5863,4 @@ UNLOCK TABLES;
|
||||
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
|
||||
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
|
||||
|
||||
-- Dump completed on 2009-08-19 20:30:11
|
||||
-- Dump completed on 2009-08-26 20:06:39
|
||||
|
||||
@@ -475,8 +475,6 @@ CREATE TABLE `pmgr_units` (
|
||||
'LIENED')
|
||||
NOT NULL DEFAULT 'VACANT',
|
||||
|
||||
`current_lease_id` INT(10) UNSIGNED DEFAULT NULL,
|
||||
|
||||
`sort_order` MEDIUMINT UNSIGNED NOT NULL,
|
||||
`walk_order` MEDIUMINT UNSIGNED NOT NULL,
|
||||
|
||||
|
||||
@@ -2,4 +2,24 @@
|
||||
RewriteEngine on
|
||||
RewriteRule ^$ webroot/ [L]
|
||||
RewriteRule (.*) webroot/$1 [L]
|
||||
</IfModule>
|
||||
</IfModule>
|
||||
|
||||
# Lets deny everyone -- its a clean slate!
|
||||
order deny,allow
|
||||
deny from all
|
||||
|
||||
# Now allow local access
|
||||
# Localhost
|
||||
allow from 127.0.0
|
||||
# Local subnet
|
||||
allow from 192.168.7
|
||||
|
||||
# Provide a mechanism for user authentication
|
||||
AuthType Digest
|
||||
AuthName "Property Manager"
|
||||
AuthUserFile "D:/Website/auth/pmgr.htpasswd"
|
||||
Require valid-user
|
||||
|
||||
# Instead of satisfy all (too restrictive)
|
||||
# This allows EITHER local domain OR authenticated user
|
||||
satisfy any
|
||||
|
||||
@@ -38,7 +38,7 @@ class AppController extends Controller {
|
||||
var $helpers = array('Html', 'Form', 'Javascript', 'Format', 'Time', 'Grid');
|
||||
var $components = array('DebugKit.Toolbar');
|
||||
|
||||
var $sidemenu_areas = array('SITE' => false, 'CONTROLLER' => false, 'ACTION' => false);
|
||||
var $sidemenu = array('areas' => array('SITE' => false, 'CONTROLLER' => false, 'ACTION' => false));
|
||||
var $std_area = 10;
|
||||
var $new_area = 20;
|
||||
var $op_area = 30;
|
||||
@@ -61,7 +61,7 @@ class AppController extends Controller {
|
||||
|
||||
function sideMenuAreaVerify(&$area, $subarea, $priority = null) {
|
||||
$area = strtoupper($area);
|
||||
if (!array_key_exists($area, $this->sidemenu_areas))
|
||||
if (!array_key_exists($area, $this->sidemenu['areas']))
|
||||
$this->INTERNAL_ERROR("Sidemenu link '{$area}': Unknown");
|
||||
|
||||
if ($area == 'SITE')
|
||||
@@ -71,9 +71,9 @@ class AppController extends Controller {
|
||||
elseif ($area == 'ACTION')
|
||||
$name = Inflector::humanize(Inflector::singularize($this->params['controller']));
|
||||
|
||||
if (empty($this->sidemenu_areas[$area]))
|
||||
$this->sidemenu_areas[$area]
|
||||
= array('enable' => true, 'name' => $name, 'subarea' => array());
|
||||
if (empty($this->sidemenu['areas'][$area]))
|
||||
$this->sidemenu['areas'][$area]
|
||||
= array('enable' => true, 'name' => $name, 'subareas' => array());
|
||||
|
||||
if (empty($subarea))
|
||||
return;
|
||||
@@ -83,7 +83,7 @@ class AppController extends Controller {
|
||||
$subname .= '';
|
||||
elseif ($subarea == $this->op_area)
|
||||
//$subname .= '-Ops';
|
||||
$subname = 'Operations';
|
||||
$subname = 'Actions';
|
||||
elseif ($subarea == $this->new_area)
|
||||
//$subname .= '-New';
|
||||
$subname = 'Creation';
|
||||
@@ -94,15 +94,15 @@ class AppController extends Controller {
|
||||
else
|
||||
$subname .= '-' . $subarea;
|
||||
|
||||
if (empty($this->sidemenu_areas[$area]['subarea'][$subarea]))
|
||||
$this->sidemenu_areas[$area]['subarea'][$subarea]
|
||||
if (empty($this->sidemenu['areas'][$area]['subareas'][$subarea]))
|
||||
$this->sidemenu['areas'][$area]['subareas'][$subarea]
|
||||
= array('enable' => true, 'name' => $subname, 'priorities' => array());
|
||||
|
||||
if (empty($priority))
|
||||
return;
|
||||
|
||||
if (empty($this->sidemenu_areas[$area]['subarea'][$subarea]['priorities'][$priority]))
|
||||
$this->sidemenu_areas[$area]['subarea'][$subarea]['priorities'][$priority]
|
||||
if (empty($this->sidemenu['areas'][$area]['subareas'][$subarea]['priorities'][$priority]))
|
||||
$this->sidemenu['areas'][$area]['subareas'][$subarea]['priorities'][$priority]
|
||||
= array();
|
||||
}
|
||||
|
||||
@@ -117,9 +117,22 @@ class AppController extends Controller {
|
||||
function sideMenuAreaName($name, $area, $subarea = null) {
|
||||
$this->sideMenuAreaVerify($area, $subarea);
|
||||
if (empty($subarea))
|
||||
$this->sidemenu_areas[$area]['name'] = $name;
|
||||
$this->sidemenu['areas'][$area]['name'] = $name;
|
||||
else
|
||||
$this->sidemenu_areas[$area]['subarea'][$subarea]['name'] = $name;
|
||||
$this->sidemenu['areas'][$area]['subareas'][$subarea]['name'] = $name;
|
||||
}
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
**************************************************************************
|
||||
**************************************************************************
|
||||
* function: sideMenuAreaActivate
|
||||
* - Sets the selected area/subarea to be active when the
|
||||
* page is first loaded.
|
||||
*/
|
||||
|
||||
function sideMenuAreaActivate($area, $subarea = null) {
|
||||
$this->sidemenu['active'] = compact('area', 'subarea');
|
||||
}
|
||||
|
||||
|
||||
@@ -133,9 +146,9 @@ class AppController extends Controller {
|
||||
function sideMenuEnable($area, $subarea = null, $enable = true) {
|
||||
$this->sideMenuAreaVerify($area, $subarea);
|
||||
if (isset($subarea))
|
||||
$this->sidemenu_areas[$area]['subarea'][$subarea]['enable'] = $enable;
|
||||
$this->sidemenu['areas'][$area]['subareas'][$subarea]['enable'] = $enable;
|
||||
else
|
||||
$this->sidemenu_areas[$area]['enable'] = $enable;
|
||||
$this->sidemenu['areas'][$area]['enable'] = $enable;
|
||||
}
|
||||
|
||||
|
||||
@@ -150,7 +163,7 @@ class AppController extends Controller {
|
||||
if (empty($subarea))
|
||||
$subarea = $this->std_area;
|
||||
$this->sideMenuAreaVerify($area, $subarea);
|
||||
$this->sidemenu_areas[$area]['subarea'][$subarea]['priorities'][$priority][]
|
||||
$this->sidemenu['areas'][$area]['subareas'][$subarea]['priorities'][$priority][]
|
||||
= array('name' => $name, 'url' => $url) + (empty($extra) ? array() : $extra);
|
||||
}
|
||||
|
||||
@@ -167,6 +180,9 @@ class AppController extends Controller {
|
||||
$this->addSideMenuLink('Site Map',
|
||||
array('controller' => 'maps', 'action' => 'view', 1), null,
|
||||
'SITE');
|
||||
$this->addSideMenuLink('Unit Sizes',
|
||||
array('controller' => 'unit_sizes', 'action' => 'index'), null,
|
||||
'SITE');
|
||||
$this->addSideMenuLink('Units',
|
||||
array('controller' => 'units', 'action' => 'index'), null,
|
||||
'SITE');
|
||||
@@ -179,72 +195,83 @@ class AppController extends Controller {
|
||||
$this->addSideMenuLink('Deposits',
|
||||
array('controller' => 'transactions', 'action' => 'deposit'), null,
|
||||
'SITE');
|
||||
|
||||
|
||||
$this->addSideMenuLink('Accounts',
|
||||
array('controller' => 'accounts', 'action' => 'index'), null,
|
||||
'SITE', $this->admin_area);
|
||||
$this->addSideMenuLink('Contacts',
|
||||
array('controller' => 'contacts', 'action' => 'index'), null,
|
||||
'SITE', $this->admin_area);
|
||||
$this->addSideMenuLink('Ledgers',
|
||||
array('controller' => 'ledgers', 'action' => 'index'), null,
|
||||
'SITE', $this->admin_area);
|
||||
$this->addSideMenuLink('Tenders',
|
||||
array('controller' => 'tenders', 'action' => 'index'), null,
|
||||
'SITE', $this->admin_area);
|
||||
$this->addSideMenuLink('Transactions',
|
||||
array('controller' => 'transactions', 'action' => 'index'), null,
|
||||
'SITE', $this->admin_area);
|
||||
$this->addSideMenuLink('Ldgr Entries',
|
||||
array('controller' => 'ledger_entries', 'action' => 'index'), null,
|
||||
'SITE', $this->admin_area);
|
||||
$this->addSideMenuLink('Stmt Entries',
|
||||
array('controller' => 'statement_entries', 'action' => 'index'), null,
|
||||
'SITE', $this->admin_area);
|
||||
$this->addSideMenuLink('Assess Charges',
|
||||
array('controller' => 'leases', 'action' => 'assess_all'), null,
|
||||
'SITE', $this->admin_area);
|
||||
$this->addSideMenuLink('RESET DATA',
|
||||
array('controller' => 'accounts', 'action' => 'reset_data'), null,
|
||||
'SITE');
|
||||
|
||||
/* $this->addSideMenuLink('Move-In', */
|
||||
/* array('controller' => 'customers', 'action' => 'move_in'), null, */
|
||||
/* 'SITE', $this->op_area); */
|
||||
|
||||
/* $this->addSideMenuLink('Move-Out', */
|
||||
/* array('controller' => 'customers', 'action' => 'move_out'), null, */
|
||||
/* 'SITE', $this->op_area); */
|
||||
|
||||
/* $this->addSideMenuLink('New Receipt', */
|
||||
/* array('controller' => 'customers', 'action' => 'receipt'), null, */
|
||||
/* 'SITE', $this->op_area); */
|
||||
|
||||
/* $this->addSideMenuLink('New Customer', */
|
||||
/* array('controller' => 'customers', 'action' => 'add'), null, */
|
||||
/* 'SITE', $this->op_area); */
|
||||
|
||||
/* $this->addSideMenuLink('New Deposit', */
|
||||
/* array('controller' => 'tenders', 'action' => 'deposit'), null, */
|
||||
/* 'SITE', $this->op_area); */
|
||||
|
||||
if ($this->params['admin']) {
|
||||
$this->addSideMenuLink('Accounts',
|
||||
array('controller' => 'accounts', 'action' => 'index'), null,
|
||||
'SITE', $this->admin_area);
|
||||
$this->addSideMenuLink('Contacts',
|
||||
array('controller' => 'contacts', 'action' => 'index'), null,
|
||||
'SITE', $this->admin_area);
|
||||
$this->addSideMenuLink('Ledgers',
|
||||
array('controller' => 'ledgers', 'action' => 'index'), null,
|
||||
'SITE', $this->admin_area);
|
||||
$this->addSideMenuLink('Tenders',
|
||||
array('controller' => 'tenders', 'action' => 'index'), null,
|
||||
'SITE', $this->admin_area);
|
||||
$this->addSideMenuLink('Transactions',
|
||||
array('controller' => 'transactions', 'action' => 'index'), null,
|
||||
'SITE', $this->admin_area);
|
||||
$this->addSideMenuLink('Ldgr Entries',
|
||||
array('controller' => 'ledger_entries', 'action' => 'index'), null,
|
||||
'SITE', $this->admin_area);
|
||||
$this->addSideMenuLink('Stmt Entries',
|
||||
array('controller' => 'statement_entries', 'action' => 'index'), null,
|
||||
'SITE', $this->admin_area);
|
||||
$this->addSideMenuLink('Assess Charges',
|
||||
array('controller' => 'leases', 'action' => 'assess_all'), null,
|
||||
'SITE', $this->admin_area);
|
||||
}
|
||||
|
||||
if ($this->params['dev']) {
|
||||
$this->addSideMenuLink('Un-Nuke',
|
||||
'#', array('htmlAttributes' =>
|
||||
array('onclick' => '$(".pr-section").show(); return false;')),
|
||||
'SITE', $this->dev_area);
|
||||
$this->addSideMenuLink('New Ledgers',
|
||||
array('controller' => 'accounts', 'action' => 'newledger'), null,
|
||||
'SITE', $this->dev_area);
|
||||
}
|
||||
'SITE', $this->admin_area);
|
||||
|
||||
|
||||
$this->sideMenuAreaName('Operations', 'SITE', $this->op_area);
|
||||
$this->addSideMenuLink('Un-Nuke',
|
||||
'#', array('htmlAttributes' =>
|
||||
array('onclick' => '$(".pr-section").show(); return false;')),
|
||||
'SITE', $this->dev_area);
|
||||
$this->addSideMenuLink('New Ledgers',
|
||||
array('controller' => 'accounts', 'action' => 'newledger'), null,
|
||||
'SITE', $this->dev_area);
|
||||
|
||||
|
||||
$this->addSideMenuLink('New Receipt',
|
||||
array('controller' => 'customers', 'action' => 'receipt'), null,
|
||||
'SITE', $this->op_area);
|
||||
|
||||
$this->addSideMenuLink('New Invoice',
|
||||
array('controller' => 'leases', 'action' => 'invoice'), null,
|
||||
'SITE', $this->op_area);
|
||||
|
||||
$this->addSideMenuLink('Move-In',
|
||||
array('controller' => 'customers', 'action' => 'move_in'), null,
|
||||
'SITE', $this->op_area);
|
||||
|
||||
$this->addSideMenuLink('Move-Out',
|
||||
array('controller' => 'leases', 'action' => 'move_out'), null,
|
||||
'SITE', $this->op_area);
|
||||
|
||||
$this->addSideMenuLink('New Deposit',
|
||||
array('controller' => 'tenders', 'action' => 'deposit'), null,
|
||||
'SITE', $this->op_area);
|
||||
|
||||
// REVISIT <AP>: 20090824
|
||||
// Depending on preference, we may put this into the gridView
|
||||
// function, making the links available only when navigating.
|
||||
$this->addGridViewSideMenuLinks();
|
||||
}
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
**************************************************************************
|
||||
**************************************************************************
|
||||
* virtual: addGridViewSideMenuLinks
|
||||
* - Adds the grid view specific navigation links, if overridden.
|
||||
*/
|
||||
|
||||
function addGridViewSideMenuLinks() {
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
**************************************************************************
|
||||
**************************************************************************
|
||||
@@ -263,6 +290,13 @@ class AppController extends Controller {
|
||||
|
||||
$this->addDefaultSideMenuLinks();
|
||||
$this->sideMenuEnable('SITE', $this->op_area, false);
|
||||
|
||||
foreach ($this->sidemenu['areas'] AS $area_name => $area) {
|
||||
if (empty($this->params['dev']))
|
||||
$this->sideMenuEnable($area_name, $this->dev_area, false);
|
||||
if (empty($this->params['admin']))
|
||||
$this->sideMenuEnable($area_name, $this->admin_area, false);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -282,24 +316,48 @@ class AppController extends Controller {
|
||||
$this->params['admin'] = false;
|
||||
}
|
||||
|
||||
foreach ($this->sidemenu_areas AS &$area) {
|
||||
foreach ($this->sidemenu['areas'] AS $aname => &$area) {
|
||||
if (empty($area['enable']))
|
||||
$area = array();
|
||||
if (empty($area['subarea']))
|
||||
if (empty($area['subareas']))
|
||||
continue;
|
||||
ksort($area['subarea']);
|
||||
ksort($area['subareas']);
|
||||
|
||||
foreach ($area['subarea'] AS &$subarea) {
|
||||
foreach ($area['subareas'] AS $sname => &$subarea) {
|
||||
if (empty($subarea['enable']))
|
||||
$subarea = array();
|
||||
if (empty($subarea['priorities']))
|
||||
continue;
|
||||
ksort($subarea['priorities']);
|
||||
|
||||
foreach ($subarea['priorities'] AS $pname => &$priority) {
|
||||
if (empty($priority))
|
||||
unset($subarea['priorities'][$pname]);
|
||||
}
|
||||
unset($priority);
|
||||
|
||||
if (empty($subarea['priorities']))
|
||||
unset($area['subareas'][$sname]);
|
||||
}
|
||||
unset($subarea);
|
||||
|
||||
if (empty($area['subareas']))
|
||||
unset($this->sidemenu['areas'][$aname]);
|
||||
}
|
||||
unset($area);
|
||||
|
||||
// Activate a default section (unless already specified)
|
||||
foreach (array_reverse($this->sidemenu['areas']) AS $area_name => $area) {
|
||||
if (empty($area))
|
||||
continue;
|
||||
|
||||
if (empty($this->sidemenu['active']) ||
|
||||
empty($this->sidemenu['areas'][$this->sidemenu['active']['area']]))
|
||||
$this->sideMenuAreaActivate($area_name);
|
||||
}
|
||||
|
||||
//pr($this->sidemenu_areas);
|
||||
$this->set('sidemenu', $this->sidemenu_areas);
|
||||
//pr($this->sidemenu);
|
||||
$this->set('sidemenu', $this->sidemenu);
|
||||
}
|
||||
|
||||
|
||||
@@ -373,9 +431,14 @@ class AppController extends Controller {
|
||||
* helper: gridView
|
||||
* - called by derived controllers to create an index listing
|
||||
*/
|
||||
function index() {
|
||||
$names = Inflector::humanize(Inflector::pluralize($this->params['controller']));
|
||||
$this->gridView('All ' . $names, 'all');
|
||||
}
|
||||
|
||||
function gridView($title, $action = null, $element = null) {
|
||||
$this->sideMenuEnable('SITE', $this->op_area);
|
||||
$this->sideMenuAreaActivate('CONTROLLER');
|
||||
$this->set('title', $title);
|
||||
// The resulting page will contain a grid, which will
|
||||
// use ajax to obtain the actual data for this action
|
||||
@@ -512,6 +575,7 @@ class AppController extends Controller {
|
||||
$xml = preg_replace("/</", "<", $xml);
|
||||
$xml = preg_replace("/>/", ">", $xml);
|
||||
echo ("\n<PRE>\n$xml\n</PRE>\n");
|
||||
$this->render_empty();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1020,10 +1084,9 @@ class AppController extends Controller {
|
||||
}
|
||||
|
||||
function gridDataOutputHeader(&$params, &$model) {
|
||||
if (!$params['debug']) {
|
||||
if (!$params['debug'])
|
||||
header("Content-type: text/xml;charset=utf-8");
|
||||
}
|
||||
}
|
||||
|
||||
function gridDataOutputXMLHeader(&$params, &$model) {
|
||||
echo "<?xml version='1.0' encoding='utf-8'?>\n";
|
||||
|
||||
@@ -117,7 +117,7 @@
|
||||
/**
|
||||
* The name of CakePHP's session cookie.
|
||||
*/
|
||||
Configure::write('Session.cookie', 'CAKEPHP');
|
||||
Configure::write('Session.cookie', 'PMGR');
|
||||
/**
|
||||
* Session time out time (in seconds).
|
||||
* Actual value depends on 'Security.level' setting.
|
||||
|
||||
@@ -10,5 +10,10 @@ class DATABASE_CONFIG {
|
||||
'database' => 'pmgr_sand',
|
||||
'prefix' => 'pmgr_',
|
||||
);
|
||||
|
||||
function __construct() {
|
||||
if (preg_match("%^/[^/]*sand/%", $_SERVER['REQUEST_URI']))
|
||||
$this->default['database'] = 'pmgr_sand';
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -8,12 +8,31 @@ class AccountsController extends AppController {
|
||||
/**************************************************************************
|
||||
**************************************************************************
|
||||
**************************************************************************
|
||||
* override: addDefaultSideMenuLinks
|
||||
* - Adds controller specific default side menu links
|
||||
* override: addGridViewSideMenuLinks
|
||||
* - Adds grid view navigation side menu links
|
||||
*/
|
||||
|
||||
function addDefaultSideMenuLinks() {
|
||||
parent::addDefaultSideMenuLinks();
|
||||
function addGridViewSideMenuLinks() {
|
||||
parent::addGridViewSideMenuLinks();
|
||||
|
||||
$this->addSideMenuLink('Asset',
|
||||
array('controller' => 'accounts', 'action' => 'asset'), null,
|
||||
'CONTROLLER', $this->admin_area);
|
||||
$this->addSideMenuLink('Liability',
|
||||
array('controller' => 'accounts', 'action' => 'liability'), null,
|
||||
'CONTROLLER', $this->admin_area);
|
||||
$this->addSideMenuLink('Equity',
|
||||
array('controller' => 'accounts', 'action' => 'equity'), null,
|
||||
'CONTROLLER', $this->admin_area);
|
||||
$this->addSideMenuLink('Income',
|
||||
array('controller' => 'accounts', 'action' => 'income'), null,
|
||||
'CONTROLLER', $this->admin_area);
|
||||
$this->addSideMenuLink('Expense',
|
||||
array('controller' => 'accounts', 'action' => 'expense'), null,
|
||||
'CONTROLLER', $this->admin_area);
|
||||
$this->addSideMenuLink('All',
|
||||
array('controller' => 'accounts', 'action' => 'all'), null,
|
||||
'CONTROLLER', $this->admin_area);
|
||||
}
|
||||
|
||||
|
||||
@@ -30,29 +49,7 @@ class AccountsController extends AppController {
|
||||
function equity() { $this->gridView('Equity Accounts'); }
|
||||
function income() { $this->gridView('Income Accounts'); }
|
||||
function expense() { $this->gridView('Expense Accounts'); }
|
||||
function all() { $this->gridView('All Accounts', 'all'); }
|
||||
|
||||
function gridView($title, $action = null, $element = null) {
|
||||
$this->addSideMenuLink('Asset',
|
||||
array('controller' => 'accounts', 'action' => 'asset'), null,
|
||||
'CONTROLLER');
|
||||
$this->addSideMenuLink('Liability',
|
||||
array('controller' => 'accounts', 'action' => 'liability'), null,
|
||||
'CONTROLLER');
|
||||
$this->addSideMenuLink('Equity',
|
||||
array('controller' => 'accounts', 'action' => 'equity'), null,
|
||||
'CONTROLLER');
|
||||
$this->addSideMenuLink('Income',
|
||||
array('controller' => 'accounts', 'action' => 'income'), null,
|
||||
'CONTROLLER');
|
||||
$this->addSideMenuLink('Expense',
|
||||
array('controller' => 'accounts', 'action' => 'expense'), null,
|
||||
'CONTROLLER');
|
||||
$this->addSideMenuLink('All',
|
||||
array('controller' => 'accounts', 'action' => 'all'), null,
|
||||
'CONTROLLER');
|
||||
parent::gridView($title, $action, $element);
|
||||
}
|
||||
function all() { $this->gridView('All Accounts', 'all'); }
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
@@ -204,10 +201,10 @@ class AccountsController extends AppController {
|
||||
|
||||
$this->addSideMenuLink('New Ledger',
|
||||
array('action' => 'newledger', $id), null,
|
||||
'ACTION');
|
||||
'ACTION', $this->admin_area);
|
||||
$this->addSideMenuLink('Collected',
|
||||
array('action' => 'collected', $id), null,
|
||||
'ACTION');
|
||||
'ACTION', $this->admin_area);
|
||||
|
||||
// Prepare to render
|
||||
$title = 'Account: ' . $account['Account']['name'];
|
||||
|
||||
@@ -23,6 +23,19 @@ class ContactsController extends AppController {
|
||||
* to jqGrid.
|
||||
*/
|
||||
|
||||
function gridDataFilterTablesConfig(&$params, &$model, $table) {
|
||||
$config = parent::gridDataFilterTablesConfig($params, $model, $table);
|
||||
|
||||
// Special case for Customer; We need the Contact/Customer relationship
|
||||
if ($table == 'Customer')
|
||||
$config = array('fields' => array('ContactsCustomer.type',
|
||||
'ContactsCustomer.active'),
|
||||
'conditions' => array('ContactsCustomer.active' => true),
|
||||
);
|
||||
|
||||
return $config;
|
||||
}
|
||||
|
||||
function gridDataOrder(&$params, &$model, $index, $direction) {
|
||||
$order = parent::gridDataOrder($params, $model, $index, $direction);
|
||||
|
||||
@@ -37,7 +50,7 @@ class ContactsController extends AppController {
|
||||
}
|
||||
|
||||
function gridDataPostProcessLinks(&$params, &$model, &$records, $links) {
|
||||
$links['Contact'] = array('last_name', 'first_name');
|
||||
$links['Contact'] = array('display_name');
|
||||
return parent::gridDataPostProcessLinks($params, $model, $records, $links);
|
||||
}
|
||||
|
||||
|
||||
@@ -6,12 +6,26 @@ class CustomersController extends AppController {
|
||||
/**************************************************************************
|
||||
**************************************************************************
|
||||
**************************************************************************
|
||||
* override: addDefaultSideMenuLinks
|
||||
* - Adds controller specific default side menu links
|
||||
* override: addGridViewSideMenuLinks
|
||||
* - Adds grid view navigation side menu links
|
||||
*/
|
||||
|
||||
function addDefaultSideMenuLinks() {
|
||||
parent::addDefaultSideMenuLinks();
|
||||
function addGridViewSideMenuLinks() {
|
||||
parent::addGridViewSideMenuLinks();
|
||||
|
||||
$this->addSideMenuLink('Current',
|
||||
array('controller' => 'customers', 'action' => 'current'), null,
|
||||
'CONTROLLER');
|
||||
$this->addSideMenuLink('Past',
|
||||
array('controller' => 'customers', 'action' => 'past'), null,
|
||||
'CONTROLLER');
|
||||
$this->addSideMenuLink('All',
|
||||
array('controller' => 'customers', 'action' => 'all'), null,
|
||||
'CONTROLLER');
|
||||
|
||||
$this->addSideMenuLink('New Customer',
|
||||
array('controller' => 'customers', 'action' => 'add'), null,
|
||||
'ACTION', $this->new_area);
|
||||
}
|
||||
|
||||
|
||||
@@ -27,25 +41,6 @@ class CustomersController extends AppController {
|
||||
function past() { $this->gridView('Past Tenants'); }
|
||||
function all() { $this->gridView('All Customers'); }
|
||||
|
||||
function gridView($title, $action = null, $element = null) {
|
||||
$this->addSideMenuLink('Current',
|
||||
array('controller' => 'customers', 'action' => 'current'), null,
|
||||
'CONTROLLER');
|
||||
$this->addSideMenuLink('Past',
|
||||
array('controller' => 'customers', 'action' => 'past'), null,
|
||||
'CONTROLLER');
|
||||
$this->addSideMenuLink('All',
|
||||
array('controller' => 'customers', 'action' => 'all'), null,
|
||||
'CONTROLLER');
|
||||
|
||||
$this->sideMenuAreaName('Creation', 'ACTION', $this->new_area);
|
||||
$this->addSideMenuLink('New Customer',
|
||||
array('controller' => 'customers', 'action' => 'add'), null,
|
||||
'ACTION', $this->new_area);
|
||||
|
||||
parent::gridView($title, $action, $element);
|
||||
}
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
**************************************************************************
|
||||
@@ -92,19 +87,29 @@ class CustomersController extends AppController {
|
||||
return $conditions;
|
||||
}
|
||||
|
||||
function gridDataOrder(&$params, &$model, $index, $direction) {
|
||||
$order = array();
|
||||
$order[] = parent::gridDataOrder($params, $model, $index, $direction);
|
||||
function gridDataFilterTablesConfig(&$params, &$model, $table) {
|
||||
$config = parent::gridDataFilterTablesConfig($params, $model, $table);
|
||||
|
||||
if ($index !== 'PrimaryContact.last_name')
|
||||
$order[] = parent::gridDataOrder($params, $model,
|
||||
'PrimaryContact.last_name', $direction);
|
||||
if ($index !== 'PrimaryContact.first_name')
|
||||
$order[] = parent::gridDataOrder($params, $model,
|
||||
'PrimaryContact.first_name', $direction);
|
||||
if ($index !== 'Customer.id')
|
||||
$order[] = parent::gridDataOrder($params, $model,
|
||||
'Customer.id', $direction);
|
||||
// Special case for Contact; We need the Contact/Customer relationship
|
||||
if ($table == 'Contact')
|
||||
$config = array('fields' => array('ContactsCustomer.type',
|
||||
'ContactsCustomer.active'),
|
||||
'conditions' => array('ContactsCustomer.active' => true),
|
||||
);
|
||||
|
||||
return $config;
|
||||
}
|
||||
|
||||
function gridDataOrder(&$params, &$model, $index, $direction) {
|
||||
$order = parent::gridDataOrder($params, $model, $index, $direction);
|
||||
|
||||
// After sorting by whatever the user wants, add these
|
||||
// defaults into the sort mechanism. If we're already
|
||||
// sorting by one of them, it will only be redundant,
|
||||
// and should cause no harm (possible a longer query?)
|
||||
$order[] = 'PrimaryContact.last_name ' . $direction;
|
||||
$order[] = 'PrimaryContact.first_name ' . $direction;
|
||||
$order[] = 'Customer.id ' . $direction;
|
||||
|
||||
return $order;
|
||||
}
|
||||
@@ -122,14 +127,18 @@ class CustomersController extends AppController {
|
||||
* - Sets up the move-in page for the given customer.
|
||||
*/
|
||||
|
||||
function move_in($id = null) {
|
||||
function move_in($id = null, $unit_id = null) {
|
||||
$customer = array();
|
||||
$unit = array();
|
||||
|
||||
if (isset($id)) {
|
||||
if (!empty($id)) {
|
||||
$this->Customer->recursive = -1;
|
||||
$customer = current($this->Customer->read(null, $id));
|
||||
}
|
||||
if (!empty($unit_id)) {
|
||||
$this->Customer->Lease->Unit->recursive = -1;
|
||||
$unit = current($this->Customer->Lease->Unit->read(null, $unit_id));
|
||||
}
|
||||
$this->set(compact('customer', 'unit'));
|
||||
|
||||
$title = 'Customer Move-In';
|
||||
@@ -230,36 +239,58 @@ class CustomersController extends AppController {
|
||||
$outstanding_deposit = $this->Customer->securityDepositBalance($id);
|
||||
|
||||
// Figure out if this customer has any non-closed leases
|
||||
$show_moveout = false;
|
||||
$show_payment = false;
|
||||
$show_moveout = false; $moveout_lease_id = null;
|
||||
$show_payment = false; $payment_lease_id = null;
|
||||
foreach ($customer['Lease'] AS $lease) {
|
||||
if (!isset($lease['close_date']))
|
||||
if (!isset($lease['close_date'])) {
|
||||
if ($show_payment)
|
||||
$payment_lease_id = null;
|
||||
else
|
||||
$payment_lease_id = $lease['id'];
|
||||
$show_payment = true;
|
||||
if (!isset($lease['moveout_date']))
|
||||
}
|
||||
if (!isset($lease['moveout_date'])) {
|
||||
if ($show_moveout)
|
||||
$moveout_lease_id = null;
|
||||
else
|
||||
$moveout_lease_id = $lease['id'];
|
||||
$show_moveout = true;
|
||||
}
|
||||
}
|
||||
|
||||
// Set up dynamic menu items
|
||||
|
||||
$this->addSideMenuLink('Edit',
|
||||
array('action' => 'edit', $id), null,
|
||||
'ACTION');
|
||||
|
||||
$this->addSideMenuLink('Move-In',
|
||||
array('action' => 'move_in', $id), null,
|
||||
'ACTION');
|
||||
|
||||
/* if ($show_moveout) { */
|
||||
/* $this->addSideMenuLink('Move-Out', */
|
||||
/* array('action' => 'move_out', $id), null, */
|
||||
/* 'ACTION'); */
|
||||
/* } */
|
||||
|
||||
if ($show_payment || $outstanding_balance > 0)
|
||||
$this->addSideMenuLink('New Receipt',
|
||||
array('action' => 'receipt', $id), null,
|
||||
'ACTION');
|
||||
|
||||
if ($show_payment) {
|
||||
/* $ids = $this->Customer->leaseIds($id, true); */
|
||||
/* if (count($ids) == 1) */
|
||||
/* $lease_id = $ids[0]; */
|
||||
/* else */
|
||||
/* $lease_id = null; */
|
||||
|
||||
$this->addSideMenuLink('New Invoice',
|
||||
array('controller' => 'leases',
|
||||
'action' => 'invoice',
|
||||
$payment_lease_id), null,
|
||||
'ACTION');
|
||||
}
|
||||
|
||||
$this->addSideMenuLink('Move-In',
|
||||
array('action' => 'move_in', $id), null,
|
||||
'ACTION');
|
||||
|
||||
if ($show_moveout) {
|
||||
$this->addSideMenuLink('Move-Out',
|
||||
array('controller' => 'leases',
|
||||
'action' => 'move_out',
|
||||
$moveout_lease_id), null,
|
||||
'ACTION');
|
||||
}
|
||||
|
||||
if (!$show_moveout && $outstanding_balance > 0)
|
||||
$this->addSideMenuLink('Write-Off',
|
||||
array('action' => 'bad_debt', $id), null,
|
||||
@@ -270,6 +301,10 @@ class CustomersController extends AppController {
|
||||
array('action' => 'refund', $id), null,
|
||||
'ACTION');
|
||||
|
||||
$this->addSideMenuLink('Edit',
|
||||
array('action' => 'edit', $id), null,
|
||||
'ACTION');
|
||||
|
||||
// Prepare to render.
|
||||
$title = 'Customer: ' . $customer['Customer']['name'];
|
||||
$this->set(compact('customer', 'title',
|
||||
@@ -326,7 +361,17 @@ class CustomersController extends AppController {
|
||||
$this->redirect(array('action'=>'view', $this->Customer->id));
|
||||
|
||||
// Since this is a new customer, go to the move in screen.
|
||||
$this->redirect(array('action'=>'move_in', $this->Customer->id));
|
||||
// First set the move-in unit id, if there is one, ...
|
||||
if (empty($this->data['movein']['Unit']['id']))
|
||||
$unit_id = null;
|
||||
else
|
||||
$unit_id = $this->data['movein']['Unit']['id'];
|
||||
|
||||
// ... then redirect
|
||||
$this->redirect(array('action'=>'move_in',
|
||||
$this->Customer->id,
|
||||
$unit_id,
|
||||
));
|
||||
}
|
||||
|
||||
if ($id) {
|
||||
@@ -389,7 +434,8 @@ class CustomersController extends AppController {
|
||||
* - Add a new customer
|
||||
*/
|
||||
|
||||
function add() {
|
||||
function add($unit_id = null) {
|
||||
$this->set('movein', array('Unit' => array('id' => $unit_id)));
|
||||
$this->edit();
|
||||
}
|
||||
|
||||
|
||||
@@ -6,29 +6,13 @@ class LeasesController extends AppController {
|
||||
/**************************************************************************
|
||||
**************************************************************************
|
||||
**************************************************************************
|
||||
* override: addDefaultSideMenuLinks
|
||||
* - Adds controller specific default side menu links
|
||||
* override: addGridViewSideMenuLinks
|
||||
* - Adds grid view navigation side menu links
|
||||
*/
|
||||
|
||||
function addDefaultSideMenuLinks() {
|
||||
parent::addDefaultSideMenuLinks();
|
||||
}
|
||||
function addGridViewSideMenuLinks() {
|
||||
parent::addGridViewSideMenuLinks();
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
**************************************************************************
|
||||
**************************************************************************
|
||||
* action: index / active / closed / all
|
||||
* - Generate a listing of leases
|
||||
*/
|
||||
|
||||
function index() { $this->all(); }
|
||||
function active() { $this->gridView('Active Leases'); }
|
||||
function delinquent() { $this->gridView('Delinquent Leases'); }
|
||||
function closed() { $this->gridView('Closed Leases'); }
|
||||
function all() { $this->gridView('All Leases', 'all'); }
|
||||
|
||||
function gridView($title, $action = null, $element = null) {
|
||||
$this->addSideMenuLink('Active',
|
||||
array('controller' => 'leases', 'action' => 'active'), null,
|
||||
'CONTROLLER');
|
||||
@@ -41,10 +25,23 @@ class LeasesController extends AppController {
|
||||
$this->addSideMenuLink('All',
|
||||
array('controller' => 'leases', 'action' => 'all'), null,
|
||||
'CONTROLLER');
|
||||
parent::gridView($title, $action, $element);
|
||||
}
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
**************************************************************************
|
||||
**************************************************************************
|
||||
* action: index / active / closed / all
|
||||
* - Generate a listing of leases
|
||||
*/
|
||||
|
||||
function index() { $this->active(); }
|
||||
function active() { $this->gridView('Active Leases', 'active'); }
|
||||
function delinquent() { $this->gridView('Delinquent Leases'); }
|
||||
function closed() { $this->gridView('Closed Leases'); }
|
||||
function all() { $this->gridView('All Leases'); }
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
**************************************************************************
|
||||
**************************************************************************
|
||||
@@ -186,42 +183,43 @@ class LeasesController extends AppController {
|
||||
$this->data['Lease']['moveout_date']
|
||||
);
|
||||
|
||||
$this->redirect($this->data['redirect']);
|
||||
$this->redirect(array('controller' => 'leases',
|
||||
'action' => 'view',
|
||||
$this->data['Lease']['id']));
|
||||
}
|
||||
|
||||
if (!isset($id))
|
||||
die("Oh Nooooo!!");
|
||||
if (isset($id)) {
|
||||
$lease = $this->Lease->find
|
||||
('first', array
|
||||
('contain' => array
|
||||
(// Models
|
||||
'Unit' =>
|
||||
array('order' => array('sort_order'),
|
||||
'fields' => array('id', 'name'),
|
||||
),
|
||||
|
||||
$lease = $this->Lease->find
|
||||
('first', array
|
||||
('contain' => array
|
||||
(// Models
|
||||
'Unit' =>
|
||||
array('order' => array('sort_order'),
|
||||
'fields' => array('id', 'name'),
|
||||
),
|
||||
'Customer' =>
|
||||
array('fields' => array('id', 'name'),
|
||||
),
|
||||
),
|
||||
|
||||
'Customer' =>
|
||||
array('fields' => array('id', 'name'),
|
||||
),
|
||||
),
|
||||
'conditions' => array(array('Lease.id' => $id),
|
||||
array('Lease.close_date' => null),
|
||||
),
|
||||
));
|
||||
$this->set('customer', $lease['Customer']);
|
||||
$this->set('unit', $lease['Unit']);
|
||||
$this->set('lease', $lease['Lease']);
|
||||
|
||||
'conditions' => array(array('Lease.id' => $id),
|
||||
array('Lease.close_date' => null),
|
||||
),
|
||||
));
|
||||
$this->set('customer', $lease['Customer']);
|
||||
$this->set('unit', $lease['Unit']);
|
||||
$this->set('lease', $lease['Lease']);
|
||||
$title = ('Lease #' . $lease['Lease']['number'] . ': ' .
|
||||
$lease['Unit']['name'] . ': ' .
|
||||
$lease['Customer']['name'] . ': Move-Out');
|
||||
}
|
||||
else {
|
||||
$title = 'Move-Out';
|
||||
}
|
||||
|
||||
$redirect = array('controller' => 'leases',
|
||||
'action' => 'view',
|
||||
$id);
|
||||
|
||||
$title = ('Lease #' . $lease['Lease']['number'] . ': ' .
|
||||
$lease['Unit']['name'] . ': ' .
|
||||
$lease['Customer']['name'] . ': Prepare Move-Out');
|
||||
$this->set(compact('title', 'redirect'));
|
||||
$this->set(compact('title'));
|
||||
$this->render('/leases/move');
|
||||
}
|
||||
|
||||
|
||||
@@ -6,12 +6,22 @@ class LedgersController extends AppController {
|
||||
/**************************************************************************
|
||||
**************************************************************************
|
||||
**************************************************************************
|
||||
* override: addDefaultSideMenuLinks
|
||||
* - Adds controller specific default side menu links
|
||||
* override: addGridViewSideMenuLinks
|
||||
* - Adds grid view navigation side menu links
|
||||
*/
|
||||
|
||||
function addDefaultSideMenuLinks() {
|
||||
parent::addDefaultSideMenuLinks();
|
||||
function addGridViewSideMenuLinks() {
|
||||
parent::addGridViewSideMenuLinks();
|
||||
|
||||
$this->addSideMenuLink('Current',
|
||||
array('controller' => 'ledgers', 'action' => 'current'), null,
|
||||
'CONTROLLER');
|
||||
$this->addSideMenuLink('Closed',
|
||||
array('controller' => 'ledgers', 'action' => 'closed'), null,
|
||||
'CONTROLLER');
|
||||
$this->addSideMenuLink('All',
|
||||
array('controller' => 'ledgers', 'action' => 'all'), null,
|
||||
'CONTROLLER');
|
||||
}
|
||||
|
||||
|
||||
@@ -27,19 +37,6 @@ class LedgersController extends AppController {
|
||||
function closed() { $this->gridView('Closed Ledgers'); }
|
||||
function all() { $this->gridView('All Ledgers', 'all'); }
|
||||
|
||||
function gridView($title, $action = null, $element = null) {
|
||||
$this->addSideMenuLink('Current',
|
||||
array('controller' => 'ledgers', 'action' => 'current'), null,
|
||||
'CONTROLLER');
|
||||
$this->addSideMenuLink('Closed',
|
||||
array('controller' => 'ledgers', 'action' => 'closed'), null,
|
||||
'CONTROLLER');
|
||||
$this->addSideMenuLink('All',
|
||||
array('controller' => 'ledgers', 'action' => 'all'), null,
|
||||
'CONTROLLER');
|
||||
parent::gridView($title, $action, $element);
|
||||
}
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
**************************************************************************
|
||||
|
||||
@@ -52,6 +52,7 @@ class MapsController extends AppController {
|
||||
$this->Session->setFlash(__('Invalid Item.', true));
|
||||
$this->redirect(array('action'=>'index'));
|
||||
}
|
||||
$this->sideMenuEnable('SITE', $this->op_area);
|
||||
$this->set('info', $this->mapInfo($id, $requested_width));
|
||||
$this->set('title', "Site Map");
|
||||
}
|
||||
|
||||
@@ -150,12 +150,6 @@ class TendersController extends AppController {
|
||||
));
|
||||
|
||||
|
||||
// Watch out for the special "Closing" entries
|
||||
if (!empty($tender['TenderType']['id']))
|
||||
$this->addSideMenuLink('Edit',
|
||||
array('action' => 'edit', $id), null,
|
||||
'ACTION');
|
||||
|
||||
if (!empty($tender['Tender']['deposit_transaction_id'])
|
||||
&& empty($tender['Tender']['nsf_transaction_id'])
|
||||
// Hard to tell what types of items can come back as NSF.
|
||||
@@ -168,6 +162,13 @@ class TendersController extends AppController {
|
||||
'ACTION');
|
||||
}
|
||||
|
||||
// Watch out for the special "Closing" entries, which have
|
||||
// tender_type_id set to NULL. Otherwise, allow editing.
|
||||
if (!empty($tender['TenderType']['id']))
|
||||
$this->addSideMenuLink('Edit',
|
||||
array('action' => 'edit', $id), null,
|
||||
'ACTION');
|
||||
|
||||
// Prepare to render.
|
||||
$title = "Tender #{$tender['Tender']['id']} : {$tender['Tender']['name']}";
|
||||
$this->set(compact('tender', 'title'));
|
||||
|
||||
@@ -8,12 +8,31 @@ class TransactionsController extends AppController {
|
||||
/**************************************************************************
|
||||
**************************************************************************
|
||||
**************************************************************************
|
||||
* override: addDefaultSideMenuLinks
|
||||
* - Adds controller specific default side menu links
|
||||
* override: addGridViewSideMenuLinks
|
||||
* - Adds grid view navigation side menu links
|
||||
*/
|
||||
|
||||
function addDefaultSideMenuLinks() {
|
||||
parent::addDefaultSideMenuLinks();
|
||||
function addGridViewSideMenuLinks() {
|
||||
parent::addGridViewSideMenuLinks();
|
||||
|
||||
$this->addSideMenuLink('Invoices',
|
||||
array('controller' => 'transactions', 'action' => 'invoice'), null,
|
||||
'CONTROLLER');
|
||||
$this->addSideMenuLink('Receipts',
|
||||
array('controller' => 'transactions', 'action' => 'receipt'), null,
|
||||
'CONTROLLER');
|
||||
$this->addSideMenuLink('Deposits',
|
||||
array('controller' => 'transactions', 'action' => 'deposit'), null,
|
||||
'CONTROLLER');
|
||||
$this->addSideMenuLink('All',
|
||||
array('controller' => 'transactions', 'action' => 'all'), null,
|
||||
'CONTROLLER');
|
||||
|
||||
// REVISIT <AP>: 20090824
|
||||
// Right now, we wish to keep things simple. Don't make these
|
||||
// links available to non-admin users.
|
||||
if (empty($this->params['admin']))
|
||||
$this->sideMenuEnable('CONTROLLER', $this->std_area, false);
|
||||
}
|
||||
|
||||
|
||||
@@ -29,29 +48,12 @@ class TransactionsController extends AppController {
|
||||
function invoice() { $this->gridView('Invoices'); }
|
||||
function receipt() { $this->gridView('Receipts'); }
|
||||
function deposit() {
|
||||
if (empty($this->params['admin']))
|
||||
$this->sideMenuEnable('CONTROLLER', $this->std_area, false);
|
||||
$this->addSideMenuLink('New Deposit',
|
||||
array('controller' => 'tenders', 'action' => 'deposit'), null,
|
||||
'ACTION');
|
||||
'ACTION', $this->new_area);
|
||||
$this->gridView('Deposits');
|
||||
}
|
||||
|
||||
function gridView($title, $action = null, $element = null) {
|
||||
$this->addSideMenuLink('Invoices',
|
||||
array('controller' => 'transactions', 'action' => 'invoice'), null,
|
||||
'CONTROLLER');
|
||||
$this->addSideMenuLink('Receipts',
|
||||
array('controller' => 'transactions', 'action' => 'receipt'), null,
|
||||
'CONTROLLER');
|
||||
$this->addSideMenuLink('Deposits',
|
||||
array('controller' => 'transactions', 'action' => 'deposit'), null,
|
||||
'CONTROLLER');
|
||||
$this->addSideMenuLink('All',
|
||||
array('controller' => 'transactions', 'action' => 'all'), null,
|
||||
'CONTROLLER');
|
||||
parent::gridView($title, $action, $element);
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
**************************************************************************
|
||||
@@ -424,14 +426,13 @@ class TransactionsController extends AppController {
|
||||
array('action' => 'deposit_slip', $id), null,
|
||||
'ACTION');
|
||||
|
||||
if ($this->params['dev'])
|
||||
$this->addSideMenuLink('Destroy',
|
||||
array('action' => 'destroy', $id),
|
||||
array('confirmMessage' =>
|
||||
"This may leave the database in an unstable state." .
|
||||
" Do NOT do this unless you know what you're doing." .
|
||||
" Proceed anyway?"),
|
||||
'ACTION', $this->dev_area);
|
||||
$this->addSideMenuLink('Destroy',
|
||||
array('action' => 'destroy', $id),
|
||||
array('confirmMessage' =>
|
||||
"This may leave the database in an unstable state." .
|
||||
" Do NOT do this unless you know what you're doing." .
|
||||
" Proceed anyway?"),
|
||||
'ACTION', $this->dev_area);
|
||||
|
||||
// OK, prepare to render.
|
||||
$title = 'Transaction #' . $transaction['Transaction']['id'];
|
||||
|
||||
238
site/controllers/unit_sizes_controller.php
Normal file
238
site/controllers/unit_sizes_controller.php
Normal file
@@ -0,0 +1,238 @@
|
||||
<?php
|
||||
|
||||
class UnitSizesController extends AppController {
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
**************************************************************************
|
||||
**************************************************************************
|
||||
* override: addGridViewSideMenuLinks
|
||||
* - Adds grid view navigation side menu links
|
||||
*/
|
||||
|
||||
function addGridViewSideMenuLinks() {
|
||||
parent::addGridViewSideMenuLinks();
|
||||
|
||||
$this->addSideMenuLink('1 Bedroom',
|
||||
array('controller' => 'unit_sizes', 'action' => 'bd1'), null,
|
||||
'CONTROLLER');
|
||||
$this->addSideMenuLink('2 Bedroom',
|
||||
array('controller' => 'unit_sizes', 'action' => 'bd2'), null,
|
||||
'CONTROLLER');
|
||||
$this->addSideMenuLink('3 Bedroom',
|
||||
array('controller' => 'unit_sizes', 'action' => 'bd3'), null,
|
||||
'CONTROLLER');
|
||||
$this->addSideMenuLink('4+ Bedroom',
|
||||
array('controller' => 'unit_sizes', 'action' => 'bd4'), null,
|
||||
'CONTROLLER');
|
||||
$this->addSideMenuLink('Auto',
|
||||
array('controller' => 'unit_sizes', 'action' => 'auto'), null,
|
||||
'CONTROLLER');
|
||||
$this->addSideMenuLink('Boat',
|
||||
array('controller' => 'unit_sizes', 'action' => 'boat'), null,
|
||||
'CONTROLLER');
|
||||
$this->addSideMenuLink('RV',
|
||||
array('controller' => 'unit_sizes', 'action' => 'rv'), null,
|
||||
'CONTROLLER');
|
||||
$this->addSideMenuLink('All',
|
||||
array('controller' => 'unit_sizes', 'action' => 'all'), null,
|
||||
'CONTROLLER');
|
||||
}
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
**************************************************************************
|
||||
**************************************************************************
|
||||
* action: index / unavailable / vacant / occupied / all
|
||||
* - Generate a listing of units
|
||||
*/
|
||||
|
||||
function index() { $this->all(); }
|
||||
function bd1() { $this->gridView('Sizes for 1 Bedroom'); }
|
||||
function bd2() { $this->gridView('Sizes for 2 Bedrooms'); }
|
||||
function bd3() { $this->gridView('Sizes for 3 Bedroom'); }
|
||||
function bd4() { $this->gridView('Sizes for 4+ Bedroom'); }
|
||||
function auto() { $this->gridView('Sizes for an Automobile'); }
|
||||
function boat() { $this->gridView('Sizes for a Boat'); }
|
||||
function rv() { $this->gridView('Sizes for an RV'); }
|
||||
function all() { $this->gridView('All Unit Sizes', 'all'); }
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
**************************************************************************
|
||||
**************************************************************************
|
||||
* virtuals: gridData
|
||||
* - With the application controller handling the gridData action,
|
||||
* these virtual functions ensure that the correct data is passed
|
||||
* to jqGrid.
|
||||
*/
|
||||
|
||||
function gridDataCountTables(&$params, &$model) {
|
||||
return array('link' => array('UnitType'));
|
||||
}
|
||||
|
||||
function gridDataTables(&$params, &$model) {
|
||||
$tables = $this->gridDataCountTables($params, $model);
|
||||
$tables['link']['Unit'] = array();
|
||||
return $tables;
|
||||
}
|
||||
|
||||
function gridDataFields(&$params, &$model) {
|
||||
$fields = parent::gridDataFields($params, $model);
|
||||
$fields[] = 'ROUND(UnitSize.width/12, 1) AS width';
|
||||
$fields[] = 'ROUND(UnitSize.depth/12, 1) AS depth';
|
||||
$fields[] = 'ROUND(UnitSize.height/12, 1) AS height';
|
||||
$fields[] = 'ROUND(UnitSize.width/12 * UnitSize.depth/12, 0) AS sqft';
|
||||
$fields[] = 'ROUND(UnitSize.width/12 * UnitSize.depth/12 * UnitSize.height/12, 0) AS cuft';
|
||||
$fields[] = 'ROUND(UnitSize.rent / (UnitSize.width/12 * UnitSize.depth/12), 2) AS sqcost';
|
||||
$fields[] = 'ROUND(UnitSize.rent / (UnitSize.width/12 * UnitSize.depth/12 * UnitSize.height/12), 2) AS cucost';
|
||||
|
||||
$fields[] = 'COUNT(Unit.id) AS units';
|
||||
$fields[] = 'SUM(IF(' . $this->UnitSize->Unit->conditionUnavailable() . ', 1, 0)) AS unavailable';
|
||||
$fields[] = 'SUM(IF(' . $this->UnitSize->Unit->conditionAvailable() . ', 1, 0)) AS available';
|
||||
$fields[] = 'SUM(IF(' . $this->UnitSize->Unit->conditionOccupied() . ', 1, 0)) AS occupied';
|
||||
$fields[] = 'SUM(IF(' . $this->UnitSize->Unit->conditionOccupied() . ', 0, 1)) / COUNT(unit.id) AS vacancy';
|
||||
$fields[] = 'SUM(IF(' . $this->UnitSize->Unit->conditionOccupied() . ', 1, 0)) / COUNT(unit.id) AS occupancy';
|
||||
|
||||
return $fields;
|
||||
}
|
||||
|
||||
function gridDataConditions(&$params, &$model) {
|
||||
$conditions = parent::gridDataConditions($params, $model);
|
||||
|
||||
// REVISIT <AP>: 20090825
|
||||
// Sizes should come from the database.
|
||||
// For now, I took an assumed average need, then bracketed
|
||||
// with +/- 50 sqft. This gives a 100sqft range for each.
|
||||
if ($params['action'] === 'bd1') { // 75 sqft
|
||||
$conditions[] = array('UnitType.id' => array_keys($this->UnitSize->UnitType->enclosedTypes()));
|
||||
$conditions[] = '(UnitSize.width/12 * UnitSize.depth/12) <= 125';
|
||||
}
|
||||
elseif ($params['action'] === 'bd2') { // 125 sqft
|
||||
$conditions[] = array('UnitType.id' => array_keys($this->UnitSize->UnitType->enclosedTypes()));
|
||||
$conditions[] = '(UnitSize.width/12 * UnitSize.depth/12) >= 75';
|
||||
$conditions[] = '(UnitSize.width/12 * UnitSize.depth/12) <= 175';
|
||||
}
|
||||
elseif ($params['action'] === 'bd3') { // 175 sqft
|
||||
$conditions[] = array('UnitType.id' => array_keys($this->UnitSize->UnitType->enclosedTypes()));
|
||||
$conditions[] = '(UnitSize.width/12 * UnitSize.depth/12) >= 125';
|
||||
$conditions[] = '(UnitSize.width/12 * UnitSize.depth/12) <= 225';
|
||||
}
|
||||
elseif ($params['action'] === 'bd4') { // 225 sqft
|
||||
$conditions[] = array('UnitType.id' => array_keys($this->UnitSize->UnitType->enclosedTypes()));
|
||||
$conditions[] = '(UnitSize.width/12 * UnitSize.depth/12) >= 175';
|
||||
}
|
||||
elseif (in_array($params['action'], array('auto', 'boat', 'rv'))) {
|
||||
$conditions[] = array('UnitType.id' =>
|
||||
array_merge(array_keys($this->UnitSize->UnitType->enclosedTypes()),
|
||||
array_keys($this->UnitSize->UnitType->outdoorTypes())));
|
||||
list($width, $depth, $height) = array(8, 15, null);
|
||||
if ($params['action'] === 'auto')
|
||||
$depth = 15;
|
||||
elseif ($params['action'] === 'boat')
|
||||
$depth = 15;
|
||||
elseif ($params['action'] === 'rv')
|
||||
list($width, $depth, $height) = array(10, 25, 12);
|
||||
|
||||
$conditions[] = "(UnitSize.width/12) >= $width";
|
||||
$conditions[] = "(UnitSize.depth/12) >= $depth";
|
||||
if (isset($height))
|
||||
$conditions[] = array('OR' =>
|
||||
array("(UnitSize.height/12) >= $height",
|
||||
//"UnitSize.height IS NULL",
|
||||
array('UnitType.id' =>
|
||||
array_keys($this->UnitSize->UnitType->outdoorTypes())),
|
||||
));
|
||||
}
|
||||
|
||||
return $conditions;
|
||||
}
|
||||
|
||||
function gridDataPostProcessLinks(&$params, &$model, &$records, $links) {
|
||||
$links['UnitSize'] = array('name');
|
||||
return parent::gridDataPostProcessLinks($params, $model, $records, $links);
|
||||
}
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
**************************************************************************
|
||||
**************************************************************************
|
||||
* action: view
|
||||
* - Displays information about a specific entry
|
||||
*/
|
||||
|
||||
function view($id = null) {
|
||||
if (!$id) {
|
||||
$this->Session->setFlash(__('Invalid Item.', true));
|
||||
$this->redirect(array('controller' => 'accounts', 'action'=>'index'));
|
||||
}
|
||||
|
||||
// Get the UnitSize and related fields
|
||||
$this->UnitSize->id = $id;
|
||||
$size = $this->UnitSize->find
|
||||
('first', array
|
||||
('contain' => array('UnitType'),
|
||||
'fields' => array('UnitSize.*', 'UnitType.*',
|
||||
'ROUND(UnitSize.width/12, 1) AS width',
|
||||
'ROUND(UnitSize.depth/12, 1) AS depth',
|
||||
'ROUND(UnitSize.height/12, 1) AS height',
|
||||
'ROUND(UnitSize.width/12 * UnitSize.depth/12, 0) AS sqft',
|
||||
'ROUND(UnitSize.width/12 * UnitSize.depth/12 * UnitSize.height/12, 0) AS cuft'),
|
||||
));
|
||||
$size['UnitSize'] = $size[0] + $size['UnitSize'];
|
||||
unset($size[0]);
|
||||
|
||||
$this->set(compact('size'));
|
||||
$this->set('stats', $this->UnitSize->stats($id));
|
||||
|
||||
// Prepare to render.
|
||||
$title = "Unit Size : {$size['UnitSize']['name']}";
|
||||
$this->set(compact('title'));
|
||||
}
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
**************************************************************************
|
||||
**************************************************************************
|
||||
* action: edit
|
||||
* - Edit unit_size information
|
||||
*/
|
||||
|
||||
function edit($id = null) {
|
||||
$this->INTERNAL_ERROR('NOT READY');
|
||||
if (isset($this->data)) {
|
||||
// Check to see if the operation was cancelled.
|
||||
if (isset($this->params['form']['cancel'])) {
|
||||
if (empty($this->data['UnitSize']['id']))
|
||||
$this->redirect(array('action'=>'index'));
|
||||
|
||||
$this->redirect(array('action'=>'view', $this->data['UnitSize']['id']));
|
||||
}
|
||||
|
||||
// Make sure we have unit_size data
|
||||
if (empty($this->data['UnitSize']) || empty($this->data['UnitSize']['id']))
|
||||
$this->redirect(array('action'=>'index'));
|
||||
|
||||
// Save the unit_size and all associated data
|
||||
$this->UnitSize->create();
|
||||
$this->UnitSize->id = $this->data['UnitSize']['id'];
|
||||
if (!$this->UnitSize->save($this->data, false)) {
|
||||
$this->Session->setFlash("UNIT_SIZE SAVE FAILED", true);
|
||||
pr("UNIT_SIZE SAVE FAILED");
|
||||
}
|
||||
|
||||
$this->redirect(array('action'=>'view', $this->UnitSize->id));
|
||||
}
|
||||
|
||||
if ($id) {
|
||||
$this->data = $this->UnitSize->findById($id);
|
||||
} else {
|
||||
$this->redirect(array('action'=>'index'));
|
||||
}
|
||||
|
||||
// Prepare to render.
|
||||
$title = ('UnitSize ' . $this->data['UnitSize']['name'] .
|
||||
" : Edit");
|
||||
$this->set(compact('title'));
|
||||
}
|
||||
}
|
||||
@@ -6,15 +6,34 @@ class UnitsController extends AppController {
|
||||
/**************************************************************************
|
||||
**************************************************************************
|
||||
**************************************************************************
|
||||
* override: addDefaultSideMenuLinks
|
||||
* - Adds controller specific default side menu links
|
||||
* override: addGridViewSideMenuLinks
|
||||
* - Adds grid view navigation side menu links
|
||||
*/
|
||||
|
||||
function addDefaultSideMenuLinks() {
|
||||
parent::addDefaultSideMenuLinks();
|
||||
function addGridViewSideMenuLinks() {
|
||||
parent::addGridViewSideMenuLinks();
|
||||
|
||||
$this->addSideMenuLink('Unavailable',
|
||||
array('controller' => 'units', 'action' => 'unavailable'), null,
|
||||
'CONTROLLER');
|
||||
$this->addSideMenuLink('Vacant',
|
||||
array('controller' => 'units', 'action' => 'vacant'), null,
|
||||
'CONTROLLER');
|
||||
$this->addSideMenuLink('Occupied',
|
||||
array('controller' => 'units', 'action' => 'occupied'), null,
|
||||
'CONTROLLER');
|
||||
$this->addSideMenuLink('Overlocked',
|
||||
array('controller' => 'units', 'action' => 'locked'), null,
|
||||
'CONTROLLER');
|
||||
$this->addSideMenuLink('Liened',
|
||||
array('controller' => 'units', 'action' => 'liened'), null,
|
||||
'CONTROLLER');
|
||||
$this->addSideMenuLink('All',
|
||||
array('controller' => 'units', 'action' => 'all'), null,
|
||||
'CONTROLLER');
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
**************************************************************************
|
||||
**************************************************************************
|
||||
@@ -26,23 +45,10 @@ class UnitsController extends AppController {
|
||||
function unavailable() { $this->gridView('Unavailable Units'); }
|
||||
function vacant() { $this->gridView('Vacant Units'); }
|
||||
function occupied() { $this->gridView('Occupied Units'); }
|
||||
function locked() { $this->gridView('Overlocked Units'); }
|
||||
function liened() { $this->gridView('Liened Units'); }
|
||||
function all() { $this->gridView('All Units', 'all'); }
|
||||
|
||||
function gridView($title, $action = null, $element = null) {
|
||||
$this->addSideMenuLink('Occupied',
|
||||
array('controller' => 'units', 'action' => 'occupied'), null,
|
||||
'CONTROLLER');
|
||||
$this->addSideMenuLink('Vacant',
|
||||
array('controller' => 'units', 'action' => 'vacant'), null,
|
||||
'CONTROLLER');
|
||||
$this->addSideMenuLink('Unavailable',
|
||||
array('controller' => 'units', 'action' => 'unavailable'), null,
|
||||
'CONTROLLER');
|
||||
$this->addSideMenuLink('All',
|
||||
array('controller' => 'units', 'action' => 'all'), null,
|
||||
'CONTROLLER');
|
||||
parent::gridView($title, $action, $element);
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
**************************************************************************
|
||||
@@ -89,6 +95,7 @@ class UnitsController extends AppController {
|
||||
function gridDataFields(&$params, &$model) {
|
||||
$fields = parent::gridDataFields($params, $model);
|
||||
|
||||
$fields[] = 'ROUND(UnitSize.width/12 * UnitSize.depth/12, 0) AS sqft';
|
||||
return array_merge($fields,
|
||||
$this->Unit->Lease->StatementEntry->chargeDisbursementFields(true));
|
||||
}
|
||||
@@ -108,6 +115,12 @@ class UnitsController extends AppController {
|
||||
elseif ($params['action'] === 'unoccupied') {
|
||||
$conditions[] = array('NOT' => array($this->Unit->conditionOccupied()));
|
||||
}
|
||||
elseif ($params['action'] === 'locked') {
|
||||
$conditions[] = $this->Unit->conditionLocked();
|
||||
}
|
||||
elseif ($params['action'] === 'liened') {
|
||||
$conditions[] = $this->Unit->conditionLiened();
|
||||
}
|
||||
|
||||
return $conditions;
|
||||
}
|
||||
@@ -147,7 +160,7 @@ class UnitsController extends AppController {
|
||||
$customer = array();
|
||||
$unit = array();
|
||||
|
||||
if (isset($id)) {
|
||||
if (!empty($id)) {
|
||||
$this->Unit->recursive = -1;
|
||||
$unit = current($this->Unit->read(null, $id));
|
||||
}
|
||||
@@ -197,6 +210,21 @@ class UnitsController extends AppController {
|
||||
}
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
**************************************************************************
|
||||
**************************************************************************
|
||||
* action: lock/unlock
|
||||
* - Transitions the unit into / out of the LOCKED state
|
||||
*/
|
||||
|
||||
function status($id, $status) {
|
||||
$this->Unit->updateStatus($id, $status, true);
|
||||
$this->redirect(array('action' => 'view', $id));
|
||||
}
|
||||
function lock($id) { $this->status($id, 'LOCKED'); }
|
||||
function unlock($id) { $this->status($id, 'OCCUPIED'); }
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
**************************************************************************
|
||||
**************************************************************************
|
||||
@@ -240,13 +268,35 @@ class UnitsController extends AppController {
|
||||
$outstanding_deposit = $this->Unit->Lease->securityDepositBalance($unit['CurrentLease']['id']);
|
||||
}
|
||||
|
||||
// Set up dynamic menu items
|
||||
$this->addSideMenuLink('Edit',
|
||||
array('action' => 'edit', $id), null,
|
||||
'ACTION');
|
||||
// If the unit is occupied, but not locked, provide a
|
||||
// mechanism to do so. This doesn't have to be restricted
|
||||
// to past due customers. There are times we need to
|
||||
// overlock customers in good standing, such as if their
|
||||
// lock breaks, is cut, or missing for any reason.
|
||||
if ($this->Unit->occupied($unit['Unit']['status']) &&
|
||||
!$this->Unit->locked($unit['Unit']['status']))
|
||||
$this->addSideMenuLink('Lock',
|
||||
array('action' => 'Lock', $id), null,
|
||||
'ACTION');
|
||||
|
||||
if (isset($unit['CurrentLease']['id']) &&
|
||||
!isset($unit['CurrentLease']['moveout_date'])) {
|
||||
// If the unit is locked, provide an option to unlock it,
|
||||
// unless it's locked due to lien, which is not so simple.
|
||||
if ($this->Unit->locked($unit['Unit']['status']) &&
|
||||
!$this->Unit->liened($unit['Unit']['status']))
|
||||
$this->addSideMenuLink('Unlock',
|
||||
array('action' => 'unlock', $id), null,
|
||||
'ACTION');
|
||||
|
||||
// If there is a current lease on this unit, then provide
|
||||
// a link to move the tenant out. Current lease for a unit
|
||||
// has a bit different definition than a current lease for
|
||||
// a customer, since a lease stays with a customer until it
|
||||
// is finally closed. A lease, however, only stays with a
|
||||
// unit while occupied (since a unit is not responsible for
|
||||
// any lingering financial obligations, like a customer is).
|
||||
// Of course, if there is no current lease, provide a link
|
||||
// to move a new tenant in (if the unit is available).
|
||||
if (isset($unit['CurrentLease']['id'])) {
|
||||
$this->addSideMenuLink('Move-Out',
|
||||
array('action' => 'move_out', $id), null,
|
||||
'ACTION');
|
||||
@@ -258,8 +308,9 @@ class UnitsController extends AppController {
|
||||
// Unit is unavailable (dirty, damaged, reserved, business-use, etc)
|
||||
}
|
||||
|
||||
if (isset($unit['CurrentLease']['id']) &&
|
||||
!isset($unit['CurrentLease']['close_date'])) {
|
||||
// If there is a current lease, allow new charges to
|
||||
// be added, and payments to be made.
|
||||
if (isset($unit['CurrentLease']['id'])) {
|
||||
$this->addSideMenuLink('New Invoice',
|
||||
array('controller' => 'leases',
|
||||
'action' => 'invoice',
|
||||
@@ -272,6 +323,11 @@ class UnitsController extends AppController {
|
||||
'ACTION');
|
||||
}
|
||||
|
||||
// Always allow the unit to be edited.
|
||||
$this->addSideMenuLink('Edit',
|
||||
array('action' => 'edit', $id), null,
|
||||
'ACTION');
|
||||
|
||||
// Prepare to render.
|
||||
$title = 'Unit ' . $unit['Unit']['name'];
|
||||
$this->set(compact('unit', 'title',
|
||||
@@ -335,7 +391,6 @@ class UnitsController extends AppController {
|
||||
$this->set(compact('unit_sizes'));
|
||||
|
||||
// Prepare to render.
|
||||
pr($this->data);
|
||||
$this->set(compact('title'));
|
||||
}
|
||||
|
||||
|
||||
@@ -188,8 +188,7 @@ class Account extends AppModel {
|
||||
function relatedAccounts($attribute, $extra = null) {
|
||||
$this->cacheQueries = true;
|
||||
$accounts = $this->find('all', array
|
||||
('contain' => array('CurrentLedger'),
|
||||
'fields' => array('Account.id', 'Account.type', 'Account.name', 'CurrentLedger.id'),
|
||||
('fields' => array('Account.id', 'Account.name'),
|
||||
'conditions' => array('Account.'.$attribute => true),
|
||||
'order' => array('Account.name'),
|
||||
) + (isset($extra) ? $extra : array())
|
||||
@@ -213,21 +212,10 @@ class Account extends AppModel {
|
||||
* - Returns an array of accounts suitable for activity xxx
|
||||
*/
|
||||
|
||||
function invoiceAccounts() {
|
||||
return $this->relatedAccounts('invoices', array('order' => 'name'));
|
||||
}
|
||||
|
||||
function receiptAccounts() {
|
||||
return $this->relatedAccounts('receipts', array('order' => 'name'));
|
||||
}
|
||||
|
||||
function depositAccounts() {
|
||||
return $this->relatedAccounts('deposits', array('order' => 'name'));
|
||||
}
|
||||
|
||||
function refundAccounts() {
|
||||
return $this->relatedAccounts('refunds', array('order' => 'name'));
|
||||
}
|
||||
function invoiceAccounts() { return $this->relatedAccounts('invoices'); }
|
||||
function receiptAccounts() { return $this->relatedAccounts('receipts'); }
|
||||
function depositAccounts() { return $this->relatedAccounts('deposits'); }
|
||||
function refundAccounts() { return $this->relatedAccounts('refunds'); }
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
|
||||
@@ -41,14 +41,15 @@ class Contact extends AppModel {
|
||||
function saveContact($id, $data) {
|
||||
|
||||
// Establish a display name if not already given
|
||||
if (!$data['Contact']['display_name'])
|
||||
if (!$data['Contact']['display_name'] &&
|
||||
$data['Contact']['first_name'] && $data['Contact']['last_name'])
|
||||
$data['Contact']['display_name'] =
|
||||
(($data['Contact']['first_name'] &&
|
||||
$data['Contact']['last_name'])
|
||||
? $data['Contact']['last_name'] . ', ' . $data['Contact']['first_name']
|
||||
: ($data['Contact']['first_name']
|
||||
? $data['Contact']['first_name']
|
||||
: $data['Contact']['last_name']));
|
||||
$data['Contact']['last_name'] . ', ' . $data['Contact']['first_name'];
|
||||
|
||||
foreach (array('last_name', 'first_name', 'company_name') AS $fld) {
|
||||
if (!$data['Contact']['display_name'] && $data['Contact'][$fld])
|
||||
$data['Contact']['display_name'] = $data['Contact'][$fld];
|
||||
}
|
||||
|
||||
// Save the contact data
|
||||
$this->create();
|
||||
|
||||
@@ -54,17 +54,19 @@ class Customer extends AppModel {
|
||||
* function: leaseIds
|
||||
* - Returns the lease IDs for the given customer
|
||||
*/
|
||||
function leaseIds($id) {
|
||||
function leaseIds($id, $current = false) {
|
||||
$Lease = $current ? 'CurrentLease' : 'Lease';
|
||||
|
||||
$this->cacheQueries = true;
|
||||
$customer = $this->find('first',
|
||||
array('contain' =>
|
||||
array('Lease' => array('fields' => array('id'))),
|
||||
array($Lease => array('fields' => array('id'))),
|
||||
'fields' => array(),
|
||||
'conditions' => array(array('Customer.id' => $id))));
|
||||
$this->cacheQueries = false;
|
||||
|
||||
$ids = array();
|
||||
foreach ($customer['Lease'] AS $lease)
|
||||
foreach ($customer[$Lease] AS $lease)
|
||||
$ids[] = $lease['id'];
|
||||
|
||||
return $ids;
|
||||
|
||||
@@ -87,6 +87,23 @@ class Unit extends AppModel {
|
||||
return $this->prReturn(true);
|
||||
}
|
||||
|
||||
function locked($enum) {
|
||||
return $this->statusCheck($enum, 'LOCKED', false, null, false);
|
||||
}
|
||||
|
||||
function conditionLocked() {
|
||||
//return array('Unit.status' => 'LOCKED');
|
||||
return ('Unit.status >= ' . $this->statusValue('LOCKED'));
|
||||
}
|
||||
|
||||
function liened($enum) {
|
||||
return $this->statusCheck($enum, 'LIENED', false, null, false);
|
||||
}
|
||||
|
||||
function conditionLiened() {
|
||||
return ('Unit.status >= ' . $this->statusValue('LIENED'));
|
||||
}
|
||||
|
||||
function occupied($enum) {
|
||||
return $this->statusCheck($enum, 'OCCUPIED', false, null, false);
|
||||
}
|
||||
@@ -115,6 +132,7 @@ class Unit extends AppModel {
|
||||
}
|
||||
|
||||
function available($enum) { return $this->vacant($enum); }
|
||||
function conditionAvailable() { return $this->conditionVacant($enum); }
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
|
||||
@@ -1,25 +1,64 @@
|
||||
<?php
|
||||
class UnitSize extends AppModel {
|
||||
|
||||
var $name = 'UnitSize';
|
||||
var $validate = array(
|
||||
'id' => array('numeric'),
|
||||
'unit_type_id' => array('numeric'),
|
||||
'code' => array('notempty'),
|
||||
'name' => array('notempty'),
|
||||
'width' => array('numeric'),
|
||||
'depth' => array('numeric'),
|
||||
'deposit' => array('money'),
|
||||
'amount' => array('money')
|
||||
);
|
||||
var $belongsTo =
|
||||
array(
|
||||
'UnitType',
|
||||
);
|
||||
|
||||
var $belongsTo = array(
|
||||
'UnitType',
|
||||
);
|
||||
var $hasMany =
|
||||
array(
|
||||
'Unit',
|
||||
);
|
||||
|
||||
var $hasMany = array(
|
||||
'Unit',
|
||||
);
|
||||
|
||||
/**************************************************************************
|
||||
**************************************************************************
|
||||
**************************************************************************
|
||||
* function: stats
|
||||
* - Returns summary data from the requested unit size.
|
||||
*/
|
||||
|
||||
function stats($id = null) {
|
||||
$this->prEnter(compact('id'));
|
||||
|
||||
// Right now, we only work with id not null
|
||||
if (!$id)
|
||||
return null;
|
||||
|
||||
$stats = array();
|
||||
|
||||
// Get the total number of units this size
|
||||
$stats['all'] =
|
||||
$this->find('count',
|
||||
array('link' => array('Unit'),
|
||||
'conditions' => array(array('UnitSize.id' => $id)),
|
||||
));
|
||||
|
||||
// Get numbers for units in the various states
|
||||
foreach (array('unavailable', 'vacant', 'occupied', 'locked', 'liened') AS $status) {
|
||||
$statusfunc = 'condition' . ucfirst($status);
|
||||
$stats[$status] =
|
||||
$this->find('count',
|
||||
array('link' => array('Unit'),
|
||||
'conditions' => array(array('UnitSize.id' => $id),
|
||||
$this->Unit->{$statusfunc}()),
|
||||
));
|
||||
}
|
||||
|
||||
// Count up each unit by physical status
|
||||
foreach
|
||||
($this->find('all',
|
||||
array('link' => array('Unit' => array('fields' => array())),
|
||||
'fields' => array('Unit.status', 'COUNT(Unit.id) AS total'),
|
||||
'conditions' => array(array('UnitSize.id' => $id)),
|
||||
'group' => 'Unit.status',
|
||||
)) AS $status) {
|
||||
$stats['status'][$status['Unit']['status']] = $status[0]['total'];
|
||||
}
|
||||
|
||||
// Return the collection
|
||||
return $this->prReturn($stats);
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
@@ -1,16 +1,50 @@
|
||||
<?php
|
||||
class UnitType extends AppModel {
|
||||
|
||||
var $name = 'UnitType';
|
||||
var $validate = array(
|
||||
'id' => array('numeric'),
|
||||
'code' => array('notempty'),
|
||||
'name' => array('notempty')
|
||||
);
|
||||
var $hasMany =
|
||||
array(
|
||||
'UnitSize',
|
||||
);
|
||||
|
||||
var $hasMany = array(
|
||||
'UnitSize',
|
||||
);
|
||||
|
||||
/**************************************************************************
|
||||
**************************************************************************
|
||||
**************************************************************************
|
||||
* function: relatedTypes
|
||||
* - Returns an array of types related by similar attributes
|
||||
*/
|
||||
|
||||
function relatedTypes($attribute, $extra = null) {
|
||||
$this->cacheQueries = true;
|
||||
$types = $this->find('all', array
|
||||
('fields' => array('UnitType.id', 'UnitType.name'),
|
||||
'conditions' => array('UnitType.'.$attribute => true),
|
||||
'order' => array('UnitType.name'),
|
||||
) + (isset($extra) ? $extra : array())
|
||||
);
|
||||
$this->cacheQueries = false;
|
||||
|
||||
// Rearrange to be of the form (id => name)
|
||||
$rel_types = array();
|
||||
foreach ($types AS $type) {
|
||||
$rel_types[$type['UnitType']['id']] = $type['UnitType']['name'];
|
||||
}
|
||||
|
||||
return $rel_types;
|
||||
}
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
**************************************************************************
|
||||
**************************************************************************
|
||||
* function: xxxTypes
|
||||
* - Returns an array of types suitable for activity xxx
|
||||
*/
|
||||
|
||||
function residentialTypes() { return $this->relatedTypes('residential'); }
|
||||
function enclosedTypes() { return $this->relatedTypes('enclosed'); }
|
||||
function climateTypes() { return $this->relatedTypes('climate'); }
|
||||
function outdoorTypes() { return $this->relatedTypes('outdoor'); }
|
||||
function coveredTypes() { return $this->relatedTypes('covered'); }
|
||||
|
||||
}
|
||||
?>
|
||||
@@ -82,6 +82,7 @@ echo $this->element('ledger_entries', array
|
||||
'exclude' => array('Account', 'Amount', 'Cr/Dr', 'Balance',
|
||||
empty($account['receipts']) ? 'Tender' : null),
|
||||
'include' => array('Debit', 'Credit', 'Sub-Total'),
|
||||
'limit' => 50,
|
||||
)));
|
||||
|
||||
|
||||
@@ -100,6 +101,7 @@ echo $this->element('ledger_entries', array
|
||||
'exclude' => array('Account', 'Amount', 'Cr/Dr', 'Balance',
|
||||
empty($account['receipts']) ? 'Tender' : null),
|
||||
'include' => array('Debit', 'Credit', 'Sub-Total'),
|
||||
'limit' => 50,
|
||||
)));
|
||||
|
||||
|
||||
|
||||
@@ -45,6 +45,7 @@ function contactMethodDiv($obj, $type, $legend, $values = null) {
|
||||
' CLASS="'.$type.'-method-%{id}-source" ' . "\n" .
|
||||
' ID="'.$type.'-method-%{id}-source-'.$stype.'"' . "\n" .
|
||||
' VALUE="'.$stype.'"' . "\n" .
|
||||
($stype == 'new' ? ' CHECKED' . "\n" : '') .
|
||||
' />' . "\n" .
|
||||
' <LABEL FOR="'.$type.'-method-%{id}-source-'.$stype.'">'.$sname.'</LABEL>' . "\n" .
|
||||
' ';
|
||||
@@ -76,21 +77,30 @@ function contactMethodDiv($obj, $type, $legend, $values = null) {
|
||||
'fields' => array
|
||||
(
|
||||
'preference' => array
|
||||
('opts' => array
|
||||
('label_attributes' => array('class' => 'required'),
|
||||
'opts' => array
|
||||
('options' => $obj->varstore['methodPreferences'],
|
||||
'selected' => (isset($values) ? $values['ContactsMethod']['preference'] : null),
|
||||
)),
|
||||
),
|
||||
'after' => "Intended purpose for this method of communication.",
|
||||
),
|
||||
|
||||
'type' => array
|
||||
('opts' => array
|
||||
('label_attributes' => array('class' => 'required'),
|
||||
'opts' => array
|
||||
('options' => $obj->varstore['methodTypes'],
|
||||
'selected' => (isset($values) ? $values['ContactsMethod']['type'] : null),
|
||||
)),
|
||||
),
|
||||
'after' => "How / Where this communication reaches the contact.",
|
||||
),
|
||||
|
||||
'comment' => array
|
||||
('opts' => array
|
||||
('label_attributes' => array('class' => 'optional empty'),
|
||||
'opts' => array
|
||||
('value' => (isset($values) ? $values['ContactsMethod']['comment'] : null),
|
||||
)),
|
||||
),
|
||||
'after' => "Optional: Comments on how this form of communication relates to the contact.",
|
||||
),
|
||||
|
||||
))) . "\n" .
|
||||
|
||||
@@ -113,16 +123,23 @@ function contactMethodTypeDiv($obj, $type, $stype, $values = null) {
|
||||
if ($type === 'phone') {
|
||||
if ($stype === 'existing') {
|
||||
$fields = array
|
||||
('id' => array('name' => 'Phone/Ext',
|
||||
('id' => array('label_attributes' => array('class' => 'required empty'),
|
||||
'name' => 'Phone/Ext',
|
||||
'opts' => array('options' => $obj->varstore['contactPhones'])),
|
||||
);
|
||||
}
|
||||
elseif ($stype === 'new') {
|
||||
$fields = array
|
||||
('type' => array('opts' => array('options' => $obj->varstore['phoneTypes'])),
|
||||
'phone' => true,
|
||||
'ext' => array('name' => "Extension"),
|
||||
'comment' => true,
|
||||
('type' => array('label_attributes' => array('class' => 'required'),
|
||||
'opts' => array('options' => $obj->varstore['phoneTypes']),
|
||||
'after' => "Physical type of the phone."),
|
||||
'phone' => array('label_attributes' => array('class' => 'required empty'),
|
||||
'after' => "Required: Phone number."),
|
||||
'ext' => array('name' => "Extension",
|
||||
'label_attributes' => array('class' => 'optional empty'),
|
||||
'after' => "Optional: Extension number."),
|
||||
'comment' => array('label_attributes' => array('class' => 'optional empty'),
|
||||
'after' => "Optional: Comments about this phone number."),
|
||||
);
|
||||
}
|
||||
elseif ($stype === 'show') {
|
||||
@@ -149,12 +166,19 @@ function contactMethodTypeDiv($obj, $type, $stype, $values = null) {
|
||||
}
|
||||
elseif ($stype === 'new') {
|
||||
$fields = array
|
||||
('address' => true,
|
||||
'city' => true,
|
||||
'state' => true,
|
||||
'postcode' => array('name' => 'Zip Code'),
|
||||
'country' => true,
|
||||
'comment' => true,
|
||||
('address' => array('label_attributes' => array('class' => 'required empty'),
|
||||
'after' => "Required: First line of mailing address."),
|
||||
'city' => array('label_attributes' => array('class' => 'required empty'),
|
||||
'after' => "Required."),
|
||||
'state' => array('label_attributes' => array('class' => 'required empty'),
|
||||
'after' => "Required."),
|
||||
'postcode' => array('name' => 'Zip Code',
|
||||
'label_attributes' => array('class' => 'required empty'),
|
||||
'after' => "Required."),
|
||||
'country' => array('label_attributes' => array('class' => 'optional empty'),
|
||||
'after' => "Optional: USA is presumed."),
|
||||
'comment' => array('label_attributes' => array('class' => 'optional empty'),
|
||||
'after' => "Optional: Comments about this mailing address."),
|
||||
);
|
||||
}
|
||||
elseif ($stype === 'show') {
|
||||
@@ -177,13 +201,16 @@ function contactMethodTypeDiv($obj, $type, $stype, $values = null) {
|
||||
if ($stype === 'existing') {
|
||||
$fields = array
|
||||
('id' => array('name' => 'Email',
|
||||
'label_attributes' => array('class' => 'required'),
|
||||
'opts' => array('options' => $obj->varstore['contactEmails'])),
|
||||
);
|
||||
}
|
||||
elseif ($stype === 'new') {
|
||||
$fields = array
|
||||
('email' => true,
|
||||
'comment' => true,
|
||||
('email' => array('label_attributes' => array('class' => 'required empty'),
|
||||
'after' => "Required: E-mail address."),
|
||||
'comment' => array('label_attributes' => array('class' => 'optional empty'),
|
||||
'after' => "Optional: Comments about this email address."),
|
||||
);
|
||||
}
|
||||
elseif ($stype === 'show') {
|
||||
@@ -204,7 +231,7 @@ function contactMethodTypeDiv($obj, $type, $stype, $values = null) {
|
||||
'<div ' . "\n" .
|
||||
' class="'.$type.'-%{id}-div"' . "\n" .
|
||||
' id="'.$type.'-%{id}-'.$stype.'-div"' . "\n" .
|
||||
(isset($values) ? '' : ' STYLE="display:none;"' . "\n") .
|
||||
((isset($values) || $stype == 'new') ? '' : ' STYLE="display:none;"' . "\n") .
|
||||
'>' . "\n" .
|
||||
|
||||
$obj->element
|
||||
@@ -319,8 +346,27 @@ function contactMethodTypeDiv($obj, $type, $stype, $values = null) {
|
||||
.slideDown();
|
||||
}
|
||||
|
||||
function setEmpty(input_elem) {
|
||||
selector = "label[for=" + $(input_elem).attr("id") + "]";
|
||||
if ($(input_elem).val() == '')
|
||||
$(selector).addClass('empty');
|
||||
else
|
||||
$(selector).removeClass('empty');
|
||||
}
|
||||
|
||||
$(document).ready(function(){
|
||||
resetForm();
|
||||
|
||||
// In case refresh is hit with populated fields
|
||||
$(":input").each(function(i,elem){ setEmpty(elem); });
|
||||
|
||||
// keyup doesn't catch cut from menu
|
||||
$(":input").live('keyup', function(){
|
||||
setEmpty(this);
|
||||
});
|
||||
$(":input").live('mouseup', function(){
|
||||
setEmpty(this);
|
||||
});
|
||||
});
|
||||
|
||||
--></script>
|
||||
@@ -345,17 +391,30 @@ echo($this->element
|
||||
array('class' => 'item contact detail',
|
||||
'caption' => isset($this->data['Contact']) ? 'Edit Contact' : 'New Contact',
|
||||
'fields' => array
|
||||
('first_name' => true,
|
||||
'last_name' => true,
|
||||
'middle_name' => true,
|
||||
'display_name' => true,
|
||||
'company_name' => array('name' => 'Company'),
|
||||
'id_federal' => array('name' => 'SSN'),
|
||||
'id_local' => array('name' => 'ID #'),
|
||||
'id_local_state' => array('name' => 'ID State'),
|
||||
('last_name' => array('label_attributes' => array('class' => 'recommended empty'),
|
||||
'after' => "Recommended."),
|
||||
'first_name' => array('label_attributes' => array('class' => 'recommended empty'),
|
||||
'after' => "Recommended."),
|
||||
'middle_name' => array('label_attributes' => array('class' => 'optional empty'),
|
||||
'after' => "Optional."),
|
||||
'company_name' => array('name' => 'Company',
|
||||
'label_attributes' => array('class' => 'optional empty'),
|
||||
'after' => "Optional: Company name, if corporate contact."),
|
||||
'display_name' => array('label_attributes' => array('class' => 'optional empty'),
|
||||
'after' => "Optional with first/last name; Required otherwise."),
|
||||
'id_federal' => array('name' => 'SSN',
|
||||
'label_attributes' => array('class' => 'optional empty'),
|
||||
'after' => "Optional: Social Security Number."),
|
||||
'id_local' => array('name' => 'ID #',
|
||||
'label_attributes' => array('class' => 'recommended empty'),
|
||||
'after' => "Recommended: Driver's license, for example."),
|
||||
'id_local_state' => array('name' => 'ID State',
|
||||
'label_attributes' => array('class' => 'recommended empty'),
|
||||
'after' => "Recommended: State which issued the ID."),
|
||||
/* 'id_local_exp' => array('name' => 'ID Expiration', */
|
||||
/* 'opts' => array('empty' => true)), */
|
||||
'comment' => true,
|
||||
'comment' => array('label_attributes' => array('class' => 'optional empty'),
|
||||
'after' => "Optional: Comments about this contact."),
|
||||
))) . "\n");
|
||||
|
||||
echo $form->submit('Update') . "\n";
|
||||
|
||||
@@ -17,16 +17,17 @@ if (isset($contact['Contact']))
|
||||
$contact = $contact['Contact'];
|
||||
|
||||
$rows = array();
|
||||
$rows[] = array('First Name', $contact['first_name']);
|
||||
$rows[] = array('Middle Name', $contact['middle_name']);
|
||||
$rows[] = array('Last Name', $contact['last_name']);
|
||||
$rows[] = array('Company', $contact['company_name']);
|
||||
$rows[] = array('SSN', $contact['id_federal']);
|
||||
$rows[] = array('ID', ($contact['id_local']
|
||||
. ($contact['id_local']
|
||||
? " - ".$contact['id_local_state']
|
||||
: "")));
|
||||
$rows[] = array('Comment', $contact['comment']);
|
||||
$rows[] = array('Display Name', $contact['display_name']);
|
||||
$rows[] = array('First Name', $contact['first_name']);
|
||||
$rows[] = array('Middle Name', $contact['middle_name']);
|
||||
$rows[] = array('Last Name', $contact['last_name']);
|
||||
$rows[] = array('Company', $contact['company_name']);
|
||||
$rows[] = array('SSN', $contact['id_federal']);
|
||||
$rows[] = array('ID', ($contact['id_local']
|
||||
. ($contact['id_local']
|
||||
? " - ".$contact['id_local_state']
|
||||
: "")));
|
||||
$rows[] = array('Comment', $contact['comment']);
|
||||
|
||||
echo $this->element('table',
|
||||
array('class' => 'item contact detail',
|
||||
@@ -135,6 +136,7 @@ echo $this->element('customers', array
|
||||
'config' => array
|
||||
('caption' => 'Related Customers',
|
||||
'filter' => array('Contact.id' => $contact['id']),
|
||||
'include' => array('Relationship'),
|
||||
)));
|
||||
|
||||
|
||||
|
||||
@@ -42,11 +42,12 @@ function customerContactDiv($obj, $values = null, $primary = false) {
|
||||
' CLASS="contact-%{id}-source" ' . "\n" .
|
||||
' ID="contact-%{id}-source-'.$stype.'"' . "\n" .
|
||||
' VALUE="'.$stype.'"' . "\n" .
|
||||
//' CHECKED' . "\n" .
|
||||
($stype == 'new' ? ' CHECKED' . "\n" : '') .
|
||||
' />' . "\n" .
|
||||
' <LABEL FOR="contact-%{id}-source-'.$stype.'">'.$sname.'</LABEL>' . "\n" .
|
||||
' ';
|
||||
}
|
||||
$div .= "<P>(Phone numbers / Addresses can be added later)";
|
||||
}
|
||||
$div .= "\n";
|
||||
|
||||
@@ -75,23 +76,35 @@ function customerContactDiv($obj, $values = null, $primary = false) {
|
||||
(
|
||||
'Customer.primary_contact_entry' => array
|
||||
('name' => 'Primary Contact',
|
||||
'label_attributes' => array('class' => null),
|
||||
'no_prefix' => true,
|
||||
'opts' => array
|
||||
('type' => 'radio',
|
||||
'options' => array('%{id}' => false),
|
||||
'value' => ($primary ? '%{id}' : 'bogus-value-to-suppress-hidden-input'),
|
||||
)),
|
||||
),
|
||||
'after' => ("Check this button if this contact will be the primary" .
|
||||
" contact for this customer (there can be only one primary" .
|
||||
" contact"),
|
||||
),
|
||||
|
||||
|
||||
'type' => array
|
||||
('opts' => array
|
||||
('label_attributes' => array('class' => 'required'),
|
||||
'opts' => array
|
||||
('options' => $obj->varstore['contactTypes'],
|
||||
'selected' => (isset($values) ? $values['ContactsCustomer']['type'] : null),
|
||||
)),
|
||||
),
|
||||
'after' => "An actual tenant, or just an alternate contact?"
|
||||
),
|
||||
|
||||
'comment' => array
|
||||
('opts' => array
|
||||
('label_attributes' => array('class' => 'optional empty'),
|
||||
'opts' => array
|
||||
('value' => (isset($values) ? $values['ContactsCustomer']['comment'] : null),
|
||||
)),
|
||||
),
|
||||
'after' => "Optional: Comments on the relationship between this customer and this contact."
|
||||
),
|
||||
|
||||
))) . "\n" .
|
||||
|
||||
@@ -115,22 +128,37 @@ function customerContactTypeDiv($obj, $stype, $values = null) {
|
||||
if ($stype === 'existing') {
|
||||
$fields = array
|
||||
('id' => array('name' => 'Contact',
|
||||
'opts' => array('options' => $obj->varstore['contacts'])),
|
||||
'label_attributes' => array('class' => 'required empty'),
|
||||
'opts' => array('options' => $obj->varstore['contacts']),
|
||||
'after' => "Select the existing contact."),
|
||||
);
|
||||
}
|
||||
elseif ($stype === 'new') {
|
||||
$fields = array
|
||||
('first_name' => true,
|
||||
'last_name' => true,
|
||||
'middle_name' => true,
|
||||
'display_name' => true,
|
||||
'company_name' => array('name' => 'Company'),
|
||||
'id_federal' => array('name' => 'SSN'),
|
||||
'id_local' => array('name' => 'ID #'),
|
||||
'id_local_state' => array('name' => 'ID State'),
|
||||
('last_name' => array('label_attributes' => array('class' => 'recommended empty'),
|
||||
'after' => "Recommended."),
|
||||
'first_name' => array('label_attributes' => array('class' => 'recommended empty'),
|
||||
'after' => "Recommended."),
|
||||
'middle_name' => array('label_attributes' => array('class' => 'optional empty'),
|
||||
'after' => "Optional."),
|
||||
'company_name' => array('name' => 'Company',
|
||||
'label_attributes' => array('class' => 'optional empty'),
|
||||
'after' => "Optional: Company name, if corporate contact."),
|
||||
'display_name' => array('label_attributes' => array('class' => 'optional empty'),
|
||||
'after' => "Optional with first/last name; Required otherwise."),
|
||||
'id_federal' => array('name' => 'SSN',
|
||||
'label_attributes' => array('class' => 'optional empty'),
|
||||
'after' => "Optional: Social Security Number."),
|
||||
'id_local' => array('name' => 'ID #',
|
||||
'label_attributes' => array('class' => 'recommended empty'),
|
||||
'after' => "Recommended: Driver's license, for example."),
|
||||
'id_local_state' => array('name' => 'ID State',
|
||||
'label_attributes' => array('class' => 'recommended empty'),
|
||||
'after' => "Recommended: State which issued the ID."),
|
||||
/* 'id_local_exp' => array('name' => 'ID Expiration', */
|
||||
/* 'opts' => array('empty' => true)), */
|
||||
'comment' => true,
|
||||
'comment' => array('label_attributes' => array('class' => 'optional empty'),
|
||||
'after' => "Optional: Comments about this contact."),
|
||||
);
|
||||
}
|
||||
elseif ($stype === 'show') {
|
||||
@@ -151,14 +179,14 @@ function customerContactTypeDiv($obj, $stype, $values = null) {
|
||||
'<div ' . "\n" .
|
||||
' class="contact-%{id}-div"' . "\n" .
|
||||
' id="contact-%{id}-'.$stype.'-div"' . "\n" .
|
||||
(isset($values) ? '' : ' STYLE="display:none;"' . "\n") .
|
||||
((isset($values) || $stype == 'new') ? '' : ' STYLE="display:none;"' . "\n") .
|
||||
'>' . "\n" .
|
||||
|
||||
$obj->element
|
||||
($element,
|
||||
array('class' => "item contact {$class}",
|
||||
'field_prefix' => 'Contact.%{id}')
|
||||
+ compact('rows', 'fields', 'column_class')) .
|
||||
+ compact('rows', 'fields', 'row_class', 'column_class')) .
|
||||
|
||||
($stype === 'show'
|
||||
? '<input type="hidden" name="data[Contact][%{id}][id]" value="'.$values['id'].'"/>' . "\n"
|
||||
@@ -221,8 +249,28 @@ function customerContactTypeDiv($obj, $stype, $values = null) {
|
||||
.slideDown();
|
||||
}
|
||||
|
||||
function setEmpty(input_elem) {
|
||||
selector = "label[for=" + $(input_elem).attr("id") + "]";
|
||||
//$("#debug").append($(input_elem).attr("id") + ": " + $(input_elem).val() + "<BR>");
|
||||
if ($(input_elem).val() == '')
|
||||
$(selector).addClass('empty');
|
||||
else
|
||||
$(selector).removeClass('empty');
|
||||
}
|
||||
|
||||
$(document).ready(function(){
|
||||
resetForm();
|
||||
|
||||
// In case refresh is hit with populated fields
|
||||
$(":input").each(function(i,elem){ setEmpty(elem); });
|
||||
|
||||
// keyup doesn't catch cut from menu
|
||||
$(":input").live('keyup', function(){
|
||||
setEmpty(this);
|
||||
});
|
||||
$(":input").live('mouseup', function(){
|
||||
setEmpty(this);
|
||||
});
|
||||
});
|
||||
|
||||
--></script>
|
||||
@@ -247,8 +295,12 @@ echo($this->element
|
||||
array('class' => 'item customer detail',
|
||||
'caption' => isset($this->data['Customer']) ? 'Edit Customer' : 'New Customer',
|
||||
'fields' => array
|
||||
('name' => true,
|
||||
'comment' => true,
|
||||
('name' => array('label_attributes' => array('class' => 'optional empty'),
|
||||
'after' => ("Optional: If this field is left blank, the" .
|
||||
" customer name will be set to the name of" .
|
||||
" the primary contact, below.")),
|
||||
'comment' => array('label_attributes' => array('class' => 'optional empty'),
|
||||
'after' => 'Optional: Comments about this customer.'),
|
||||
))) . "\n");
|
||||
|
||||
echo $form->submit(isset($this->data['Customer']) ? 'Update' : 'Add New Customer') . "\n";
|
||||
@@ -268,6 +320,11 @@ echo $form->submit(isset($this->data['Customer']) ? 'Update' : 'Add New Customer
|
||||
<?php
|
||||
; // Alignment
|
||||
|
||||
if (!empty($movein['Unit']['id']))
|
||||
echo $form->input("movein.Unit.id",
|
||||
array('type' => 'hidden',
|
||||
'value' => $movein['Unit']['id'])) . "\n";
|
||||
|
||||
echo $form->submit(isset($this->data['Customer']) ? 'Update' : 'Add New Customer') . "\n";
|
||||
echo $form->submit('Cancel', array('name' => 'cancel')) . "\n";
|
||||
echo $form->end() . "\n";
|
||||
|
||||
@@ -111,21 +111,8 @@ function onGridLoadComplete() {
|
||||
function onRowSelect(grid_id, customer_id) {
|
||||
// Set the customer id that will be returned with the form
|
||||
$("#customer-id").val(customer_id);
|
||||
|
||||
// Get the item names from the grid
|
||||
//$("#receipt-customer-id").html($(grid_id).getCell(customer_id, 'Customer-id'));
|
||||
// REVISIT <AP>: 20090708
|
||||
// This is not intended as a long term solution,
|
||||
// but I need a way to enter data and then view
|
||||
// the results. This link will help.
|
||||
$("#receipt-customer-id").html('<A HREF="' +
|
||||
"<?php echo $html->url(array('controller' => 'customers',
|
||||
'action' => 'view')); ?>"
|
||||
+ "/" +
|
||||
$(grid_id).getCell(customer_id, 'Customer-id').replace(/^#/,'') +
|
||||
'">' +
|
||||
$(grid_id).getCell(customer_id, 'Customer-id') +
|
||||
'</A>');
|
||||
|
||||
// Set the customer name, so the user knows who the receipt is for
|
||||
$("#receipt-customer-name").html($(grid_id).getCell(customer_id, 'Customer-name'));
|
||||
|
||||
// Hide the "no customer" message and show the current customer
|
||||
@@ -273,8 +260,7 @@ echo $this->element('customers', array
|
||||
echo ('<DIV CLASS="receipt grid-selection-text">' .
|
||||
|
||||
'<DIV CLASS="customer-selection-valid" style="display:none">' .
|
||||
'Customer <SPAN id="receipt-customer-id"></SPAN>' .
|
||||
': <SPAN id="receipt-customer-name"></SPAN>' .
|
||||
'Customer: <SPAN id="receipt-customer-name"></SPAN>' .
|
||||
|
||||
/* '<DIV CLASS="supporting">' . */
|
||||
/* '<TABLE>' . */
|
||||
@@ -384,22 +370,12 @@ Configure::write('debug', '0');
|
||||
showCurrentAtPos: 0,
|
||||
dateFormat: 'mm/dd/yy' });
|
||||
|
||||
$("#receipt-customer-id").html("INTERNAL ERROR");
|
||||
$("#receipt-customer-name").html("INTERNAL ERROR");
|
||||
$("#receipt-balance").html("INTERNAL ERROR");
|
||||
$("#receipt-charges-caption").html("Outstanding Charges");
|
||||
|
||||
<?php if (isset($customer['id'])): ?>
|
||||
$("#customer-id").val(<?php echo $customer['id']; ?>);
|
||||
//$("#receipt-customer-id").html("<?php echo '#'.$customer['id']; ?>");
|
||||
$("#receipt-customer-id").html('<A HREF="' +
|
||||
"<?php echo $html->url(array('controller' => 'customers',
|
||||
'action' => 'view')); ?>"
|
||||
+ "/" +
|
||||
"<?php echo $customer['id']; ?>" +
|
||||
'">#' +
|
||||
"<?php echo $customer['id']; ?>" +
|
||||
'</A>');
|
||||
$("#receipt-customer-name").html("<?php echo $customer['name']; ?>");
|
||||
$("#receipt-balance").html(fmtCurrency("<?php echo $stats['balance']; ?>"));
|
||||
onGridState(null, 'hidden');
|
||||
|
||||
@@ -61,7 +61,7 @@ echo $this->element('contacts', array
|
||||
'config' => array
|
||||
('caption' => 'Customer Contacts',
|
||||
'filter' => array('Customer.id' => $customer['Customer']['id']),
|
||||
'include' => array('Type', 'Active'),
|
||||
'include' => array('Relationship'),
|
||||
)));
|
||||
|
||||
|
||||
|
||||
@@ -2,12 +2,12 @@
|
||||
|
||||
// Define the table columns
|
||||
$cols = array();
|
||||
$cols['Last Name'] = array('index' => 'Contact.last_name', 'formatter' => 'name');
|
||||
$cols['First Name'] = array('index' => 'Contact.first_name', 'formatter' => 'name');
|
||||
$cols['Company'] = array('index' => 'Contact.company_name', 'formatter' => 'longname');
|
||||
$cols['Type'] = array('index' => 'ContactsCustomer.type', 'formatter' => 'enum');
|
||||
$cols['Active'] = array('index' => 'ContactsCustomer.active', 'formatter' => 'enum');
|
||||
$cols['Comment'] = array('index' => 'Contact.comment', 'formatter' => 'comment');
|
||||
$cols['Relationship'] = array('index' => 'ContactsCustomer.type', 'formatter' => 'enum');
|
||||
$cols['Name'] = array('index' => 'Contact.display_name', 'formatter' => 'longname');
|
||||
$cols['Last Name'] = array('index' => 'Contact.last_name', 'formatter' => 'longname');
|
||||
$cols['First Name'] = array('index' => 'Contact.first_name', 'formatter' => 'longname');
|
||||
$cols['Company'] = array('index' => 'Contact.company_name', 'formatter' => 'longname');
|
||||
$cols['Comment'] = array('index' => 'Contact.comment', 'formatter' => 'comment');
|
||||
|
||||
// Render the grid
|
||||
$grid
|
||||
@@ -16,4 +16,4 @@ $grid
|
||||
->defaultFields(array('Last Name', 'First Name'))
|
||||
->searchFields(array('Last Name', 'First Name', 'Company'))
|
||||
->render($this, isset($config) ? $config : null,
|
||||
array_diff(array_keys($cols), array('Type', 'Active', 'Comment')));
|
||||
array_diff(array_keys($cols), array('Relationship', 'Comment')));
|
||||
|
||||
@@ -10,11 +10,6 @@ $cols['Leases'] = array('index' => 'current_lease_count', 'formatt
|
||||
$cols['Balance'] = array('index' => 'balance', 'formatter' => 'currency');
|
||||
$cols['Comment'] = array('index' => 'Customer.comment', 'formatter' => 'comment');
|
||||
|
||||
|
||||
// Certain fields are only valid with a particular context
|
||||
if (!isset($config['filter']['Contact.id']))
|
||||
$grid->invalidFields('Relationship');
|
||||
|
||||
// Render the grid
|
||||
$grid
|
||||
->columns($cols)
|
||||
@@ -22,4 +17,4 @@ $grid
|
||||
->defaultFields(array('Name'))
|
||||
->searchFields(array('Name', 'Last Name', 'First Name'))
|
||||
->render($this, isset($config) ? $config : null,
|
||||
array_diff(array_keys($cols), array('Comment')));
|
||||
array_diff(array_keys($cols), array('Relationship', 'Comment')));
|
||||
|
||||
@@ -32,8 +32,8 @@ foreach ($fields AS $field => $config) {
|
||||
$include_after = true;
|
||||
}
|
||||
|
||||
|
||||
$column_class = array();
|
||||
if (empty($column_class))
|
||||
$column_class = array();
|
||||
if ($include_before)
|
||||
$column_class[] = 'before';
|
||||
$column_class[] = 'field';
|
||||
@@ -79,7 +79,13 @@ foreach ($fields AS $field => $config) {
|
||||
$cells[] = null;
|
||||
}
|
||||
|
||||
$name = $config['name'];
|
||||
if (empty($config['opts']['label']))
|
||||
$name = $form->label($field, $config['name'],
|
||||
empty($config['label_attributes'])
|
||||
? null : $config['label_attributes']);
|
||||
else
|
||||
$name = $config['name'];
|
||||
|
||||
if (isset($config['with_name_before']))
|
||||
$name = $config['with_name_before'] . $name;
|
||||
elseif (isset($with_name_before))
|
||||
|
||||
@@ -121,6 +121,11 @@ foreach ($jqGridColumns AS $header => &$col) {
|
||||
// No special formatting for number
|
||||
unset($col['formatter']);
|
||||
}
|
||||
elseif ($col['formatter'] === 'percentage') {
|
||||
$col['formatter'] = array('--special' => 'percentageFormatter');
|
||||
$default['width'] = 60;
|
||||
$default['align'] = 'right';
|
||||
}
|
||||
elseif ($col['formatter'] === 'currency') {
|
||||
// Use our custom formatting for currency
|
||||
$col['formatter'] = array('--special' => 'currencyFormatter');
|
||||
@@ -259,12 +264,25 @@ $jqGrid_setup = array_merge
|
||||
<script type="text/javascript"><!--
|
||||
|
||||
jQuery(document).ready(function(){
|
||||
currencyFormatter = function(cellval, opts, rowObject) {
|
||||
currencyFormatter = function(cellval, opts, rowObject) {
|
||||
if (!cellval)
|
||||
return "";
|
||||
return fmtCurrency(cellval);
|
||||
}
|
||||
|
||||
percentageFormatter = function(cellval, opts, rowObject) {
|
||||
var precision;
|
||||
if (typeof(opts.colModel) != 'undefined' &&
|
||||
typeof(opts.colModel.formatoptions) != 'undefined' &&
|
||||
typeof(opts.colModel.formatoptions.precision) != 'undefined')
|
||||
precision = opts.colModel.formatoptions.precision;
|
||||
else
|
||||
precision = 0;
|
||||
amount = cellval.toString().replace(/\%/g,'');
|
||||
amount = (amount*100).toFixed(precision);
|
||||
return amount+'%';
|
||||
}
|
||||
|
||||
idFormatter = function(cellval, opts, rowObject) {
|
||||
if (!cellval)
|
||||
return cellval;
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
|
||||
// Define the table columns
|
||||
$cols = array();
|
||||
$cols['LeaseID'] = array('index' => 'Lease.id', 'hidden' => true);
|
||||
$cols['Lease'] = array('index' => 'Lease.number', 'formatter' => 'id');
|
||||
$cols['Unit'] = array('index' => 'Unit.name', 'width' => '50', 'align' => 'center');
|
||||
$cols['Customer'] = array('index' => 'Customer.name', 'formatter' => 'longname');
|
||||
@@ -29,8 +28,8 @@ if (!empty($this->params['action'])) {
|
||||
// Render the grid
|
||||
$grid
|
||||
->columns($cols)
|
||||
->sortField('LeaseID')
|
||||
->defaultFields(array('LeaseID', 'Lease'))
|
||||
->sortField('Lease')
|
||||
->defaultFields(array('Lease'))
|
||||
->searchFields(array('Customer', 'Unit'))
|
||||
->render($this, isset($config) ? $config : null,
|
||||
array_diff(array_keys($cols), array('Signed', 'Status', 'Comment')));
|
||||
|
||||
@@ -20,7 +20,6 @@ $cols['Sub-Total'] = array('index' => 'subtotal-balance', 'formatter' =>
|
||||
|
||||
// Render the grid
|
||||
$grid
|
||||
->limit(50)
|
||||
->columns($cols)
|
||||
->sortField('Date', 'DESC')
|
||||
->defaultFields(array('Entry', 'Date', 'Amount'))
|
||||
|
||||
@@ -11,17 +11,37 @@
|
||||
// REVISIT <AP>: 20090823
|
||||
// Add way to slide the entire menu off the page
|
||||
|
||||
// The sidemenu-container is necessary to define the
|
||||
// bounds as the parent of the sidemenu div, which will
|
||||
// be heavily manipulated by the accordion module. If
|
||||
// we don't have good control over the parent, the
|
||||
// accordion will get confused and behave poorly.
|
||||
echo('<DIV ID="sidemenu-container">' . "\n");
|
||||
echo('<DIV ID="sidemenu">' . "\n");
|
||||
|
||||
foreach ($menu AS $area) {
|
||||
if (empty($area['subarea']))
|
||||
$section = 0;
|
||||
$active_section = null;
|
||||
foreach ($menu['areas'] AS $area_name => $area) {
|
||||
if (empty($area['subareas']))
|
||||
continue;
|
||||
|
||||
foreach ($area['subarea'] AS $subarea) {
|
||||
foreach ($area['subareas'] AS $subarea_name => $subarea) {
|
||||
if (empty($subarea['priorities']))
|
||||
continue;
|
||||
|
||||
echo('<H3 class="sidemenu-header">' . $subarea['name'] . "</H3>\n");
|
||||
if (!isset($active_section) &&
|
||||
!empty($menu['active']['area']) && $area_name == $menu['active']['area'] &&
|
||||
(empty($menu['active']['subarea']) || $subarea_name == $menu['active']['subarea']))
|
||||
$active_section = $section;
|
||||
|
||||
++$section;
|
||||
|
||||
echo('<H3' .
|
||||
//' id="sidemenu-section-'.$area_name.'-'.$subarea_name.'"' .
|
||||
' class="sidemenu-header">' .
|
||||
$subarea['name'] .
|
||||
"</H3>\n");
|
||||
|
||||
echo('<DIV class="sidemenu-content">' . "\n");
|
||||
foreach ($subarea['priorities'] AS $priority) {
|
||||
foreach ($priority AS $item) {
|
||||
@@ -39,19 +59,25 @@ foreach ($menu AS $area) {
|
||||
}
|
||||
}
|
||||
|
||||
echo('</DIV>' . "\n");
|
||||
?>
|
||||
echo('</DIV>' . "\n"); // End #sidemenu
|
||||
echo('</DIV>' . "\n"); // End #sidemenu-container
|
||||
|
||||
<script type="text/javascript"><!--
|
||||
// Uses both hoverintent, which is a more user friendly mechanism
|
||||
// than mouseover, as well as click. This provides 1) a workable
|
||||
// solution for those browsers that don't use pointers, such as
|
||||
// a touchscreen, and 2) a means to open the menu if the animation
|
||||
// was running while the user moved the pointer to a new menu area.
|
||||
$javascript->codeBlock(
|
||||
<<<JSCB
|
||||
jQuery(document).ready(function(){
|
||||
jQuery('#sidemenu').accordion
|
||||
({ fillSpace : true,
|
||||
event: 'mouseover',
|
||||
<?php /* REVISIT <AP>: 20090823
|
||||
* Prevent animation until we can figure out why we
|
||||
* get animation width jitter */ ?>
|
||||
animated : false,
|
||||
});
|
||||
});
|
||||
|
||||
--></script>
|
||||
jQuery("#sidemenu").accordion
|
||||
({ fillSpace : true,
|
||||
event : "click hoverintent",
|
||||
animated : "bounceslide",
|
||||
JSCB
|
||||
. (isset($active_section) ? "\tactive : $active_section,\n" : '') .
|
||||
<<<JSCB
|
||||
});
|
||||
});
|
||||
JSCB
|
||||
, array('inline' => false));
|
||||
|
||||
@@ -52,8 +52,8 @@ if (isset($rows) && is_array($rows) && count($rows)) {
|
||||
|
||||
foreach ($rows AS $r => &$row) {
|
||||
foreach ($row AS $c => $col) {
|
||||
$cell_class = implode(" ", array_merge(isset( $row_class[$r]) ? $row_class[$r] : array(),
|
||||
isset($column_class[$c]) ? $column_class[$c] : array()));
|
||||
$cell_class = implode(" ", array_merge(empty( $row_class[$r]) ? array() : $row_class[$r],
|
||||
empty($column_class[$c]) ? array() : $column_class[$c]));
|
||||
if ($cell_class)
|
||||
$row[$c] = array($col, array('class' => $cell_class));
|
||||
}
|
||||
@@ -65,11 +65,11 @@ if (isset($rows) && is_array($rows) && count($rows)) {
|
||||
|
||||
// OK, output the table HTML
|
||||
echo('<TABLE' .
|
||||
(isset($id) ? ' ID="'.$id.'"' : '') .
|
||||
(isset($class) ? ' CLASS="'.$class.'"' : '') .
|
||||
(empty($id) ? '' : ' ID="'.$id.'"') .
|
||||
(empty($class) ? '' : ' CLASS="'.$class.'"') .
|
||||
'>' . "\n");
|
||||
|
||||
if (isset($caption))
|
||||
if (!empty($caption))
|
||||
echo(' <CAPTION>' . $caption . '</CAPTION>' . "\n");
|
||||
|
||||
if (isset($headers) && is_array($headers)) {
|
||||
|
||||
@@ -13,7 +13,7 @@ $cols['Comment'] = array('index' => 'Transaction.comment', 'formatter' =
|
||||
// Render the grid
|
||||
$grid
|
||||
->columns($cols)
|
||||
->sortField('Timestamp')
|
||||
->sortField('Timestamp', 'DESC')
|
||||
->defaultFields(array('ID', 'Timestamp'))
|
||||
->searchFields(array('Type', 'Comment'))
|
||||
->render($this, isset($config) ? $config : null,
|
||||
|
||||
33
site/views/elements/unit_sizes.ctp
Normal file
33
site/views/elements/unit_sizes.ctp
Normal file
@@ -0,0 +1,33 @@
|
||||
<?php /* -*- mode:PHP -*- */
|
||||
|
||||
// Define the table columns
|
||||
$cols = array();
|
||||
$cols['Size'] = array('index' => 'UnitSize.name', 'formatter' => 'shortname');
|
||||
$cols['Width'] = array('index' => 'UnitSize.width', 'formatter' => 'number');
|
||||
$cols['Depth'] = array('index' => 'UnitSize.depth', 'formatter' => 'number');
|
||||
$cols['Height'] = array('index' => 'UnitSize.height', 'formatter' => 'number');
|
||||
$cols['Area'] = array('index' => 'sqft', 'formatter' => 'number');
|
||||
$cols['Volume'] = array('index' => 'cuft', 'formatter' => 'number');
|
||||
$cols['Deposit'] = array('index' => 'UnitSize.deposit', 'formatter' => 'currency');
|
||||
$cols['Rent'] = array('index' => 'UnitSize.rent', 'formatter' => 'currency');
|
||||
$cols['A. Cost'] = array('index' => 'sqcost', 'formatter' => 'currency');
|
||||
$cols['V. Cost'] = array('index' => 'cucost', 'formatter' => 'currency');
|
||||
$cols['Unavailable'] = array('index' => 'unavailable', 'formatter' => 'number');
|
||||
$cols['Occupied'] = array('index' => 'occupied', 'formatter' => 'number');
|
||||
$cols['Available'] = array('index' => 'available', 'formatter' => 'number');
|
||||
$cols['Total'] = array('index' => 'units', 'formatter' => 'number');
|
||||
$cols['Occupancy'] = array('index' => 'occupancy', 'formatter' => 'percentage', 'formatoptions' => array('precision' => 0));
|
||||
$cols['Vacancy'] = array('index' => 'vacancy', 'formatter' => 'percentage', 'formatoptions' => array('precision' => 0));
|
||||
$cols['Comment'] = array('index' => 'Unit.comment', 'formatter' => 'comment');
|
||||
|
||||
// Render the grid
|
||||
$grid
|
||||
->columns($cols)
|
||||
->sortField('Area')
|
||||
->defaultFields(array('Size', 'Area'))
|
||||
->searchFields(array('Size', 'Width', 'Depth', 'Area', 'Deposit', 'Rent'))
|
||||
->render($this, isset($config) ? $config : null,
|
||||
array_diff(array_keys($cols), array('Height', 'Volume',
|
||||
'A. Cost', 'V. Cost',
|
||||
'Occupied', 'Total', 'Occupancy', 'Vacancy',
|
||||
'Comment')));
|
||||
@@ -6,12 +6,16 @@ $cols['Sort'] = array('index' => 'Unit.sort_order', 'hidden' => true);
|
||||
$cols['Walk'] = array('index' => 'Unit.walk_order', 'formatter' => 'number');
|
||||
$cols['Unit'] = array('index' => 'Unit.name', 'formatter' => 'shortname');
|
||||
$cols['Size'] = array('index' => 'UnitSize.name', 'formatter' => 'shortname');
|
||||
$cols['Area'] = array('index' => 'sqft', 'formatter' => 'number');
|
||||
$cols['Rent'] = array('index' => 'Unit.rent', 'formatter' => 'currency');
|
||||
$cols['Deposit'] = array('index' => 'Unit.deposit', 'formatter' => 'currency');
|
||||
$cols['Status'] = array('index' => 'Unit.status', 'formatter' => 'name'); // We have enough real estate
|
||||
$cols['Balance'] = array('index' => 'balance', 'formatter' => 'currency');
|
||||
$cols['Comment'] = array('index' => 'Unit.comment', 'formatter' => 'comment');
|
||||
|
||||
if (in_array($this->params['action'], array('vacant', 'unavailable')))
|
||||
$grid->invalidFields('Balance');
|
||||
|
||||
// Render the grid
|
||||
$grid
|
||||
->columns($cols)
|
||||
|
||||
@@ -24,24 +24,48 @@
|
||||
?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<?php
|
||||
/* print("<!--\n"); */
|
||||
/* print("SERVER = "); print_r($_SERVER); print("\n"); */
|
||||
/* print("REQUEST = "); print_r($_REQUEST); print("\n"); */
|
||||
/* print("COOKIE = "); print_r($_COOKIE); print("\n"); */
|
||||
/* print("-->\n"); */
|
||||
?>
|
||||
<head>
|
||||
<?php echo $html->charset(); ?>
|
||||
<title>
|
||||
Property Manager: <?php echo $title_for_layout; ?>
|
||||
</title>
|
||||
<?php
|
||||
// Reset the __scripts variable, which has already been dumped to
|
||||
// $scripts_for_layout. Elements/Helpers used in the layout may
|
||||
// also have some scripts to add. They cannot be put into the head
|
||||
// but we can at least put them into a relatively benign place, so
|
||||
// scripts don't have to be dumped inline in possibly awkward spots.
|
||||
// Oh, and yes... I know we're not supposed to be using this variable
|
||||
// directly, and will possibly get burned someday. Oh well, Cake
|
||||
// hasn't left us a lot of choice, besides writing our own scripts
|
||||
// mechanism _additional_ to what Cake has provided :-/
|
||||
$this->__scripts = array();
|
||||
|
||||
if (!empty($_SERVER['HTTPS']))
|
||||
$protocol = 'https://';
|
||||
else
|
||||
$protocol = 'http://';
|
||||
|
||||
echo $html->meta('icon') . "\n";
|
||||
echo $html->css('cake.generic') . "\n";
|
||||
echo $html->css('layout') . "\n";
|
||||
echo $html->css('print', null, array('media' => 'print')) . "\n";
|
||||
echo $html->css('sidemenu') . "\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 $javascript->link($protocol . 'ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js') . "\n";
|
||||
echo $javascript->link($protocol . '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.jquery') . "\n";
|
||||
echo $javascript->link('pmgr') . "\n";
|
||||
echo $scripts_for_layout . "\n";
|
||||
?>
|
||||
@@ -89,5 +113,7 @@
|
||||
<?php echo $cakeDebug; ?>
|
||||
<?php /* pr($this); */ ?>
|
||||
|
||||
<?php echo implode("\n", $this->__scripts) . "\n"; ?>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -99,20 +99,7 @@ function onRowSelect(grid_id, lease_id) {
|
||||
// Set the item id that will be returned with the form
|
||||
$("#lease-id").val(lease_id);
|
||||
|
||||
// Get the item names from the grid
|
||||
//$("#invoice-lease").html($(grid_id).getCell(lease_id, 'Lease-number'));
|
||||
// REVISIT <AP>: 20090708
|
||||
// This is not intended as a long term solution,
|
||||
// but I need a way to enter data and then view
|
||||
// the results. This link will help.
|
||||
$("#invoice-lease").html('<A HREF="' +
|
||||
"<?php echo $html->url(array('controller' => 'leases',
|
||||
'action' => 'view')); ?>"
|
||||
+ "/" +
|
||||
$(grid_id).getCell(lease_id, 'Lease-id').replace(/^#/,'') +
|
||||
'">' +
|
||||
$(grid_id).getCell(lease_id, 'Lease-number') +
|
||||
'</A>');
|
||||
$("#invoice-lease").html($(grid_id).getCell(lease_id, 'Lease-number'));
|
||||
$("#invoice-unit").html($(grid_id).getCell(lease_id, 'Unit-name'));
|
||||
$("#invoice-customer").html($(grid_id).getCell(lease_id, 'Customer-name'));
|
||||
$("#invoice-rent").html($(grid_id).getCell(lease_id, 'Lease-rent'));
|
||||
@@ -222,6 +209,7 @@ if (empty($movein))
|
||||
array('gridstate' =>
|
||||
'onGridState("#"+$(this).attr("id"), gridstate)'),
|
||||
),
|
||||
'exclude' => array('Closed'),
|
||||
'action' => 'active',
|
||||
'nolinks' => true,
|
||||
'limit' => 10,
|
||||
@@ -399,15 +387,7 @@ Configure::write('debug', '0');
|
||||
|
||||
<?php if (isset($lease['id'])): ?>
|
||||
$("#lease-id").val(<?php echo $lease['id']; ?>);
|
||||
//$("#invoice-lease").html("<?php echo '#'.$lease['number']; ?>");
|
||||
$("#invoice-lease").html('<A HREF="' +
|
||||
"<?php echo $html->url(array('controller' => 'leases',
|
||||
'action' => 'view')); ?>"
|
||||
+ "/" +
|
||||
"<?php echo $lease['id']; ?>" +
|
||||
'">#' +
|
||||
"<?php echo $lease['number']; ?>" +
|
||||
'</A>');
|
||||
$("#invoice-lease").html("<?php echo '#'.$lease['number']; ?>");
|
||||
$("#invoice-unit").html("<?php echo $unit['name']; ?>");
|
||||
$("#invoice-customer").html("<?php echo $customer['name']; ?>");
|
||||
$("#invoice-rent").html("<?php echo FormatHelper::currency($lease['rent']); ?>");
|
||||
|
||||
@@ -26,14 +26,20 @@ $move_type = preg_replace("/.*_/", "", $this->action);
|
||||
// Reset the form
|
||||
function resetForm() {
|
||||
$("#customer-id").val(0);
|
||||
$("#move-customer").html("INTERNAL ERROR");
|
||||
$("#unit-id").val(0);
|
||||
$("#lease-id").val(0);
|
||||
$("#move-customer").html("INTERNAL ERROR");
|
||||
$("#move-unit").html("INTERNAL ERROR");
|
||||
$("#move-lease").html("INTERNAL ERROR");
|
||||
datepickerNow('LeaseMoveDate', false);
|
||||
}
|
||||
|
||||
function onRowSelect(grid_id, item_type, item_id) {
|
||||
cell_name = item_type.charAt(0).toUpperCase() + item_type.substr(1) + "-name";
|
||||
cell_name = item_type.charAt(0).toUpperCase() + item_type.substr(1);
|
||||
if (item_type == 'lease')
|
||||
cell_name += "-number";
|
||||
else
|
||||
cell_name += "-name";
|
||||
|
||||
// Set the item id that will be returned with the form
|
||||
$("#"+item_type+"-id").val(item_id);
|
||||
@@ -47,6 +53,22 @@ function onRowSelect(grid_id, item_type, item_id) {
|
||||
$("#LeaseDeposit").val($(grid_id).getCell(item_id, 'Unit-deposit'));
|
||||
}
|
||||
|
||||
// If a unit was selected, update the "Create new customer" link
|
||||
if (item_type == 'unit') {
|
||||
$("#customer-selection-new-url").attr
|
||||
('href',
|
||||
"<?php echo
|
||||
$html->url(array('controller' => 'customers',
|
||||
'action' => 'add')); ?>"
|
||||
+ '/' + $("#unit-id").val());
|
||||
}
|
||||
|
||||
// If a lease was selected, update the customer and unit
|
||||
if (item_type == 'lease') {
|
||||
$("#move-unit").html($(grid_id).getCell(item_id, 'Unit-name'));
|
||||
$("#move-customer").html($(grid_id).getCell(item_id, 'Customer-name'));
|
||||
}
|
||||
|
||||
// Hide the "no customer" message and show the current customer
|
||||
$("."+item_type+"-selection-invalid").hide();
|
||||
$("."+item_type+"-selection-valid").show();
|
||||
@@ -56,12 +78,12 @@ function onRowSelect(grid_id, item_type, item_id) {
|
||||
|
||||
function onGridState(grid_id, item_type, state) {
|
||||
if (state == 'visible') {
|
||||
$("."+item_type+"-selection-new").show();
|
||||
$("."+item_type+"-selection-invalid").hide();
|
||||
$("."+item_type+"-selection-valid").hide();
|
||||
}
|
||||
else {
|
||||
//if ($(grid_id).getGridParam("selrow"))
|
||||
//alert("id:" + $("#"+item_type+"-id").val());
|
||||
$("."+item_type+"-selection-new").hide();
|
||||
if ($("#"+item_type+"-id").val() > 0) {
|
||||
$("."+item_type+"-selection-invalid").hide();
|
||||
$("."+item_type+"-selection-valid").show();
|
||||
@@ -78,7 +100,42 @@ function onGridState(grid_id, item_type, state) {
|
||||
<?php
|
||||
; // align
|
||||
|
||||
if ($move_type !== 'out') {
|
||||
if ($move_type === 'out') {
|
||||
echo $this->element('leases', array
|
||||
('config' => array
|
||||
('grid_div_id' => 'leases-list',
|
||||
'grid_div_class' => 'text-below',
|
||||
'caption' => ('<A HREF="#" ONCLICK="$(\'#leases-list .HeaderButton\').click();'.
|
||||
' return false;">Select Lease</A>'),
|
||||
'grid_setup' => array('hiddengrid' => isset($lease['id'])),
|
||||
'grid_events' => array('onSelectRow' =>
|
||||
array('ids' =>
|
||||
'if (ids != null){onRowSelect("#"+$(this).attr("id"), "lease", ids);}'),
|
||||
'onHeaderClick' =>
|
||||
array('gridstate' =>
|
||||
'onGridState("#"+$(this).attr("id"), "lease", gridstate)'),
|
||||
),
|
||||
'exclude' => array('Closed'),
|
||||
'action' => 'active',
|
||||
'nolinks' => true,
|
||||
'limit' => 10,
|
||||
)));
|
||||
|
||||
echo ('<DIV CLASS="move-inout grid-selection-text">' .
|
||||
|
||||
'<DIV CLASS="lease-selection-valid" style="display:none">' .
|
||||
'Lease <SPAN id="move-lease"></SPAN>' . ' / ' .
|
||||
'Unit: <SPAN id="move-unit"></SPAN>' . ' / ' .
|
||||
'Customer: <SPAN id="move-customer"></SPAN>' .
|
||||
'</DIV>' .
|
||||
|
||||
'<DIV CLASS="lease-selection-invalid" style="display:none">' .
|
||||
'Please select lease' .
|
||||
'</DIV>' .
|
||||
|
||||
'</DIV>' . "\n");
|
||||
}
|
||||
else {
|
||||
echo $this->element('customers', array
|
||||
('config' => array
|
||||
('grid_div_id' => 'customers-list',
|
||||
@@ -96,22 +153,27 @@ if ($move_type !== 'out') {
|
||||
'nolinks' => true,
|
||||
'limit' => 10,
|
||||
)));
|
||||
}
|
||||
|
||||
echo ('<DIV CLASS="move-inout grid-selection-text">' .
|
||||
echo ('<DIV CLASS="move-inout grid-selection-text">' .
|
||||
|
||||
'<DIV CLASS="customer-selection-valid" style="display:none">' .
|
||||
'Customer: <SPAN id="move-customer"></SPAN>' .
|
||||
'</DIV>' .
|
||||
'<DIV CLASS="customer-selection-new" style="display:none">' .
|
||||
$html->link('Create a new Customer',
|
||||
array('controller' => 'customers',
|
||||
'action' => 'add',
|
||||
(empty($unit['id']) ? null : $unit['id'])),
|
||||
array('id' => 'customer-selection-new-url')) .
|
||||
'</DIV>' .
|
||||
|
||||
'<DIV CLASS="customer-selection-invalid" style="display:none">' .
|
||||
'Please select customer' .
|
||||
'</DIV>' .
|
||||
'<DIV CLASS="customer-selection-valid" style="display:none">' .
|
||||
'Customer: <SPAN id="move-customer"></SPAN>' .
|
||||
'</DIV>' .
|
||||
|
||||
'</DIV>' . "\n");
|
||||
'<DIV CLASS="customer-selection-invalid" style="display:none">' .
|
||||
'Please select customer' .
|
||||
'</DIV>' .
|
||||
|
||||
'</DIV>' . "\n");
|
||||
|
||||
if ($move_type !== 'out') {
|
||||
echo $this->element('units', array
|
||||
('config' => array
|
||||
('grid_div_id' => 'units-list',
|
||||
@@ -132,39 +194,40 @@ if ($move_type !== 'out') {
|
||||
'nolinks' => true,
|
||||
'limit' => 10,
|
||||
)));
|
||||
|
||||
echo ('<DIV CLASS="move-inout grid-selection-text">' .
|
||||
|
||||
'<DIV CLASS="unit-selection-valid" style="display:none">' .
|
||||
'Unit: <SPAN id="move-unit"></SPAN>' .
|
||||
'</DIV>' .
|
||||
|
||||
'<DIV CLASS="unit-selection-invalid" style="display:none">' .
|
||||
'Please select unit' .
|
||||
'</DIV>' .
|
||||
|
||||
'</DIV>' . "\n");
|
||||
}
|
||||
|
||||
echo ('<DIV CLASS="move-inout grid-selection-text">' .
|
||||
|
||||
'<DIV CLASS="unit-selection-valid" style="display:none">' .
|
||||
'Unit: <SPAN id="move-unit"></SPAN>' .
|
||||
'</DIV>' .
|
||||
|
||||
'<DIV CLASS="unit-selection-invalid" style="display:none">' .
|
||||
'Please select unit' .
|
||||
'</DIV>' .
|
||||
|
||||
'</DIV>' . "\n");
|
||||
|
||||
echo $form->create(null, array('id' => 'move-inout-form',
|
||||
'url' => array('controller' => 'leases',
|
||||
'action' => $move_action)));
|
||||
|
||||
echo $form->input("Lease.customer_id",
|
||||
array('id' => 'customer-id',
|
||||
'type' => 'hidden',
|
||||
'value' => 0));
|
||||
|
||||
echo $form->input("Lease.unit_id",
|
||||
array('id' => 'unit-id',
|
||||
'type' => 'hidden',
|
||||
'value' => 0));
|
||||
|
||||
if ($move_type === 'out') {
|
||||
echo $form->input('Lease.id',
|
||||
array('type' => 'hidden',
|
||||
'value' => $lease['id'],
|
||||
));
|
||||
array('id' => 'lease-id',
|
||||
'type' => 'hidden',
|
||||
'value' => 0));
|
||||
}
|
||||
else {
|
||||
echo $form->input("Lease.customer_id",
|
||||
array('id' => 'customer-id',
|
||||
'type' => 'hidden',
|
||||
'value' => 0));
|
||||
|
||||
echo $form->input("Lease.unit_id",
|
||||
array('id' => 'unit-id',
|
||||
'type' => 'hidden',
|
||||
'value' => 0));
|
||||
}
|
||||
|
||||
echo $this->element('form_table',
|
||||
@@ -228,6 +291,20 @@ echo $form->end('Perform Move ' . ucfirst($move_type));
|
||||
|
||||
resetForm();
|
||||
|
||||
<?php if ($move_type === 'out') { ?>
|
||||
|
||||
<?php if (isset($lease['id'])): ?>
|
||||
$("#lease-id").val(<?php echo $lease['id']; ?>);
|
||||
$("#move-lease").html("#<?php echo $lease['number']; ?>");
|
||||
$("#move-customer").html("<?php echo $customer['name']; ?>");
|
||||
$("#move-unit").html("<?php echo $unit['name']; ?>");
|
||||
onGridState(null, 'lease', 'hidden');
|
||||
<?php else: ?>
|
||||
onGridState(null, 'lease', 'visible');
|
||||
<?php endif; ?>
|
||||
|
||||
<?php } else { /* end (move_type === 'out') */ ?>
|
||||
|
||||
<?php if (isset($customer['id'])): ?>
|
||||
$("#customer-id").val(<?php echo $customer['id']; ?>);
|
||||
$("#move-customer").html("<?php echo $customer['name']; ?>");
|
||||
@@ -243,6 +320,10 @@ echo $form->end('Perform Move ' . ucfirst($move_type));
|
||||
<?php else: ?>
|
||||
onGridState(null, 'unit', 'visible');
|
||||
<?php endif; ?>
|
||||
|
||||
<?php } /* end (move_type === 'out') */ ?>
|
||||
|
||||
|
||||
});
|
||||
--></script>
|
||||
|
||||
|
||||
@@ -72,6 +72,7 @@ echo $this->element('ledger_entries', array
|
||||
'Amount', 'Cr/Dr', 'Balance',
|
||||
empty($account['receipts']) ? 'Tender' : null),
|
||||
'include' => array('Debit', 'Credit', 'Sub-Total'),
|
||||
'limit' => 50,
|
||||
)));
|
||||
|
||||
|
||||
|
||||
88
site/views/unit_sizes/view.ctp
Normal file
88
site/views/unit_sizes/view.ctp
Normal file
@@ -0,0 +1,88 @@
|
||||
<?php /* -*- mode:PHP -*- */
|
||||
|
||||
echo '<div class="unit-size view">' . "\n";
|
||||
|
||||
/**********************************************************************
|
||||
**********************************************************************
|
||||
**********************************************************************
|
||||
**********************************************************************
|
||||
* UnitSize Detail Main Section
|
||||
*/
|
||||
|
||||
$unit_type = $size['UnitType'];
|
||||
$unit_size = $size['UnitSize'];
|
||||
|
||||
$rows = array();
|
||||
$rows[] = array('Name', $unit_size['name']);
|
||||
$rows[] = array('Type', $unit_type['name']);
|
||||
$rows[] = array('Width', $unit_size['width'] . ' Feet');
|
||||
$rows[] = array('Depth', $unit_size['depth'] . ' Feet');
|
||||
if (!empty($unit_size['height']))
|
||||
$rows[] = array('Height', $unit_size['height'] . ' Feet');
|
||||
if (!empty($unit_size['sqft']))
|
||||
$rows[] = array('Area', ($unit_size['sqft'] . ' Square Feet'
|
||||
. ' ('. FormatHelper::currency($unit_size['rent'] / $unit_size['sqft'])
|
||||
. ' / Square Foot)'));
|
||||
if (!empty($unit_size['cuft']))
|
||||
$rows[] = array('Volume', ($unit_size['cuft'] . ' Cubic Feet'
|
||||
. ' ('. FormatHelper::currency($unit_size['rent'] / $unit_size['cuft'])
|
||||
. ' / Cubic Foot)'));
|
||||
$rows[] = array('Deposit', FormatHelper::currency($unit_size['deposit']));
|
||||
$rows[] = array('Rent', FormatHelper::currency($unit_size['rent']));
|
||||
$rows[] = array('Comment', $unit_size['comment']);
|
||||
|
||||
echo $this->element('table',
|
||||
array('class' => 'item unit_size detail',
|
||||
'caption' => 'Unit Size Detail',
|
||||
'rows' => $rows,
|
||||
'column_class' => array('field', 'value')));
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* UnitSize Info Box
|
||||
*/
|
||||
|
||||
echo '<div class="infobox">' . "\n";
|
||||
$rows = array();
|
||||
$rows[] = array($unit_size['name'] . ' Units:', $stats['all']);
|
||||
$rows[] = array('Unavailable:', $stats['unavailable']);
|
||||
$rows[] = array('Vacant:', $stats['vacant']);
|
||||
$rows[] = array('Occupied:', $stats['occupied']);
|
||||
echo $this->element('table',
|
||||
array('class' => 'summary',
|
||||
'rows' => $rows,
|
||||
'column_class' => array('field', 'value'),
|
||||
'suppress_alternate_rows' => true,
|
||||
));
|
||||
echo '</div>' . "\n";
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
**********************************************************************
|
||||
**********************************************************************
|
||||
**********************************************************************
|
||||
* Supporting Elements Section
|
||||
*/
|
||||
|
||||
echo '<div CLASS="detail supporting">' . "\n";
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* Ledger Entries
|
||||
*/
|
||||
|
||||
echo $this->element('units', array
|
||||
(// Grid configuration
|
||||
'config' => array
|
||||
('caption' => $unit_size['name'] . " Units",
|
||||
'filter' => array('unit_size_id' => $unit_size['id']),
|
||||
'include' => array('Deposit', 'Comment'),
|
||||
'exclude' => array('Size', 'Area', 'Balance'),
|
||||
)));
|
||||
|
||||
|
||||
/* End "detail supporting" div */
|
||||
echo '</div>' . "\n";
|
||||
|
||||
/* End page div */
|
||||
echo '</div>' . "\n";
|
||||
@@ -19,7 +19,10 @@ if (isset($unit['Unit']))
|
||||
$rows = array();
|
||||
$rows[] = array('Name', $unit['name']);
|
||||
$rows[] = array('Status', $unit['status']);
|
||||
$rows[] = array('Size', $unit_size['name']);
|
||||
$rows[] = array('Size', $html->link($unit_size['name'],
|
||||
array('controller' => 'unit_sizes',
|
||||
'action' => 'view',
|
||||
$unit_size['id'])));
|
||||
$rows[] = array('Deposit', FormatHelper::currency($unit['deposit']));
|
||||
$rows[] = array('Rent', FormatHelper::currency($unit['rent']));
|
||||
$rows[] = array('Comment', $unit['comment']);
|
||||
|
||||
@@ -15,6 +15,7 @@ table#layout { width: 100% }
|
||||
td#sidecolumn ,
|
||||
td#pagecolumn { vertical-align: top; }
|
||||
td#pagecolumn { padding-left: 4mm; }
|
||||
td#sidecolumn { width: 1% }
|
||||
|
||||
|
||||
/************************************************************
|
||||
@@ -46,7 +47,7 @@ span.fmt-age.delinquent { color: #f00; }
|
||||
|
||||
table.item th ,
|
||||
table.item td { padding: 0.1em 0.4em 0.1em 0.4em; }
|
||||
table.item td { white-space: nowrap; }
|
||||
table.item td.name { white-space: nowrap; }
|
||||
/* table.item { border-spacing: 0 0; /\*IE*\/border-collapse: collapse; empty-cells: show } */
|
||||
table.item { border-spacing: 0 0; empty-cells: show }
|
||||
table.item { border:1px solid #ccc;
|
||||
@@ -122,6 +123,11 @@ div.detail.supporting { clear : both;
|
||||
.edit table.detail { width : 80%;
|
||||
float : none;
|
||||
}
|
||||
table.item td { vertical-align: top; }
|
||||
.edit .item td.field .required { color: #33f }
|
||||
.edit .item td.field .recommended { color: #35d }
|
||||
.edit .item td.field .recommended.empty { color: #f5d }
|
||||
.edit .item td.field .required.empty { color: #f33 }
|
||||
|
||||
|
||||
/************************************************************
|
||||
|
||||
@@ -3,8 +3,7 @@
|
||||
* Side Menu Layout
|
||||
*/
|
||||
|
||||
td#sidecolumn { width: 12em; text-align: left; }
|
||||
#sidemenu { height: 20em; }
|
||||
#sidemenu-container { width: 12em; height: 20em; }
|
||||
|
||||
|
||||
/************************************************************
|
||||
|
||||
57
site/webroot/js/pmgr.jquery.js
Normal file
57
site/webroot/js/pmgr.jquery.js
Normal file
@@ -0,0 +1,57 @@
|
||||
/* ******************************************************************************
|
||||
* hoverintent
|
||||
*
|
||||
* Works like mouseover, but instead of firing immediately when an object
|
||||
* is mouseover'ed, it tries to determine when the user actually _intends_
|
||||
* to have the pointer hover over the object. In other words, it's a lot
|
||||
* like mouseover with a delay before firing, and if the pointer moves
|
||||
* before hoverintent can fire, it doesn't fire at all.
|
||||
*
|
||||
* Found from jQuery UI Ticket #3614
|
||||
* http://dev.jqueryui.com/ticket/3614
|
||||
*/
|
||||
|
||||
var cfg = ($.hoverintent = {
|
||||
sensitivity: 7,
|
||||
interval: 100
|
||||
});
|
||||
|
||||
$.event.special.hoverintent = {
|
||||
setup: function() {
|
||||
$(this).bind("mouseover", jQuery.event.special.hoverintent.handler);
|
||||
},
|
||||
teardown: function() {
|
||||
$(this).unbind("mouseover", jQuery.event.special.hoverintent.handler);
|
||||
},
|
||||
handler: function(event) {
|
||||
event.type = "hoverintent";
|
||||
var self = this,
|
||||
args = arguments,
|
||||
target = $(event.target),
|
||||
cX, cY, pX, pY;
|
||||
|
||||
|
||||
function track(event) {
|
||||
cX = event.pageX;
|
||||
cY = event.pageY;
|
||||
};
|
||||
pX = event.pageX;
|
||||
pY = event.pageY;
|
||||
function clear() {
|
||||
target.unbind("mousemove", track).unbind("mouseout", arguments.callee);
|
||||
clearTimeout(timeout);
|
||||
}
|
||||
function handler() {
|
||||
if ( ( Math.abs(pX-cX) + Math.abs(pY-cY) ) < cfg.sensitivity ) {
|
||||
clear();
|
||||
jQuery.event.handle.apply(self, args);
|
||||
} else {
|
||||
pX = cX; pY = cY;
|
||||
timeout = setTimeout(handler, cfg.interval);
|
||||
}
|
||||
}
|
||||
var timeout = setTimeout(handler, cfg.interval);
|
||||
target.mousemove(track).mouseout(clear);
|
||||
return true;
|
||||
}
|
||||
};
|
||||
40
todo.notes
40
todo.notes
@@ -1,7 +1,3 @@
|
||||
Fix ACH deposits into bank. Make it happen automatically,
|
||||
perhaps after 3 days. Without this, we cannot NSF an ACH
|
||||
transaction.
|
||||
|
||||
Add NSF Fee to the NSF entry page (It's hardcoded right now
|
||||
in Transaction to $35).
|
||||
|
||||
@@ -13,9 +9,6 @@ was in early (VERY early) implementations. At that time, I
|
||||
had to a use temporary variable to keep a running total. It
|
||||
worked, but was MySQL specific.
|
||||
|
||||
Unit Size has no controller. Either remove the link from the
|
||||
units grid, or implement the controller.
|
||||
|
||||
Add a move-out charges field to the move-out page.
|
||||
Otherwise, if the balance is zero, the lease will automatically
|
||||
be closed and no more charges are possible. The other option
|
||||
@@ -36,22 +29,14 @@ Get Petty Cash working. We'll need to add one or more expense
|
||||
accounts. We'll also need to implement purchase order
|
||||
functionality, or at least simple an expense page.
|
||||
|
||||
Update unit status between OCCUPIED / LATE / LOCKED depending
|
||||
on the current situation.
|
||||
|
||||
Have a report indicating Needs-to-be-Locked. Allow manager
|
||||
to go through this list and check off the units actually
|
||||
locked (which will update the unit status). Perhaps we
|
||||
should add a needs-locked status.
|
||||
locked (which will update the unit status).
|
||||
|
||||
Same as above, except needs-to-be-unlocked.
|
||||
|
||||
Make the default (initial) jqGrid sort order for balance be DESC.
|
||||
|
||||
Change the menu structure to be $menu['section']['item'], so that
|
||||
items don't have to be added in order of section. Perhaps even
|
||||
array(array(name, priority, items => array(name, priority, link)))
|
||||
|
||||
Change menu to be
|
||||
'Reports' (or 'Overview', or 'Summary')
|
||||
'Activities'
|
||||
@@ -59,12 +44,6 @@ Change menu to be
|
||||
- New Customer
|
||||
- Move-in
|
||||
|
||||
Change New Customer form to have contact 'New' radio pre-checked
|
||||
|
||||
Add explanatory information on the New Customer page
|
||||
- Customer name can be omitted and will come from primary tenant.
|
||||
- Phone numbers, etc can be added later directly to the contact
|
||||
|
||||
Add dynamic check to see if customer already exists before being
|
||||
created. Ideally, check +/- a few characters to check for
|
||||
alternate spellings. Same for contact.
|
||||
@@ -196,4 +175,21 @@ Automatic assessment of late fees, or at least for now, one
|
||||
click manual mechanism to assess late fees correctly for all
|
||||
tenants.
|
||||
|
||||
Fix ACH deposits into bank. Make it happen automatically,
|
||||
perhaps after 3 days. Without this, we cannot NSF an ACH
|
||||
transaction.
|
||||
|
||||
Change the menu structure to be $menu['section']['item'], so that
|
||||
items don't have to be added in order of section. Perhaps even
|
||||
array(array(name, priority, items => array(name, priority, link)))
|
||||
|
||||
Change New Customer form to have contact 'New' radio pre-checked
|
||||
|
||||
Add explanatory information on the New Customer page
|
||||
- Customer name can be omitted and will come from primary tenant.
|
||||
- Phone numbers, etc can be added later directly to the contact
|
||||
|
||||
Unit Size has no controller. Either remove the link from the
|
||||
units grid, or implement the controller.
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user