PageRenderTime 54ms CodeModel.GetById 25ms RepoModel.GetById 0ms app.codeStats 0ms

/app/protected/modules/reports/data/ReportsDemoDataMaker.php

https://bitbucket.org/zurmo/zurmo/
PHP | 401 lines | 306 code | 52 blank | 43 comment | 0 complexity | c71de8ebcafcc13d7bed8ff0bcb08574 MD5 | raw file
Possible License(s): AGPL-3.0, BSD-3-Clause, GPL-2.0, LGPL-3.0, LGPL-2.1, BSD-2-Clause
  1. <?php
  2. /*********************************************************************************
  3. * Zurmo is a customer relationship management program developed by
  4. * Zurmo, Inc. Copyright (C) 2015 Zurmo Inc.
  5. *
  6. * Zurmo is free software; you can redistribute it and/or modify it under
  7. * the terms of the GNU Affero General Public License version 3 as published by the
  8. * Free Software Foundation with the addition of the following permission added
  9. * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
  10. * IN WHICH THE COPYRIGHT IS OWNED BY ZURMO, ZURMO DISCLAIMS THE WARRANTY
  11. * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
  12. *
  13. * Zurmo is distributed in the hope that it will be useful, but WITHOUT
  14. * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  15. * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
  16. * details.
  17. *
  18. * You should have received a copy of the GNU Affero General Public License along with
  19. * this program; if not, see http://www.gnu.org/licenses or write to the Free
  20. * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
  21. * 02110-1301 USA.
  22. *
  23. * You can contact Zurmo, Inc. with a mailing address at 27 North Wacker Drive
  24. * Suite 370 Chicago, IL 60606. or at email address contact@zurmo.com.
  25. *
  26. * The interactive user interfaces in original and modified versions
  27. * of this program must display Appropriate Legal Notices, as required under
  28. * Section 5 of the GNU Affero General Public License version 3.
  29. *
  30. * In accordance with Section 7(b) of the GNU Affero General Public License version 3,
  31. * these Appropriate Legal Notices must retain the display of the Zurmo
  32. * logo and Zurmo copyright notice. If the display of the logo is not reasonably
  33. * feasible for technical reasons, the Appropriate Legal Notices must display the words
  34. * "Copyright Zurmo Inc. 2015. All rights reserved".
  35. ********************************************************************************/
  36. /**
  37. * Class that builds demo accounts.
  38. */
  39. class ReportsDemoDataMaker extends DemoDataMaker
  40. {
  41. protected $ratioToLoad = 1;
  42. public static function getDependencies()
  43. {
  44. return array('contacts');
  45. }
  46. public function makeAll(& $demoDataHelper)
  47. {
  48. assert('$demoDataHelper instanceof DemoDataHelper');
  49. static::makeNewLeadsReport();
  50. static::makeActiveCustomerEmailList();
  51. static::makeClosedWonOpportunitiesByOwner();
  52. static::makeClosedWonOpportunitiesByMonth();
  53. static::makeOpportunitiesByStage();
  54. static::makeMeetingsCategoryAndMonthStartTimeByOwner();
  55. }
  56. public static function makeNewLeadsReport()
  57. {
  58. $leadStateIdsAndNames = LeadsUtil::getLeadStateDataFromStartingStateOnAndKeyedById();
  59. $report = new Report();
  60. $report->setDescription ('A report showing new leads');
  61. $report->setModuleClassName('ContactsModule');
  62. $report->setName ('New Leads Report');
  63. $report->setType (Report::TYPE_ROWS_AND_COLUMNS);
  64. $report->setOwner (Yii::app()->user->userModel);
  65. $report->setFiltersStructure('1 AND 2');
  66. $report->setCurrencyConversionType(Report::CURRENCY_CONVERSION_TYPE_BASE);
  67. $filter = new FilterForReportForm('ContactsModule', 'Contact', $report->getType());
  68. $filter->attributeIndexOrDerivedType = 'createdDateTime';
  69. $filter->valueType = MixedDateTypesSearchFormAttributeMappingRules::TYPE_LAST_7_DAYS;
  70. $filter->availableAtRunTime = true;
  71. $report->addFilter($filter);
  72. $filterValue = array();
  73. foreach (array_keys($leadStateIdsAndNames) as $value)
  74. {
  75. $filterValue[] = (string) $value;
  76. }
  77. $filter = new FilterForReportForm('ContactsModule', 'Contact', $report->getType());
  78. $filter->attributeIndexOrDerivedType = 'state';
  79. $filter->value = $filterValue;
  80. $filter->operator = OperatorRules::TYPE_ONE_OF;
  81. $report->addFilter($filter);
  82. $displayAttribute = new DisplayAttributeForReportForm('ContactsModule', 'Contact', $report->getType());
  83. $displayAttribute->attributeIndexOrDerivedType = 'FullName';
  84. $report->addDisplayAttribute($displayAttribute);
  85. $displayAttribute = new DisplayAttributeForReportForm('ContactsModule', 'Contact', $report->getType());
  86. $displayAttribute->attributeIndexOrDerivedType = 'source';
  87. $report->addDisplayAttribute($displayAttribute);
  88. $displayAttribute = new DisplayAttributeForReportForm('ContactsModule', 'Contact', $report->getType());
  89. $displayAttribute->attributeIndexOrDerivedType = 'officePhone';
  90. $report->addDisplayAttribute($displayAttribute);
  91. $displayAttribute = new DisplayAttributeForReportForm('ContactsModule', 'Contact', $report->getType());
  92. $displayAttribute->attributeIndexOrDerivedType = 'primaryEmail___emailAddress';
  93. $report->addDisplayAttribute($displayAttribute);
  94. $savedReport = new SavedReport();
  95. SavedReportToReportAdapter::resolveReportToSavedReport($report, $savedReport);
  96. //set explicit
  97. $saved = $savedReport->save();
  98. assert('$saved');
  99. $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::
  100. makeBySecurableItem($savedReport);
  101. $explicitReadWriteModelPermissions->addReadWritePermitable(Group::getByName(Group::EVERYONE_GROUP_NAME));
  102. $success = ExplicitReadWriteModelPermissionsUtil::
  103. resolveExplicitReadWriteModelPermissions($savedReport, $explicitReadWriteModelPermissions);
  104. assert('$success');
  105. $saved = $savedReport->save();
  106. assert('$saved');
  107. }
  108. public static function makeActiveCustomerEmailList()
  109. {
  110. $contactStateIdsAndNames = ContactsUtil::getContactStateDataFromStartingStateOnAndKeyedById();
  111. $report = new Report();
  112. $report->setDescription ('A report showing active customers who have not opted out of receiving emails');
  113. $report->setModuleClassName('ContactsModule');
  114. $report->setName ('Active Customer Email List');
  115. $report->setType (Report::TYPE_ROWS_AND_COLUMNS);
  116. $report->setOwner (Yii::app()->user->userModel);
  117. $report->setFiltersStructure('1 AND 2 AND 3');
  118. $report->setCurrencyConversionType(Report::CURRENCY_CONVERSION_TYPE_BASE);
  119. $filter = new FilterForReportForm('ContactsModule', 'Contact', $report->getType());
  120. $filter->attributeIndexOrDerivedType = 'account___type';
  121. $filter->value = 'Customer';
  122. $filter->operator = OperatorRules::TYPE_EQUALS;
  123. $report->addFilter($filter);
  124. $filter = new FilterForReportForm('ContactsModule', 'Contact', $report->getType());
  125. $filter->attributeIndexOrDerivedType = 'state';
  126. $filter->value = array_keys($contactStateIdsAndNames);
  127. $filter->operator = OperatorRules::TYPE_ONE_OF;
  128. $report->addFilter($filter);
  129. $filter = new FilterForReportForm('ContactsModule', 'Contact', $report->getType());
  130. $filter->attributeIndexOrDerivedType = 'primaryEmail___optOut';
  131. $filter->value = false;
  132. $filter->operator = OperatorRules::TYPE_EQUALS;
  133. $report->addFilter($filter);
  134. $displayAttribute = new DisplayAttributeForReportForm('ContactsModule', 'Contact', $report->getType());
  135. $displayAttribute->attributeIndexOrDerivedType = 'FullName';
  136. $report->addDisplayAttribute($displayAttribute);
  137. $displayAttribute = new DisplayAttributeForReportForm('ContactsModule', 'Contact', $report->getType());
  138. $displayAttribute->attributeIndexOrDerivedType = 'account___name';
  139. $displayAttribute->label = 'Account Name';
  140. $report->addDisplayAttribute($displayAttribute);
  141. $displayAttribute = new DisplayAttributeForReportForm('ContactsModule', 'Contact', $report->getType());
  142. $displayAttribute->attributeIndexOrDerivedType = 'primaryEmail___emailAddress';
  143. $report->addDisplayAttribute($displayAttribute);
  144. $savedReport = new SavedReport();
  145. SavedReportToReportAdapter::resolveReportToSavedReport($report, $savedReport);
  146. //set explicit
  147. $saved = $savedReport->save();
  148. assert('$saved');
  149. $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::
  150. makeBySecurableItem($savedReport);
  151. $explicitReadWriteModelPermissions->addReadWritePermitable(Group::getByName(Group::EVERYONE_GROUP_NAME));
  152. $success = ExplicitReadWriteModelPermissionsUtil::
  153. resolveExplicitReadWriteModelPermissions($savedReport, $explicitReadWriteModelPermissions);
  154. assert('$success');
  155. $saved = $savedReport->save();
  156. assert('$saved');
  157. }
  158. public static function makeClosedWonOpportunitiesByOwner()
  159. {
  160. $report = new Report();
  161. $report->setDescription ('A report showing closed won opportunties by owner');
  162. $report->setModuleClassName('OpportunitiesModule');
  163. $report->setName ('Opportunities By Owner');
  164. $report->setType (Report::TYPE_SUMMATION);
  165. $report->setOwner (Yii::app()->user->userModel);
  166. $report->setFiltersStructure('1');
  167. $report->setCurrencyConversionType(Report::CURRENCY_CONVERSION_TYPE_BASE);
  168. $filter = new FilterForReportForm('OpportunitiesModule', 'Opportunity', $report->getType());
  169. $filter->attributeIndexOrDerivedType = 'stage';
  170. $filter->value = 'Closed Won';
  171. $filter->operator = OperatorRules::TYPE_EQUALS;
  172. $report->addFilter($filter);
  173. $groupBy = new GroupByForReportForm('OpportunitiesModule', 'Opportunity', $report->getType());
  174. $groupBy->attributeIndexOrDerivedType = 'owner__User';
  175. $groupBy->axis = 'x';
  176. $report->addGroupBy($groupBy);
  177. $displayAttribute = new DisplayAttributeForReportForm('OpportunitiesModule', 'Opportunity', $report->getType());
  178. $displayAttribute->attributeIndexOrDerivedType = 'owner__User';
  179. $report->addDisplayAttribute($displayAttribute);
  180. $displayAttribute = new DisplayAttributeForReportForm('OpportunitiesModule', 'Opportunity', $report->getType());
  181. $displayAttribute->attributeIndexOrDerivedType = 'Count';
  182. $report->addDisplayAttribute($displayAttribute);
  183. $displayAttribute = new DisplayAttributeForReportForm('OpportunitiesModule', 'Opportunity', $report->getType());
  184. $displayAttribute->attributeIndexOrDerivedType = 'amount__Summation';
  185. $report->addDisplayAttribute($displayAttribute);
  186. $drillDownDisplayAttribute = new DrillDownDisplayAttributeForReportForm('OpportunitiesModule', 'Opportunity',
  187. $report->getType());
  188. $drillDownDisplayAttribute->attributeIndexOrDerivedType = 'name';
  189. $report->addDrillDownDisplayAttribute($drillDownDisplayAttribute);
  190. $drillDownDisplayAttribute = new DrillDownDisplayAttributeForReportForm('OpportunitiesModule', 'Opportunity',
  191. $report->getType());
  192. $drillDownDisplayAttribute->attributeIndexOrDerivedType = 'account___name';
  193. $drillDownDisplayAttribute->label = 'Account Name';
  194. $report->addDrillDownDisplayAttribute($drillDownDisplayAttribute);
  195. $drillDownDisplayAttribute = new DrillDownDisplayAttributeForReportForm('OpportunitiesModule', 'Opportunity',
  196. $report->getType());
  197. $drillDownDisplayAttribute->attributeIndexOrDerivedType = 'amount';
  198. $report->addDrillDownDisplayAttribute($drillDownDisplayAttribute);
  199. $drillDownDisplayAttribute = new DrillDownDisplayAttributeForReportForm('OpportunitiesModule', 'Opportunity',
  200. $report->getType());
  201. $drillDownDisplayAttribute->attributeIndexOrDerivedType = 'closeDate';
  202. $report->addDrillDownDisplayAttribute($drillDownDisplayAttribute);
  203. $chart = new ChartForReportForm();
  204. $chart->type = 'Pie2D';
  205. $chart->firstSeries = 'owner__User';
  206. $chart->firstRange = 'amount__Summation';
  207. $report->setChart($chart);
  208. $savedReport = new SavedReport();
  209. SavedReportToReportAdapter::resolveReportToSavedReport($report, $savedReport);
  210. //set explicit
  211. $saved = $savedReport->save();
  212. assert('$saved');
  213. $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::
  214. makeBySecurableItem($savedReport);
  215. $explicitReadWriteModelPermissions->addReadWritePermitable(Group::getByName(Group::EVERYONE_GROUP_NAME));
  216. $success = ExplicitReadWriteModelPermissionsUtil::
  217. resolveExplicitReadWriteModelPermissions($savedReport, $explicitReadWriteModelPermissions);
  218. assert('$success');
  219. $saved = $savedReport->save();
  220. assert('$saved');
  221. }
  222. public static function makeClosedWonOpportunitiesByMonth()
  223. {
  224. $report = new Report();
  225. $report->setDescription ('A report showing closed won opportunities by month');
  226. $report->setModuleClassName('OpportunitiesModule');
  227. $report->setName ('Closed won opportunities by month');
  228. $report->setType (Report::TYPE_SUMMATION);
  229. $report->setOwner (Yii::app()->user->userModel);
  230. $report->setFiltersStructure('1');
  231. $report->setCurrencyConversionType(Report::CURRENCY_CONVERSION_TYPE_BASE);
  232. $filter = new FilterForReportForm('OpportunitiesModule', 'Opportunity', $report->getType());
  233. $filter->attributeIndexOrDerivedType = 'stage';
  234. $filter->value = 'Closed Won';
  235. $filter->operator = OperatorRules::TYPE_EQUALS;
  236. $report->addFilter($filter);
  237. $groupBy = new GroupByForReportForm('OpportunitiesModule', 'Opportunity', $report->getType());
  238. $groupBy->attributeIndexOrDerivedType = 'closeDate__Month';
  239. $groupBy->axis = 'x';
  240. $report->addGroupBy($groupBy);
  241. $displayAttribute = new DisplayAttributeForReportForm('OpportunitiesModule', 'Opportunity', $report->getType());
  242. $displayAttribute->attributeIndexOrDerivedType = 'closeDate__Month';
  243. $report->addDisplayAttribute($displayAttribute);
  244. $displayAttribute = new DisplayAttributeForReportForm('OpportunitiesModule', 'Opportunity', $report->getType());
  245. $displayAttribute->attributeIndexOrDerivedType = 'Count';
  246. $report->addDisplayAttribute($displayAttribute);
  247. $displayAttribute = new DisplayAttributeForReportForm('OpportunitiesModule', 'Opportunity', $report->getType());
  248. $displayAttribute->attributeIndexOrDerivedType = 'amount__Summation';
  249. $report->addDisplayAttribute($displayAttribute);
  250. $chart = new ChartForReportForm();
  251. $chart->type = 'Bar2D';
  252. $chart->firstSeries = 'closeDate__Month';
  253. $chart->firstRange = 'amount__Summation';
  254. $report->setChart($chart);
  255. $savedReport = new SavedReport();
  256. SavedReportToReportAdapter::resolveReportToSavedReport($report, $savedReport);
  257. //set explicit
  258. $saved = $savedReport->save();
  259. assert('$saved');
  260. $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::
  261. makeBySecurableItem($savedReport);
  262. $explicitReadWriteModelPermissions->addReadWritePermitable(Group::getByName(Group::EVERYONE_GROUP_NAME));
  263. $success = ExplicitReadWriteModelPermissionsUtil::
  264. resolveExplicitReadWriteModelPermissions($savedReport, $explicitReadWriteModelPermissions);
  265. assert('$success');
  266. $saved = $savedReport->save();
  267. assert('$saved');
  268. }
  269. public static function makeOpportunitiesByStage()
  270. {
  271. $report = new Report();
  272. $report->setModuleClassName('OpportunitiesModule');
  273. $report->setName ('Opportunities by Stage');
  274. $report->setType (Report::TYPE_SUMMATION);
  275. $report->setOwner (Yii::app()->user->userModel);
  276. $report->setFiltersStructure('');
  277. $report->setCurrencyConversionType(Report::CURRENCY_CONVERSION_TYPE_BASE);
  278. $groupBy = new GroupByForReportForm('OpportunitiesModule', 'Opportunity', $report->getType());
  279. $groupBy->attributeIndexOrDerivedType = 'stage';
  280. $groupBy->axis = 'x';
  281. $report->addGroupBy($groupBy);
  282. $displayAttribute = new DisplayAttributeForReportForm('OpportunitiesModule', 'Opportunity', $report->getType());
  283. $displayAttribute->attributeIndexOrDerivedType = 'stage';
  284. $report->addDisplayAttribute($displayAttribute);
  285. $displayAttribute = new DisplayAttributeForReportForm('OpportunitiesModule', 'Opportunity', $report->getType());
  286. $displayAttribute->attributeIndexOrDerivedType = 'Count';
  287. $report->addDisplayAttribute($displayAttribute);
  288. $displayAttribute = new DisplayAttributeForReportForm('OpportunitiesModule', 'Opportunity', $report->getType());
  289. $displayAttribute->attributeIndexOrDerivedType = 'amount__Summation';
  290. $report->addDisplayAttribute($displayAttribute);
  291. $chart = new ChartForReportForm();
  292. $chart->type = 'Column2D';
  293. $chart->firstSeries = 'stage';
  294. $chart->firstRange = 'amount__Summation';
  295. $report->setChart($chart);
  296. $savedReport = new SavedReport();
  297. SavedReportToReportAdapter::resolveReportToSavedReport($report, $savedReport);
  298. //set explicit
  299. $saved = $savedReport->save();
  300. assert('$saved');
  301. $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::
  302. makeBySecurableItem($savedReport);
  303. $explicitReadWriteModelPermissions->addReadWritePermitable(Group::getByName(Group::EVERYONE_GROUP_NAME));
  304. $success = ExplicitReadWriteModelPermissionsUtil::
  305. resolveExplicitReadWriteModelPermissions($savedReport, $explicitReadWriteModelPermissions);
  306. assert('$success');
  307. $saved = $savedReport->save();
  308. assert('$saved');
  309. }
  310. public static function makeMeetingsCategoryAndMonthStartTimeByOwner()
  311. {
  312. $report = new Report();
  313. $report->setModuleClassName('MeetingsModule');
  314. $report->setName ('Meettings Category And Month Start Time By Owner');
  315. $report->setType (Report::TYPE_MATRIX);
  316. $report->setOwner (Yii::app()->user->userModel);
  317. $report->setFiltersStructure('');
  318. $report->setCurrencyConversionType(Report::CURRENCY_CONVERSION_TYPE_BASE);
  319. $groupBy = new GroupByForReportForm('MeetingsModule', 'Meeting', $report->getType());
  320. $groupBy->attributeIndexOrDerivedType = 'startDateTime__Month';
  321. $groupBy->axis = 'x';
  322. $report->addGroupBy($groupBy);
  323. $groupBy = new GroupByForReportForm('MeetingsModule', 'Meeting', $report->getType());
  324. $groupBy->attributeIndexOrDerivedType = 'category';
  325. $groupBy->axis = 'x';
  326. $report->addGroupBy($groupBy);
  327. $groupBy = new GroupByForReportForm('MeetingsModule', 'Meeting', $report->getType());
  328. $groupBy->attributeIndexOrDerivedType = 'owner__User';
  329. $groupBy->axis = 'y';
  330. $report->addGroupBy($groupBy);
  331. $displayAttribute = new DisplayAttributeForReportForm('MeetingsModule', 'Meeting', $report->getType());
  332. $displayAttribute->attributeIndexOrDerivedType = 'Count';
  333. $report->addDisplayAttribute($displayAttribute);
  334. $savedReport = new SavedReport();
  335. SavedReportToReportAdapter::resolveReportToSavedReport($report, $savedReport);
  336. //set explicit
  337. $saved = $savedReport->save();
  338. assert('$saved');
  339. $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::
  340. makeBySecurableItem($savedReport);
  341. $explicitReadWriteModelPermissions->addReadWritePermitable(Group::getByName(Group::EVERYONE_GROUP_NAME));
  342. $success = ExplicitReadWriteModelPermissionsUtil::
  343. resolveExplicitReadWriteModelPermissions($savedReport, $explicitReadWriteModelPermissions);
  344. assert('$success');
  345. $saved = $savedReport->save();
  346. assert('$saved');
  347. }
  348. }
  349. ?>