├── .gitignore ├── composer.json ├── composer.lock ├── css └── style.css ├── db └── install.sql ├── design ├── menus │ ├── custom-crm-managers-menu.png │ └── custom-crm-salesrep-menu.png ├── mockups │ ├── Manager view sales pipeline - my sales reps.bmml │ ├── custom crm mockup.bmml │ └── managers view - contacts.bmml └── screens │ ├── CRM managers view.png │ ├── CRM sales team view.png │ ├── Manager-sales-reps-crm-screen-mockup.png │ ├── Managers sales rep crm screen mockup.psd │ ├── sales team crm screen mockup.png.psd │ └── sales-team-crm-screen-mockup.png ├── inc ├── footer.php ├── head.php ├── menu.php └── tmp.php ├── index.php ├── managers └── pipeline.php ├── phpGrid └── .gitignore ├── readme.md ├── sales ├── customerwon.php ├── leads.php ├── opportunities.php ├── tasks-completed.php └── tasks.php └── template.php /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | composer.phar 3 | vendor/ 4 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "require": { 3 | "ptejada/uflex": "1.*" 4 | } 5 | } -------------------------------------------------------------------------------- /composer.lock: -------------------------------------------------------------------------------- 1 | { 2 | "_readme": [ 3 | "This file locks the dependencies of your project to a known state", 4 | "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", 5 | "This file is @generated automatically" 6 | ], 7 | "hash": "31973a0792e811f0f771a6b3186eb6da", 8 | "content-hash": "82878621ab22252a224a348680843465", 9 | "packages": [ 10 | { 11 | "name": "ptejada/uflex", 12 | "version": "1.0.7", 13 | "source": { 14 | "type": "git", 15 | "url": "https://github.com/ptejada/uFlex.git", 16 | "reference": "2fef424cd83a93cb2b1f15745666af61e4f4a306" 17 | }, 18 | "dist": { 19 | "type": "zip", 20 | "url": "https://api.github.com/repos/ptejada/uFlex/zipball/2fef424cd83a93cb2b1f15745666af61e4f4a306", 21 | "reference": "2fef424cd83a93cb2b1f15745666af61e4f4a306", 22 | "shasum": "" 23 | }, 24 | "require": { 25 | "php": ">=5.3.0" 26 | }, 27 | "require-dev": { 28 | "phpunit/dbunit": "1.3.2", 29 | "phpunit/phpunit": "4.3.5" 30 | }, 31 | "type": "library", 32 | "autoload": { 33 | "psr-4": { 34 | "ptejada\\uFlex\\": "src/" 35 | } 36 | }, 37 | "notification-url": "https://packagist.org/downloads/", 38 | "license": [ 39 | "MIT" 40 | ], 41 | "authors": [ 42 | { 43 | "name": "Pablo Tejada", 44 | "email": "pablo@ptejada.com" 45 | } 46 | ], 47 | "description": "All in one PHP user authentication class", 48 | "homepage": "http://ptejada.com/projects/uFlex", 49 | "keywords": [ 50 | "auth", 51 | "authorization", 52 | "login", 53 | "user" 54 | ], 55 | "time": "2016-05-20 01:31:42" 56 | } 57 | ], 58 | "packages-dev": [], 59 | "aliases": [], 60 | "minimum-stability": "stable", 61 | "stability-flags": [], 62 | "prefer-stable": false, 63 | "prefer-lowest": false, 64 | "platform": [], 65 | "platform-dev": [] 66 | } 67 | -------------------------------------------------------------------------------- /css/style.css: -------------------------------------------------------------------------------- 1 | @import url('https://fonts.googleapis.com/css?family=Lato'); 2 | 3 | body { 4 | padding: 0 15px; 5 | margin: 0 15px; 6 | font-family: lato, sans-serif, arial; 7 | } 8 | .ui-jqgrid-htable th, 9 | .ui-jqgrid tr.jqgrow td{ 10 | text-transform: capitalize; 11 | } 12 | .ui-jqgrid-htable th div{ 13 | font-weight: bold; 14 | } 15 | #menu ul { 16 | list-style-type: none; 17 | margin: 0; 18 | padding: 0; 19 | overflow: hidden; 20 | background-color: #1590C2; 21 | } 22 | 23 | #menu ul li { 24 | float: left; 25 | } 26 | 27 | #menu ul li a { 28 | display: block; 29 | color: white; 30 | text-align: center; 31 | padding: 14px 16px; 32 | text-decoration: none; 33 | } 34 | #menu ul li a:hover, 35 | #menu .active { 36 | background-color: #ddd; 37 | color:black; 38 | } 39 | .footer { 40 | position: fixed; 41 | right: 0; 42 | bottom: 0; 43 | left: 0; 44 | padding: 1rem; 45 | background-color: #efefef; 46 | text-align: center; 47 | } 48 | .ui-tabs-panel #subtitle{ 49 | display:none; 50 | } -------------------------------------------------------------------------------- /db/install.sql: -------------------------------------------------------------------------------- 1 | # ************************************************************ 2 | # Sequel Pro SQL dump 3 | # Version 4541 4 | # 5 | # http://www.sequelpro.com/ 6 | # https://github.com/sequelpro/sequelpro 7 | # 8 | # Host: localhost (MySQL 5.5.5-10.1.9-MariaDB-log) 9 | # Database: phpgrid_custom_crm 10 | # Generation Time: 2017-01-13 06:33:07 +0000 11 | # ************************************************************ 12 | 13 | 14 | /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; 15 | /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; 16 | /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; 17 | /*!40101 SET NAMES utf8 */; 18 | /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; 19 | /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; 20 | /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; 21 | 22 | 23 | # Dump of table contact 24 | # ------------------------------------------------------------ 25 | 26 | DROP TABLE IF EXISTS `contact`; 27 | 28 | CREATE TABLE `contact` ( 29 | `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 30 | `Contact_Title` varchar(30) DEFAULT NULL, 31 | `Contact_First` varchar(5) NOT NULL, 32 | `Contact_Middle` varchar(30) DEFAULT NULL, 33 | `Contact_Last` varchar(8) NOT NULL, 34 | `Lead_Referral_Source` varchar(23) NOT NULL, 35 | `Date_of_Initial_Contact` date NOT NULL, 36 | `Title` varchar(20) NOT NULL, 37 | `Company` varchar(16) NOT NULL, 38 | `Industry` varchar(12) NOT NULL, 39 | `Address` varchar(38) NOT NULL, 40 | `Address_Street_1` varchar(17) NOT NULL, 41 | `Address_Street_2` varchar(30) DEFAULT NULL, 42 | `Address_City` varchar(12) NOT NULL, 43 | `Address_State` char(2) NOT NULL DEFAULT '', 44 | `Address_Zip` int(11) NOT NULL, 45 | `Address_Country` varchar(30) DEFAULT NULL, 46 | `Phone` varchar(14) NOT NULL, 47 | `Email` varchar(20) NOT NULL, 48 | `Status` int(11) unsigned NOT NULL, 49 | `Website` varchar(23) NOT NULL, 50 | `LinkedIn_Profile` varchar(21) NOT NULL, 51 | `Background_Info` text NOT NULL, 52 | `Sales_Rep` int(11) unsigned NOT NULL, 53 | `Rating` decimal(4,2) NOT NULL, 54 | `Project_Type` varchar(35) DEFAULT NULL, 55 | `Project_Description` tinytext, 56 | `Proposal_Due_Date` date DEFAULT NULL, 57 | `Budget` decimal(10,2) DEFAULT NULL, 58 | `Deliverables` varchar(30) DEFAULT NULL, 59 | PRIMARY KEY (`id`), 60 | KEY `FK_SALES_REP` (`Sales_Rep`), 61 | KEY `FK_STATUS` (`Status`), 62 | CONSTRAINT `FK_SALES_REP` FOREIGN KEY (`Sales_Rep`) REFERENCES `users` (`id`), 63 | CONSTRAINT `FK_STATUS` FOREIGN KEY (`Status`) REFERENCES `contact_status` (`id`) 64 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 65 | 66 | LOCK TABLES `contact` WRITE; 67 | /*!40000 ALTER TABLE `contact` DISABLE KEYS */; 68 | 69 | INSERT INTO `contact` (`id`, `Contact_Title`, `Contact_First`, `Contact_Middle`, `Contact_Last`, `Lead_Referral_Source`, `Date_of_Initial_Contact`, `Title`, `Company`, `Industry`, `Address`, `Address_Street_1`, `Address_Street_2`, `Address_City`, `Address_State`, `Address_Zip`, `Address_Country`, `Phone`, `Email`, `Status`, `Website`, `LinkedIn_Profile`, `Background_Info`, `Sales_Rep`, `Rating`, `Project_Type`, `Project_Description`, `Proposal_Due_Date`, `Budget`, `Deliverables`) 70 | VALUES 71 | (1,NULL,'Amir',NULL,'Kahnzz','www.google .com','2014-05-09','PR Director','Barnes and Wells','PR','52 Broadway New York, NY 12345','52 Broadway',NULL,'New York','NY',12345,NULL,'(234) 432-2234','amir@pr.com',1,'www.pr.com','www.sample.com','4 years as PR Dir. Knows the biz and has wide network.',1,4.00,NULL,NULL,NULL,NULL,NULL), 72 | (2,NULL,'Dave',NULL,'Myers','Mack Truck Partner Site','2014-02-11','DEF Sales','DEF Fluids','Auto','456 Diesel St Philadelphia, PA 19308','456 Diesel St',NULL,'Philadelphia','PA',19308,NULL,'(765) 765-7755','dave@def.com',2,'www.def.com','www.sample.com','19 years in biz',2,2.50,NULL,NULL,NULL,NULL,NULL), 73 | (3,NULL,'Jason',NULL,'Wright','salesforce associate','2014-09-12','Marketing Director','Ben and Jerry\'s','Food','123 Ice Cream Way Burlington, VT 12345','123 Ice Cream Way',NULL,'Burlington','VT',12345,NULL,'(123) 432-1223','eat@benandjerrys.com',1,'www.benandjerrys.com','http://www.sample.com','Amazing ice creme company from Vermont. Sustainable practices.',1,4.00,NULL,NULL,NULL,NULL,NULL), 74 | (4,NULL,'Linda',NULL,'DeCastro','Conference','2014-01-19','Regional Sales Mgr','Pillsbury','Retail Foods','44 Reading Rd Flourtown, NJ 39485','44 Reading Rd',NULL,'Flourtown','NJ',39485,NULL,'(555) 555-5555','linda@pillsbury.com',3,'www.pillsbury.com','www.sample.com','New territory MGR',1,3.00,'New Packaging for Cookie products','Design new cookie packaging for new line of Sugar Free cookies.','2014-11-01',45000.00,'6 Proofs, multiple assets'), 75 | (5,NULL,'Sally',NULL,'Jane','CES Conference','2014-07-01','COO','Facetech','Tech','123 Tech Blvd Menlo Park, CA 12345','123 Tech Blvd',NULL,'Menlo Park','CA',12345,NULL,'(321) 321-1122','sally@facetech.com',1,'http://www.facetech.com','www.sample.com','Great contact, has a really great roadmap.',1,5.00,NULL,NULL,NULL,30000.00,NULL), 76 | (6,NULL,'Tim',NULL,'Smith','www.google.com','2014-10-10','Supply Chain Manager','Levis','Apparel','1 Blue Jean St. Corduroy, CO 12345','1 Blue Jean St.',NULL,'Corduroy','CO',12345,NULL,'(321) 321-4321','tim@levis.com',2,'www.levis.com','www.sample.com','Jeans and apparel for eastern U.S.
',1,3.50,'Shelf talkers; kiosk style displays','Set up shelf talkers for stock shelves with an end of aisle kiosk detailing the history of Levis.','2014-11-05',333000.00,'10k shelf talkers, 1500 kiosks'); 77 | 78 | /*!40000 ALTER TABLE `contact` ENABLE KEYS */; 79 | UNLOCK TABLES; 80 | 81 | 82 | # Dump of table contact_status 83 | # ------------------------------------------------------------ 84 | 85 | DROP TABLE IF EXISTS `contact_status`; 86 | 87 | CREATE TABLE `contact_status` ( 88 | `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 89 | `status` varchar(64) NOT NULL DEFAULT '', 90 | PRIMARY KEY (`id`) 91 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 92 | 93 | LOCK TABLES `contact_status` WRITE; 94 | /*!40000 ALTER TABLE `contact_status` DISABLE KEYS */; 95 | 96 | INSERT INTO `contact_status` (`id`, `status`) 97 | VALUES 98 | (1,'lead'), 99 | (2,'opportunity'), 100 | (3,'customer/won'), 101 | (4,'archive'); 102 | 103 | /*!40000 ALTER TABLE `contact_status` ENABLE KEYS */; 104 | UNLOCK TABLES; 105 | 106 | 107 | # Dump of table notes 108 | # ------------------------------------------------------------ 109 | 110 | DROP TABLE IF EXISTS `notes`; 111 | 112 | CREATE TABLE `notes` ( 113 | `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 114 | `Date` date DEFAULT NULL, 115 | `Notes` tinytext, 116 | `Is_New_Todo` int(11) unsigned NOT NULL, 117 | `Todo_Type_ID` int(11) unsigned NOT NULL, 118 | `Todo_Desc_ID` int(11) unsigned NOT NULL, 119 | `Todo_Due_Date` varchar(29) DEFAULT NULL, 120 | `Contact` int(11) unsigned NOT NULL, 121 | `Task_Status` int(11) unsigned NOT NULL, 122 | `Task_Update` varchar(51) DEFAULT NULL, 123 | `Sales_Rep` int(11) unsigned NOT NULL, 124 | PRIMARY KEY (`id`), 125 | KEY `FK_EVENT_NAME` (`Todo_Type_ID`), 126 | KEY `FK_EVENT_TYPE` (`Todo_Desc_ID`), 127 | KEY `FK_CONTACT_ID` (`Contact`), 128 | KEY `FK_SALES_ID` (`Sales_Rep`), 129 | KEY `FK_TASK_STATUS` (`Task_Status`), 130 | CONSTRAINT `FK_CONTACT_ID` FOREIGN KEY (`Contact`) REFERENCES `contact` (`id`), 131 | CONSTRAINT `FK_EVENT_NAME` FOREIGN KEY (`Todo_Type_ID`) REFERENCES `todo_type` (`id`), 132 | CONSTRAINT `FK_EVENT_TYPE` FOREIGN KEY (`Todo_Desc_ID`) REFERENCES `todo_desc` (`id`), 133 | CONSTRAINT `FK_SALES_ID` FOREIGN KEY (`Sales_Rep`) REFERENCES `users` (`id`), 134 | CONSTRAINT `FK_TASK_STATUS` FOREIGN KEY (`Task_Status`) REFERENCES `task_status` (`id`) 135 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 136 | 137 | LOCK TABLES `notes` WRITE; 138 | /*!40000 ALTER TABLE `notes` DISABLE KEYS */; 139 | 140 | INSERT INTO `notes` (`id`, `Date`, `Notes`, `Is_New_Todo`, `Todo_Type_ID`, `Todo_Desc_ID`, `Todo_Due_Date`, `Contact`, `Task_Status`, `Task_Update`, `Sales_Rep`) 141 | VALUES 142 | (1,'2014-07-11','ddddd',1,1,1,'07/23/2014 6:00pm to 8:00pm',1,1,'',1), 143 | (2,'2015-10-10','Sample Note',0,1,1,NULL,2,1,NULL,2), 144 | (3,'2015-05-21','sx',1,1,2,'07/31/2014',3,1,'',1), 145 | (4,'2014-06-01','Want to be sure to communicate weekly.',1,2,3,'07/04/2014 10:00am to 10:30am',4,1,'Ongoing',1), 146 | (5,'2014-01-31','Was introduced at textile conference.zzz',1,1,1,'04/09/2014 3:45pm to 4:45pm',5,2,'Great demo. All they needed to seal the deal.
',1), 147 | (6,'2014-11-11','Great to have this customer on board!',0,1,4,NULL,6,1,NULL,1), 148 | (7,'2017-01-27','test',0,1,2,'',3,1,'',1), 149 | (8,'2017-01-11','test123',0,1,5,NULL,6,1,NULL,1); 150 | 151 | /*!40000 ALTER TABLE `notes` ENABLE KEYS */; 152 | UNLOCK TABLES; 153 | 154 | 155 | # Dump of table roles 156 | # ------------------------------------------------------------ 157 | 158 | DROP TABLE IF EXISTS `roles`; 159 | 160 | CREATE TABLE `roles` ( 161 | `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 162 | `role` varchar(64) NOT NULL DEFAULT '', 163 | PRIMARY KEY (`id`) 164 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 165 | 166 | LOCK TABLES `roles` WRITE; 167 | /*!40000 ALTER TABLE `roles` DISABLE KEYS */; 168 | 169 | INSERT INTO `roles` (`id`, `role`) 170 | VALUES 171 | (1,'Sales Rep'), 172 | (2,'Sales Manager'), 173 | (3,'Admin'); 174 | 175 | /*!40000 ALTER TABLE `roles` ENABLE KEYS */; 176 | UNLOCK TABLES; 177 | 178 | 179 | # Dump of table task_status 180 | # ------------------------------------------------------------ 181 | 182 | DROP TABLE IF EXISTS `task_status`; 183 | 184 | CREATE TABLE `task_status` ( 185 | `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 186 | `status` varchar(64) NOT NULL DEFAULT '', 187 | PRIMARY KEY (`id`) 188 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 189 | 190 | LOCK TABLES `task_status` WRITE; 191 | /*!40000 ALTER TABLE `task_status` DISABLE KEYS */; 192 | 193 | INSERT INTO `task_status` (`id`, `status`) 194 | VALUES 195 | (1,'pending'), 196 | (2,'completed'); 197 | 198 | /*!40000 ALTER TABLE `task_status` ENABLE KEYS */; 199 | UNLOCK TABLES; 200 | 201 | 202 | # Dump of table todo_desc 203 | # ------------------------------------------------------------ 204 | 205 | DROP TABLE IF EXISTS `todo_desc`; 206 | 207 | CREATE TABLE `todo_desc` ( 208 | `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 209 | `description` varchar(64) NOT NULL DEFAULT '', 210 | PRIMARY KEY (`id`) 211 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 212 | 213 | LOCK TABLES `todo_desc` WRITE; 214 | /*!40000 ALTER TABLE `todo_desc` DISABLE KEYS */; 215 | 216 | INSERT INTO `todo_desc` (`id`, `description`) 217 | VALUES 218 | (1,'Follow Up Email'), 219 | (2,'Phone Call'), 220 | (3,'Lunch Meeting'), 221 | (4,'Tech Demo'), 222 | (5,'Meetup'), 223 | (6,'Conference'), 224 | (7,'Others'); 225 | 226 | /*!40000 ALTER TABLE `todo_desc` ENABLE KEYS */; 227 | UNLOCK TABLES; 228 | 229 | 230 | # Dump of table todo_type 231 | # ------------------------------------------------------------ 232 | 233 | DROP TABLE IF EXISTS `todo_type`; 234 | 235 | CREATE TABLE `todo_type` ( 236 | `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 237 | `type` varchar(64) NOT NULL DEFAULT '', 238 | PRIMARY KEY (`id`) 239 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 240 | 241 | LOCK TABLES `todo_type` WRITE; 242 | /*!40000 ALTER TABLE `todo_type` DISABLE KEYS */; 243 | 244 | INSERT INTO `todo_type` (`id`, `type`) 245 | VALUES 246 | (1,'task'), 247 | (2,'meeting'); 248 | 249 | /*!40000 ALTER TABLE `todo_type` ENABLE KEYS */; 250 | UNLOCK TABLES; 251 | 252 | 253 | # Dump of table user_status 254 | # ------------------------------------------------------------ 255 | 256 | DROP TABLE IF EXISTS `user_status`; 257 | 258 | CREATE TABLE `user_status` ( 259 | `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 260 | `status` varchar(64) NOT NULL DEFAULT '', 261 | PRIMARY KEY (`id`) 262 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 263 | 264 | LOCK TABLES `user_status` WRITE; 265 | /*!40000 ALTER TABLE `user_status` DISABLE KEYS */; 266 | 267 | INSERT INTO `user_status` (`id`, `status`) 268 | VALUES 269 | (1,'active'), 270 | (2,'inactive'), 271 | (3,'pending approval'); 272 | 273 | /*!40000 ALTER TABLE `user_status` ENABLE KEYS */; 274 | UNLOCK TABLES; 275 | 276 | 277 | # Dump of table users 278 | # ------------------------------------------------------------ 279 | 280 | DROP TABLE IF EXISTS `users`; 281 | 282 | CREATE TABLE `users` ( 283 | `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 284 | `Name_Title` varchar(30) DEFAULT NULL, 285 | `Name_First` varchar(6) NOT NULL, 286 | `Name_Middle` varchar(30) DEFAULT NULL, 287 | `Name_Last` varchar(8) NOT NULL, 288 | `Email` varchar(16) NOT NULL, 289 | `Password` varchar(9) NOT NULL, 290 | `User_Roles` int(11) unsigned NOT NULL, 291 | `User_Status` int(11) unsigned NOT NULL, 292 | PRIMARY KEY (`id`), 293 | KEY `FK_USER_STATUS` (`User_Status`), 294 | KEY `FK_ROLE` (`User_Roles`), 295 | CONSTRAINT `FK_ROLE` FOREIGN KEY (`User_Roles`) REFERENCES `roles` (`id`), 296 | CONSTRAINT `FK_USER_STATUS` FOREIGN KEY (`User_Status`) REFERENCES `user_status` (`id`) 297 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 298 | 299 | LOCK TABLES `users` WRITE; 300 | /*!40000 ALTER TABLE `users` DISABLE KEYS */; 301 | 302 | INSERT INTO `users` (`id`, `Name_Title`, `Name_First`, `Name_Middle`, `Name_Last`, `Email`, `Password`, `User_Roles`, `User_Status`) 303 | VALUES 304 | (1,NULL,'Johnny',NULL,'Rep','rep@test.com','123456',1,1), 305 | (2,NULL,'Mary',NULL,'Rep','rep2@test.com','123456',1,1), 306 | (3,NULL,'Suzy',NULL,'Manager','manager@test.com','123456',2,1), 307 | (4,NULL,'Sales',NULL,'Manager1','sm@sm.com','123456',2,1), 308 | (5,NULL,'Rich',NULL,'C','test@test.com','123456',1,1); 309 | 310 | /*!40000 ALTER TABLE `users` ENABLE KEYS */; 311 | UNLOCK TABLES; 312 | 313 | 314 | 315 | /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; 316 | /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; 317 | /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; 318 | /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; 319 | /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; 320 | /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; 321 | -------------------------------------------------------------------------------- /design/menus/custom-crm-managers-menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phpcontrols/phpgrid-custom-crm/6d0c6836844495dec1aefcc933779944594fb5ae/design/menus/custom-crm-managers-menu.png -------------------------------------------------------------------------------- /design/menus/custom-crm-salesrep-menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phpcontrols/phpgrid-custom-crm/6d0c6836844495dec1aefcc933779944594fb5ae/design/menus/custom-crm-salesrep-menu.png -------------------------------------------------------------------------------- /design/mockups/Manager view sales pipeline - my sales reps.bmml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 0 6 | My%20Sales%20Reps%2C%20Tasks%2C%20Contacts 7 | 8 | 9 | 10 | 11 | true 12 | square 13 | true 14 | false 15 | Sales%20Rep%20%5E%2C%20Name%20First%20%5Ev%2C%20Name%20Last%2C%20Email%20v%0AJohnny%20Rep%2C%20John%2C%20Rep%2C%20jr@example.com%0A%20%0A%20%0A%20%0A%20%0A%20%0AMarco%20Botton%2C%20Marco%2C%20Botton%2C%20mm@example.com%0AMariah%20Maclachlan%2C%20Mar%2C%20Maclachlan%2C%20mm2@example.com%0A%20%0A%20%0A%20%0A%20%0AValerie%20Liberty%5CrHead%20Chef%2C%20%3A%29%2C%20Val%2C%20%5Bx%5D%0AGuido%20Jack%20Guilizzoni%2C%206%2C%20The%20Guids%2C%20%5B%5D%0A%7B65L%2C%200R%2C%2035%2C%200C%7D 16 | true 17 | true 18 | 19 | 20 | 21 | 22 | true 23 | 14 24 | Contacts 25 | 26 | 27 | 28 | 29 | 0 30 | none 31 | v%20Giacomo%20Guilizzoni%0A.-%20Note%201%2C%20todo%2C%20need%20to%20set%20up%20call%20%0A.-%20Note%202%2C%20anothe%2C%20need%20to%20follow%20up%0A.-%20Note%203%2C%20OK%2C%20almost%20closing%0A.-%20Note%204%2C%20todo%2C%20budget%20discussion%0A.-%20Note%205%2C%20todo%2C%20another%20one 32 | 33 | 34 | 35 | 36 | 0 37 | none 38 | v%20Better%20Half%0A.-%20Note%201%2C%20todo%2C%20need%20to%20set%20up%20call%20%0A.-%20Note%202%2C%20anothe%2C%20need%20to%20follow%20up%0A.-%20Note%203%2C%20OK%2C%20almost%20closing%0A.-%20Note%204%2C%20todo%2C%20budget%20discussion%0A.-%20Note%205%2C%20todo%2C%20another%20one 39 | 40 | 41 | 42 | 43 | true 44 | 14 45 | Contacts 46 | 47 | 48 | 49 | 50 | My%20Custom%20CRM%20-%20Sales%20Pipeline 51 | 52 | 53 | 54 | 55 | You%20can%20manage%20your%20sales%20team%20and%20contacts%20here. 56 | 57 | 58 | 59 | 60 | right 61 | Sales%20Rep%20-%3E%20Contact%0Asubgrid 62 | 63 | 64 | 65 | -------------------------------------------------------------------------------- /design/mockups/custom crm mockup.bmml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 1 6 | Tasks%2C%20Leads%2C%20Opportunities%2C%20Customers/Won 7 | 8 | 9 | 10 | 11 | true 12 | square 13 | true 14 | false 15 | Contact%20Name%20%5E%2C%20Age%20%5Ev%2C%20Nickname%2C%20Employee%20v%0AGiacomo%20Guilizzoni%20Founder%20%26%20CEO%2C%2037%2C%20Peldi%2C%20%28o%29%0A%20%0A%20%0A%20%0A%20%0A%20%0AMarco%20Botton%5CrTuttofare%2C%2034%2C%20%2C%20%5Bx%5D%0AMariah%20Maclachlan%5CrBetter%20Half%2C%2037%2C%20Patata%2C%20%5B-%5D%0A%20%0A%20%0A%20%0A%20%0A%20%0AValerie%20Liberty%5CrHead%20Chef%2C%20%3A%29%2C%20Val%2C%20%5Bx%5D%0AGuido%20Jack%20Guilizzoni%2C%206%2C%20The%20Guids%2C%20%5B%5D%0A%7B65L%2C%200R%2C%2035%2C%200C%7D 16 | true 17 | true 18 | 19 | 20 | 21 | 22 | My%20Custom%20CRM 23 | 24 | 25 | 26 | 27 | Leads 28 | 29 | 30 | 31 | 32 | true 33 | 14 34 | Notes 35 | 36 | 37 | 38 | 39 | 0 40 | none 41 | v%20Giacomo%20Guilizzoni%0A.-%20Note%201%2C%20todo%2C%20need%20to%20set%20up%20call%20%0A.-%20Note%202%2C%20anothe%2C%20need%20to%20follow%20up%0A.-%20Note%203%2C%20OK%2C%20almost%20closing%0A.-%20Note%204%2C%20todo%2C%20budget%20discussion%0A.-%20Note%205%2C%20todo%2C%20another%20one 42 | 43 | 44 | 45 | 46 | 0 47 | none 48 | v%20Better%20Half%0A.-%20Note%201%2C%20todo%2C%20need%20to%20set%20up%20call%20%0A.-%20Note%202%2C%20anothe%2C%20need%20to%20follow%20up%0A.-%20Note%203%2C%20OK%2C%20almost%20closing%0A.-%20Note%204%2C%20todo%2C%20budget%20discussion%0A.-%20Note%205%2C%20todo%2C%20another%20one 49 | 50 | 51 | 52 | 53 | true 54 | 14 55 | Notes 56 | 57 | 58 | 59 | 60 | right 61 | Contact%20-%3E%20Notes%20%0Asubgrid 62 | 63 | 64 | 65 | 66 | right 67 | Contact%20-%3E%20Notes%20%0Asubgrid 68 | 69 | 70 | 71 | -------------------------------------------------------------------------------- /design/mockups/managers view - contacts.bmml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 2 6 | My%20Sales%20Reps%2C%20Tasks%2C%20Contacts 7 | 8 | 9 | 10 | 11 | true 12 | square 13 | true 14 | false 15 | Sales%20Rep%20%5E%2C%20Name%20First%20%5Ev%2C%20Name%20Last%2C%20Email%20v%0AGiacomo%20Guilizzoni%2C%20Giacomo%2C%20Guilizzoni%2C%20ggs@example.com%0A%20%0A%20%0A%20%0A%20%0A%20%0AMarco%20Botton%2C%20Marco%2C%20Botton%2C%20mm@example.com%0AMariah%20Maclachlan%2C%20Mar%2C%20Maclachlan%2C%20mm2@example.com%0A%20%0A%20%0A%20%0A%20%0AValerie%20Liberty%5CrHead%20Chef%2C%20%3A%29%2C%20Val%2C%20%5Bx%5D%0AGuido%20Jack%20Guilizzoni%2C%206%2C%20The%20Guids%2C%20%5B%5D%0A%7B65L%2C%200R%2C%2035%2C%200C%7D 16 | true 17 | true 18 | 19 | 20 | 21 | 22 | true 23 | 14 24 | Notes 25 | 26 | 27 | 28 | 29 | 0 30 | none 31 | v%20Giacomo%20Guilizzoni%0A.-%20Note%201%2C%20todo%2C%20need%20to%20set%20up%20call%20%0A.-%20Note%202%2C%20anothe%2C%20need%20to%20follow%20up%0A.-%20Note%203%2C%20OK%2C%20almost%20closing%0A.-%20Note%204%2C%20todo%2C%20budget%20discussion%0A.-%20Note%205%2C%20todo%2C%20another%20one 32 | 33 | 34 | 35 | 36 | 0 37 | none 38 | v%20Mariah%20Maclachlan%0A.-%20Note%201%2C%20todo%2C%20need%20to%20set%20up%20call%20%0A.-%20Note%202%2C%20anothe%2C%20need%20to%20follow%20up%0A.-%20Note%203%2C%20OK%2C%20almost%20closing%0A.-%20Note%204%2C%20todo%2C%20budget%20discussion%0A.-%20Note%205%2C%20todo%2C%20another%20one 39 | 40 | 41 | 42 | 43 | true 44 | 14 45 | Notes 46 | 47 | 48 | 49 | 50 | My%20Custom%20CRM%20-%20Sales%20Pipeline 51 | 52 | 53 | 54 | 55 | You%20can%20manage%20your%20sales%20team%20and%20contacts%20here. 56 | 57 | 58 | 59 | 60 | right 61 | Contacts%20-%3E%20Notes%20%0Asubgrid 62 | 63 | 64 | 65 | -------------------------------------------------------------------------------- /design/screens/CRM managers view.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phpcontrols/phpgrid-custom-crm/6d0c6836844495dec1aefcc933779944594fb5ae/design/screens/CRM managers view.png -------------------------------------------------------------------------------- /design/screens/CRM sales team view.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phpcontrols/phpgrid-custom-crm/6d0c6836844495dec1aefcc933779944594fb5ae/design/screens/CRM sales team view.png -------------------------------------------------------------------------------- /design/screens/Manager-sales-reps-crm-screen-mockup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phpcontrols/phpgrid-custom-crm/6d0c6836844495dec1aefcc933779944594fb5ae/design/screens/Manager-sales-reps-crm-screen-mockup.png -------------------------------------------------------------------------------- /design/screens/Managers sales rep crm screen mockup.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phpcontrols/phpgrid-custom-crm/6d0c6836844495dec1aefcc933779944594fb5ae/design/screens/Managers sales rep crm screen mockup.psd -------------------------------------------------------------------------------- /design/screens/sales team crm screen mockup.png.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phpcontrols/phpgrid-custom-crm/6d0c6836844495dec1aefcc933779944594fb5ae/design/screens/sales team crm screen mockup.png.psd -------------------------------------------------------------------------------- /design/screens/sales-team-crm-screen-mockup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phpcontrols/phpgrid-custom-crm/6d0c6836844495dec1aefcc933779944594fb5ae/design/screens/sales-team-crm-screen-mockup.png -------------------------------------------------------------------------------- /inc/footer.php: -------------------------------------------------------------------------------- 1 |




2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /inc/head.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | My Custom CRM 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /inc/menu.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /inc/tmp.php: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | 9 | 10 | | Custom CRM 11 | 48 | 49 | 50 | 51 |

Custom CRM

52 | 61 | 62 |

Dashboard

63 | 66 | 67 | 68 | -------------------------------------------------------------------------------- /index.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PHP FOR BEGINNERS: BUILD YOUR FIRST SIMPLE CRM FROM SCRATCH 6 | 7 | 8 | 9 |

PHP FOR BEGINNERS: BUILD YOUR FIRST SIMPLE CRM FROM SCRATCH

10 | 11 |
12 |

13 | Customer Relationship Management (CRM) is a system that manages customer interactions and data throughout the customer lifecycle between the customer and the company across different channels. 14 |

15 | 16 |

17 | In the simple CRM system demo, salespeople can: 18 |

19 | 20 | 27 | 28 |

29 | Sales managers will be able to: 30 |

31 | 32 | 37 |
38 | 39 |
40 |

Visit Demo:

41 |
42 | Sales | Manager 43 |
44 |
45 | 46 | 47 | -------------------------------------------------------------------------------- /managers/pipeline.php: -------------------------------------------------------------------------------- 1 | 7 | 8 |

My Custom CRM - Sales Pipeline

9 | 10 |
11 |

Welcome! Manager

12 |
13 | You can manage your sales team and contacts here. 14 |
15 |
16 |
17 | 18 | 25 |
26 | 27 | set_query_filter(" user_roles = 1 "); 32 | $dg->set_col_hidden('id')->set_col_hidden('User_Roles')->set_col_hidden('User_Status')->set_col_hidden('Password'); 33 | $dg->set_caption('Sales Rep'); 34 | 35 | $sdg = new C_DataGrid("SELECT id, contact_last, contact_title, company, industry, status, budget, sales_rep, rating FROM contact", "id", "contact"); 36 | $sdg->set_col_hidden('id')->set_col_hidden('sales_rep', false); 37 | $sdg->set_col_edittype('sales_rep', 'select', "select id, concat(name_first, ' ', name_last) from users"); 38 | $sdg->set_col_currency('budget'); 39 | $sdg->set_scroll(true); 40 | 41 | //$sdg->set_col_format('rating', 'rating'); 42 | 43 | $gridComplete = <<add_event("jqGridLoadComplete", $gridComplete); 54 | $dg->set_subgrid($sdg, 'sales_rep', 'id'); 55 | break; 56 | 57 | case "notes": 58 | $dg = new C_DataGrid("SELECT id, Todo_Desc_ID, Todo_Due_Date, Contact, Task_Status, Sales_Rep FROM notes", "id", "notes"); 59 | $dg->set_query_filter(" Todo_Due_Date != '' "); 60 | $dg->set_col_hidden('id')->set_caption('Tasks'); 61 | $dg->set_col_edittype('Todo_Desc_ID', 'select', "select id, description from todo_desc"); 62 | $dg->set_col_edittype('Contact', 'select', "select id, concat(contact_first, ' ', contact_last) from contact"); 63 | $dg->set_col_edittype('Task_Status', 'select', "select id, status from task_status"); 64 | $dg->set_col_edittype('Sales_Rep', 'select', "select id, concat(name_first, ' ', name_last) from users"); 65 | break; 66 | 67 | case "contact": 68 | $dg = new C_DataGrid("SELECT id, contact_last, contact_title, company, industry, status, budget, sales_rep, rating FROM contact", "id", "contact"); 69 | $dg->set_col_hidden('id'); 70 | $dg->set_col_edittype('sales_rep', 'select', "select id, concat(name_first, ' ', name_last) from users"); 71 | $dg->set_col_currency('budget'); 72 | $dg->enable_search(true); 73 | 74 | $sdg = new C_DataGrid("SELECT * FROM notes", "id", "notes"); 75 | // $sdg->set_query_filter(" Sales_Rep = 1 "); 76 | $sdg->set_col_hidden('id', false)->set_col_hidden('Contact', false); 77 | 78 | $sdg->set_col_edittype('Add_Task_or_Meeting', 'select', 'Select id, status From task_status'); 79 | $sdg->set_col_edittype('Task_Status', 'select', 'Select id, status From task_status'); 80 | $sdg->set_col_edittype('Is_New_Todo', 'select', '0:No;1:Yes'); 81 | $sdg->set_col_edittype('Todo_Type_ID', 'select', 'Select id, type From todo_type'); 82 | $sdg->set_col_edittype('Todo_Desc_ID', 'select', 'Select id, description From todo_desc'); 83 | $sdg->set_col_edittype('Sales_Rep', 'select', "select id, concat(name_first, ' ', name_last) from users"); 84 | $sdg->enable_edit(); 85 | 86 | $dg->set_subgrid($sdg, 'Contact', 'id'); 87 | break; 88 | } 89 | 90 | $dg->enable_edit(); 91 | $dg -> display(); 92 | ?> 93 | 94 | 95 | -------------------------------------------------------------------------------- /phpGrid/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | */ 3 | !.gitignore -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | ## phpGrid Custom CRM 2 | 3 | Companion files for the online tutorial. 4 | 5 | Requires external library phpGrid from [phpgrid.com](http://phpgrid.com/download). Place phpGrid files in "phpGrid" folder. 6 | -------------------------------------------------------------------------------- /sales/customerwon.php: -------------------------------------------------------------------------------- 1 | 5 | 6 |

My Custom CRM

7 | 8 | 12 | 13 |

Customers / Won

14 | set_query_filter(" Status = 3 && sales_rep = 1 "); 18 | 19 | $dg->set_col_hidden('id')->set_col_hidden('Status')->set_caption('Customers'); 20 | $dg->set_col_hidden('Date_of_Initial_Contact'); 21 | $dg->set_col_hidden('Contact_Title')->set_col_hidden('Contact_Middle')->set_col_hidden('Lead_Referral_Source'); 22 | $dg->set_col_hidden('Address')->set_col_hidden('Address_Street_1')->set_col_hidden('Address_Street_2'); 23 | $dg->set_col_hidden('Address_City')->set_col_hidden('Address_State')->set_col_hidden('Address_Zip')->set_col_hidden('Address_Country'); 24 | $dg->set_col_hidden('LinkedIn_Profile')->set_col_hidden('Background_Info'); 25 | $dg->set_col_hidden('Sales_Rep')->set_col_hidden('Project_Description')->set_col_hidden('Proposal_Due_Date')->set_col_hidden('Deliverables'); 26 | $dg->set_col_format("Email", "email"); 27 | $dg->set_col_currency('Budget'); 28 | $dg -> set_col_link("Website"); 29 | $dg->enable_edit('FORM', 'CRUD'); 30 | 31 | 32 | $sdg = new C_DataGrid("SELECT * FROM notes", "id", "notes"); 33 | $sdg->set_query_filter(" Sales_Rep = 1 "); 34 | $sdg->set_col_hidden('id', false)->set_col_hidden('Contact', false)->set_col_hidden('Sales_Rep', false);; 35 | $sdg->set_col_edittype('Add_Task_or_Meeting', 'select', 'Select id, status From task_status'); 36 | $sdg->set_col_edittype('Task_Status', 'select', 'Select id, status From task_status'); 37 | $sdg->set_col_edittype('Is_New_Todo', 'select', '0:No;1:Yes'); 38 | $sdg->set_col_edittype('Todo_Type_ID', 'select', 'Select id, type From todo_type'); 39 | $sdg->set_col_edittype('Todo_Desc_ID', 'select', 'Select id, description From todo_desc'); 40 | $sdg->set_col_default('Sales_Rep', 1); // TODO: obtain from SESSION 41 | $sdg->enable_edit(); 42 | 43 | 44 | $dg->set_subgrid($sdg, 'Contact', 'id'); 45 | $dg -> display(); 46 | ?> 47 | 48 | 49 | -------------------------------------------------------------------------------- /sales/leads.php: -------------------------------------------------------------------------------- 1 | 5 | 6 |

My Custom CRM

7 | 8 | 12 | 13 |

My Leads

14 | set_query_filter(" status = 1 && sales_rep = 1 ")->set_caption('Contact'); 17 | $dg->set_col_hidden('id')->set_col_hidden('Status')->set_col_hidden('sales_rep', false); 18 | $dg->set_col_hidden('lead_referral_source, title, industry, background_info, rating, project_type, project_description, budget'); 19 | $dg -> set_col_format("email", "email"); 20 | $dg->set_col_edittype('status', 'select', 'SELECT ID, status FROM contact_status'); 21 | $dg -> set_col_link("website"); 22 | $dg->enable_edit(); 23 | 24 | $sdg = new C_DataGrid("SELECT * FROM notes", "id", "notes"); 25 | $sdg->set_query_filter(" Sales_Rep = 1 "); 26 | $sdg->set_col_hidden('id')->set_col_hidden('Contact', false)->set_col_hidden('Sales_Rep', false); 27 | $sdg->set_col_edittype('Add_Task_or_Meeting', 'select', 'Select id, status From task_status'); 28 | $sdg->set_col_edittype('Task_Status', 'select', 'Select id, status From task_status'); 29 | $sdg->set_col_edittype('Is_New_Todo', 'select', '0:No;1:Yes'); 30 | $sdg->set_col_edittype('Todo_Type_ID', 'select', 'Select id, type From todo_type'); 31 | $sdg->set_col_edittype('Todo_Desc_ID', 'select', 'Select id, description From todo_desc'); 32 | //$sdg->set_col_default('Contact', ###current####); 33 | $sdg->set_col_default('Sales_Rep', 1); // TODO: obtain from SESSION 34 | $sdg->enable_edit(); 35 | 36 | 37 | $dg->set_subgrid($sdg, 'Contact', 'id'); 38 | $dg -> display(); 39 | ?> 40 | 41 | -------------------------------------------------------------------------------- /sales/opportunities.php: -------------------------------------------------------------------------------- 1 | 5 | 6 |

My Custom CRM

7 | 8 | 12 | 13 |

Opportunities

14 | set_query_filter(" Status = 2 && sales_rep = 1 "); 18 | $dg->set_col_hidden('id')->set_col_hidden('Status')->set_caption('Contact'); 19 | $dg->set_col_hidden('Date_of_Initial_Contact'); 20 | $dg->set_col_hidden('Contact_Title')->set_col_hidden('Contact_Middle')->set_col_hidden('Lead_Referral_Source'); 21 | $dg->set_col_hidden('Address')->set_col_hidden('Address_Street_1')->set_col_hidden('Address_Street_2'); 22 | $dg->set_col_hidden('Address_City')->set_col_hidden('Address_State')->set_col_hidden('Address_Zip')->set_col_hidden('Address_Country'); 23 | $dg->set_col_hidden('LinkedIn_Profile')->set_col_hidden('Background_Info'); 24 | $dg->set_col_hidden('Sales_Rep')->set_col_hidden('Project_Description')->set_col_hidden('Proposal_Due_Date')->set_col_hidden('Deliverables'); 25 | $dg->set_col_format("Email", "email"); 26 | $dg->set_col_currency('Budget'); 27 | $dg -> set_col_link("Website"); 28 | $dg->enable_edit('FORM', 'CRUD'); 29 | 30 | 31 | $sdg = new C_DataGrid("SELECT * FROM notes", "id", "notes"); 32 | $sdg->set_query_filter(" Sales_Rep = 1 "); 33 | $sdg->set_col_hidden('id', false)->set_col_hidden('Contact', false)->set_col_hidden('Sales_Rep', false); 34 | $sdg->set_col_edittype('Add_Task_or_Meeting', 'select', 'Select id, status From task_status'); 35 | $sdg->set_col_edittype('Task_Status', 'select', 'Select id, status From task_status'); 36 | $sdg->set_col_edittype('Is_New_Todo', 'select', '0:No;1:Yes'); 37 | $sdg->set_col_edittype('Todo_Type_ID', 'select', 'Select id, type From todo_type'); 38 | $sdg->set_col_edittype('Todo_Desc_ID', 'select', 'Select id, description From todo_desc'); 39 | $sdg->set_col_default('Sales_Rep', 1); // TODO: obtain from SESSION 40 | $sdg->enable_edit(); 41 | 42 | 43 | $dg->set_subgrid($sdg, 'Contact', 'id'); 44 | $dg -> display(); 45 | ?> 46 | 47 | 48 | -------------------------------------------------------------------------------- /sales/tasks-completed.php: -------------------------------------------------------------------------------- 1 | 5 | 6 |

My Custom CRM

7 | 8 | 12 | 13 |

My Current Tasks | My Completed Tasks

14 | 15 | set_query_filter(" Sales_Rep = 1 && Task_Status = 2"); 18 | 19 | $dg->set_col_hidden('ID')->set_col_hidden('Sales_Rep', false)->set_caption('Completed'); 20 | 21 | $dg->set_col_title('Todo_Type_ID', 'Type'); 22 | $dg->set_col_title('Todo_Desc_ID', 'Description'); 23 | $dg->set_col_title('Todo_Due_Date', 'Due Date'); 24 | 25 | $dg->set_col_edittype('Task_Status', 'select', 'SELECT ID, status FROM task_status'); 26 | $dg->set_col_edittype('Contact', 'select', 'SELECT ID, Contact_Last FROM contact'); 27 | $dg->set_col_edittype('Todo_Type_ID', 'select', 'SELECT ID, type FROM todo_type'); 28 | $dg->set_col_edittype('Todo_Desc_ID', 'select', 'SELECT ID, description FROM todo_desc'); 29 | 30 | $dg -> display(); 31 | ?> 32 | 33 | 34 | -------------------------------------------------------------------------------- /sales/tasks.php: -------------------------------------------------------------------------------- 1 | 5 | 6 |

My Custom CRM

7 | 8 | 12 | 13 |

My Current Tasks | My Completed Tasks

14 | 15 | set_query_filter(" sales_rep = 1 && task_status != 2"); 18 | 19 | $dg->set_col_hidden('ID')->set_col_hidden('sales_rep', false)->set_caption('Current'); 20 | 21 | $dg->set_col_title('todo_type_id', 'Type'); 22 | $dg->set_col_title('todo_desc_id', 'Description'); 23 | $dg->set_col_title('todo_due_date', 'Due Date'); 24 | 25 | $dg->set_col_edittype('task_status', 'select', 'SELECT ID, status FROM task_status'); 26 | $dg->set_col_edittype('contact', 'select', 'SELECT ID, Contact_Last FROM contact'); 27 | $dg->set_col_edittype('todo_type_id', 'select', 'SELECT ID, Type FROM todo_type'); 28 | $dg->set_col_edittype('todo_desc_id', 'select', 'SELECT ID, Description FROM todo_desc'); 29 | 30 | $dg->add_column("actions", array('name'=>'actions', 31 | 'index'=>'actions', 32 | 'width'=>'70', 33 | 'formatter'=>'actions', 34 | 'formatoptions'=>array('keys'=>true, 'editbutton'=>true, 'delbutton'=>false)),'Actions'); 35 | 36 | $dg->set_col_readonly('Date, contact, todo_type_id, todo_desc_id, sales_rep, todo_due_date'); 37 | 38 | $dg->enable_edit('INLINE'); 39 | $dg -> display(); 40 | ?> 41 | 42 | 43 | -------------------------------------------------------------------------------- /template.php: -------------------------------------------------------------------------------- 1 | 6 | 7 |

My Custom CRM

8 | 9 | 12 | 13 |

Section Title

14 | 17 | 18 | --------------------------------------------------------------------------------