Guest User

Untitled

a guest
Oct 22nd, 2018
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 23.17 KB | None | 0 0
  1. public class addSubscribersExtension
  2. {
  3. public final SubscriptionManager subscription { get; set; }
  4. public List<ReportWrapper> reports { get; set; }
  5. public String searchFilter { get; set; }
  6.  
  7. public addSubscribersExtension(ApexPages.StandardController stdController)
  8. {
  9. this.subscription = new SubscriptionManager((Subscription__c)stdController.getRecord());
  10. this.subscription.selectedReports = new List<ReportWrapper>();
  11. System.debug('page load');
  12. }
  13.  
  14. public List<SubscriberWrapper> getSubscribers()
  15. {
  16. return this.subscription.getSubscribers();
  17. }
  18.  
  19. public List<ReportWrapper> getReports()
  20. {
  21. String d_fldcnt = System.currentPageReference().getParameters().get('d_fldcnt');
  22. String d_rptcnt = System.currentPageReference().getParameters().get('d_rptcnt');
  23.  
  24. if(this.reports != null)
  25. {
  26. return this.reports;
  27. }
  28. else
  29. {
  30. this.reports = new List<ReportWrapper>();
  31. }
  32.  
  33. List<String> selReports = (this.subscription.subscription.Mailing_Reports__c != null) ? this.subscription.subscription.Mailing_Reports__c.split(';') : new List<String>();
  34. //List<String> selReports = this.subscription.subscription.Mailing_Reports__c.split(';');
  35.  
  36. String subName = this.subscription.subscription.Name;
  37. Integer folderCount = [SELECT COUNT() FROM Folder WHERE Name = :subName];
  38.  
  39. if(folderCount == 0 || d_fldcnt == '0')
  40. {
  41. ApexPAges.addMessage(new ApexPages.Message(ApexPages.Severity.WARNING, 'A report folder named ' + subName + ' must be created before you can add subscibers from reports. You can still add subscribers manually by clicking Add Subscriber below.'));
  42. return null;
  43. }
  44.  
  45. Integer reportCount = [SELECT COUNT() FROM Report WHERE OwnerId IN (SELECT Id FROM Folder WHERE Name = :subName)];
  46.  
  47. if(reportCount == 0 || d_rptcnt == '0')
  48. {
  49. ApexPAges.addMessage(new ApexPages.Message(ApexPages.Severity.WARNING, 'There are no reports in the ' + subName + ' reports folder. You can still add subscribers manually by clicking Add Subscriber below.'));
  50. return null;
  51. }
  52.  
  53. for(Report report : [SELECT Id, Name FROM Report WHERE OwnerId IN (SELECT Id FROM Folder WHERE Name = :subName) ORDER BY Name])
  54. {
  55. ReportWrapper reportWrap = new ReportWrapper(report);
  56.  
  57. for(String rep : selReports)
  58. {
  59. if(rep == report.Name)
  60. {
  61. reportWrap.selected = true;
  62. }
  63. }
  64.  
  65. this.reports.add(reportWrap);
  66. }
  67.  
  68. return this.reports;
  69. }
  70.  
  71. public PageReference searchSubscribers()
  72. {
  73. this.subscription.searchFilter = this.searchFilter;
  74.  
  75. return null;
  76. }
  77.  
  78. public void updateSelectedReports()
  79. {
  80. List<ReportWrapper> reportsToKeep = new List<ReportWrapper>();
  81.  
  82. for(ReportWrapper report : this.reports)
  83. {
  84. if(report.selected)
  85. {
  86. reportsToKeep.add(report);
  87.  
  88. if(this.subscription.subscription.Mailing_Reports__c == null)
  89. {
  90. this.subscription.subscription.Mailing_Reports__c = report.report.Name + ';';
  91. }
  92. else if(!this.subscription.subscription.Mailing_Reports__c.contains(report.report.Name))
  93. {
  94. this.subscription.subscription.Mailing_Reports__c += report.report.Name + ';';
  95. }
  96. }
  97. }
  98.  
  99. this.subscription.selectedReports.clear();
  100. this.subscription.selectedReports.addAll(reportsToKeep);
  101. //reportsToKeep = null;
  102. }
  103.  
  104. public PageReference reportSelected()
  105. {
  106. this.subscription.searchFilter = this.searchFilter = '';
  107. this.subscription.subscription.Mailing_Reports__c = '';
  108.  
  109. updateSelectedReports();
  110.  
  111. this.subscription.addSubscribersFromReports();
  112.  
  113. if(this.subscription.selectedReports.size() > 0)
  114. {
  115. ApexPAges.addMessage(new ApexPages.Message(ApexPages.Severity.CONFIRM, this.subscription.selectedReports.size() + ' report(s) selected'));
  116. }
  117.  
  118. update this.subscription.subscription;
  119. return null;
  120. }
  121.  
  122. public PageReference subscriberSelected()
  123. {
  124. String sid = System.currentPageReference().getParameters().get('sid');
  125. updateSelectedReports();
  126.  
  127. if(sid != '')
  128. {
  129. for(SubscriberWrapper sub : this.subscription.subscribers)
  130. {
  131. if(sub.subscriber.Id == sid)
  132. {
  133. Boolean updateSub = false;
  134.  
  135. // if subscriber's status is opt out and is not sticky
  136. if(sub.subscriber.status__c == 'Opt In' && !sub.subscriber.sticky__c)
  137. {
  138. // if subscriber is not in a selected report then remove from subscription
  139. Boolean inReport = false;
  140.  
  141. // mark subscriber as sticky if quantity is to be tracked
  142. if(sub.subscriber.Quantity__c != '1')
  143. {
  144. String stickyclicked = System.currentPageReference().getParameters().get('stickyclicked');
  145.  
  146. if(stickyclicked != null && stickyclicked == '1')
  147. {
  148. sub.subscriber.Quantity__c = '1';
  149. }
  150. else
  151. {
  152. sub.subscriber.sticky__c = true;
  153. }
  154. }
  155.  
  156. ApexPAges.addMessage(new ApexPages.Message(ApexPages.Severity.CONFIRM, 'this.subscription.selectedReports : ' + this.subscription.selectedReports.size()));
  157.  
  158. List<SubscriberWrapper> subsFromReports = new List<SubscriberWrapper>();
  159. for(ReportWrapper report : this.subscription.selectedReports)
  160. {
  161. List<SubscriberWrapper> tmp = report.getSubscribers(this.subscription.subscription);
  162.  
  163. if(tmp != null)
  164. {
  165. subsFromReports.addAll(tmp);
  166. }
  167. }
  168.  
  169. for(SubscriberWrapper sub2 : subsFromReports)
  170. {
  171. if((sub2.subscriber.Contact__c != null && sub2.subscriber.Contact__c == sub.subscriber.Contact__c) ||
  172. (sub2.subscriber.Organization__c != null && sub2.subscriber.Organization__c == sub.subscriber.Organization__c) ||
  173. (sub2.subscriber.Position__c != null && sub2.subscriber.Position__c == sub.subscriber.Position__c))
  174. {
  175. inReport = true;
  176. break;
  177. }
  178. }
  179.  
  180. if(!inReport)
  181. {
  182. delete [SELECT Id FROM Subscriber__c WHERE Id = :sid];
  183.  
  184. for(Integer i = 0; i < this.subscription.subscribers.size(); i++)
  185. {
  186. if(this.subscription.subscribers.get(i).subscriber.Id == sid)
  187. {
  188. this.subscription.subscribers.remove(i);
  189. break;
  190. }
  191. }
  192.  
  193. this.subscription.recordDeleted = true;
  194. ApexPAges.addMessage(new ApexPages.Message(ApexPages.Severity.CONFIRM, 'Removed Subscriber'));
  195. break;
  196. }
  197. else
  198. {
  199. updateSub = true;
  200. }
  201. }
  202. else
  203. {
  204. updateSub = true;
  205. }
  206.  
  207. if(updateSub)
  208. {
  209. update sub.subscriber;
  210. ApexPAges.addMessage(new ApexPages.Message(ApexPages.Severity.CONFIRM, 'Updated Subscriber'));
  211. break;
  212. }
  213. }
  214. }
  215. }
  216.  
  217. return null;
  218. }
  219.  
  220. // Wrapper class for Report
  221. public class ReportWrapper
  222. {
  223. public Report report { get; private set; }
  224. public Boolean selected { get; set; }
  225.  
  226. public ReportWrapper(Report report)
  227. {
  228. this.report = report;
  229. this.selected = false;
  230. }
  231.  
  232. public List<SubscriberWrapper> getSubscribers(Subscription__c subscription)
  233. {
  234. String d_csv = System.currentPageReference().getParameters().get('d_csv');
  235. String d_con = System.currentPageReference().getParameters().get('d_con');
  236. String d_org = System.currentPageReference().getParameters().get('d_org');
  237. String d_pos = System.currentPageReference().getParameters().get('d_pos');
  238.  
  239. List<SubscriberWrapper> subscribers = new List<SubscriberWrapper>();
  240. CSVParser parser;
  241.  
  242. if(d_csv == '1')
  243. {
  244. String content = '';
  245.  
  246. content += '"CONTACT ID","ORGANIZATION ID","POSITION ID"\n';
  247. content += '"' + d_con + '","' + d_org + '","' + d_pos + '"\n';
  248.  
  249. parser = new CSVParser(content);
  250. }
  251. else
  252. {
  253. PageReference page = new PageReference('/' + this.report.Id + '?export=1&enc=UTF-8&xf=csv');
  254. parser = new CSVParser(page.getContent().toString());
  255. }
  256.  
  257. List<String[]> csv = parser.parse();
  258.  
  259. if(csv == null)
  260. {
  261. return null;
  262. }
  263.  
  264. for(Integer i = 0; i < csv.size() - 1; i++)
  265. {
  266. try
  267. {
  268. if(csv.get(i)[parser.CONTACT] != null)
  269. {
  270. subscribers.add(new SubscriberWrapper(new Subscriber__c(Contact__c = (Id)csv.get(i)[parser.CONTACT], Subscription__c = subscription.Id, Sticky__c = false)));
  271. }
  272. }
  273. catch(TypeException exp) { }
  274.  
  275. try
  276. {
  277. if(csv.get(i)[parser.ORGANIZATION] != null)
  278. {
  279. subscribers.add(new SubscriberWrapper(new Subscriber__c(Organization__c = (Id)csv.get(i)[parser.ORGANIZATION], Subscription__c = subscription.Id, Sticky__c = false)));
  280. }
  281. }
  282. catch(TypeException exp) { }
  283.  
  284. try
  285. {
  286. if(csv.get(i)[parser.POSITION] != null)
  287. {
  288. subscribers.add(new SubscriberWrapper(new Subscriber__c(Position__c = (Id)csv.get(i)[parser.POSITION], Subscription__c = subscription.Id, Sticky__c = false)));
  289. }
  290. }
  291. catch(TypeException exp) { }
  292. }
  293.  
  294. return subscribers;
  295. }
  296. }
  297.  
  298. public class SubscriptionManager
  299. {
  300. public Subscription__c subscription { get; set; }
  301. public List<SubscriberWrapper> subscribers { get; set; }
  302. public List<ReportWrapper> selectedReports { get; set; }
  303. public List<SelectOption> subscriberQuantities;
  304. public List<SelectOption> subscriberStatuses;
  305. public Boolean recordDeleted = false;
  306. private Boolean filterChanged = false;
  307.  
  308. public String searchFilter
  309. {
  310. get;
  311. set
  312. {
  313. //filterChanged = (value != searchFilter && value != '' && value != null);
  314. filterChanged = (value != searchFilter);
  315. searchFilter = value;
  316. }
  317. }
  318.  
  319. public SubscriptionManager(Subscription__c subscription)
  320. {
  321. this.subscription = [SELECT Id, Mailing_Reports__c, Name FROM Subscription__c WHERE Id = :subscription.Id];
  322. }
  323.  
  324. public List<SelectOption> getSubscriberStatuses()
  325. {
  326. if(this.subscriberStatuses != null)
  327. {
  328. return this.subscriberStatuses;
  329. }
  330.  
  331. this.subscriberStatuses = new List<SelectOption>();
  332. this.subscriberStatuses.add(new SelectOption('Opt In', 'Opt In'));
  333. this.subscriberStatuses.add(new SelectOption('Opt Out', 'Opt Out'));
  334.  
  335. return this.subscriberStatuses;
  336. }
  337.  
  338. public List<SelectOption> getSubscriberQuantities()
  339. {
  340. if(this.subscriberQuantities != null)
  341. {
  342. return this.subscriberQuantities;
  343. }
  344.  
  345. this.subscriberQuantities = new List<SelectOption>();
  346.  
  347. String[] quantites = new String[] { '1', '2', '3', '4', '5', '6', '7', '8', '9', '10' };
  348. for(String quantity : quantites)
  349. {
  350. this.subscriberQuantities.add(new SelectOption(quantity, quantity));
  351. }
  352.  
  353. return this.subscriberQuantities;
  354. }
  355.  
  356. public ApexPages.StandardSetController conn
  357. {
  358. get
  359. {
  360. if(this.conn == null || this.recordDeleted || this.filterChanged)
  361. {
  362. this.recordDeleted = false;
  363.  
  364. String filter = '';
  365. String orderBy = '';
  366. if(this.searchFilter != '' && this.searchFilter != null)
  367. {
  368. filter = ' AND (Contact__r.Name LIKE \'%' + this.searchFilter + '%\'';
  369. filter += ' OR Organization__r.Name LIKE \'%' + this.searchFilter + '%\'';
  370. filter += ' OR Position__r.Position_Title__c LIKE \'%' + this.searchFilter + '%\')';
  371.  
  372. //ApexPAges.addMessage(new ApexPages.Message(ApexPages.Severity.CONFIRM, filter));
  373. //filter = '';
  374. }
  375.  
  376. orderBy = ' ORDER BY SortName__c';
  377.  
  378. String query = 'SELECT Id, SortName__c, Sticky__c, Quantity__c, Status__c, Contact__r.Name, Organization__r.Name, Position__r.Position_Title__c FROM Subscriber__c WHERE Subscription__c = \'' + this.subscription.Id + '\'';
  379. query += filter + orderBy;
  380.  
  381. //ApexPAges.addMessage(new ApexPages.Message(ApexPages.Severity.CONFIRM, query));
  382.  
  383. this.conn = new ApexPages.StandardSetController(Database.getQueryLocator(query));
  384. this.conn.setPageSize(10);
  385. }
  386.  
  387. return this.conn;
  388. }
  389. private set;
  390. }
  391.  
  392. public List<SubscriberWrapper> getSubscribers()
  393. {
  394. this.subscribers = new List<SubscriberWrapper>();
  395.  
  396. // Get all current subscribers from subscription
  397. List<Subscriber__c> subs = this.conn.getRecords();
  398. for(Subscriber__c subscriber : subs)
  399. {
  400. this.subscribers.add(new SubscriberWrapper(subscriber));
  401. }
  402.  
  403. return this.subscribers;
  404. }
  405.  
  406. public void addSubscribersFromReports()
  407. {
  408. Boolean subExists = false;
  409.  
  410. // remove all subscribers that were not manually added (this is done since a report can be de-selected)
  411. delete [SELECT Id FROM Subscriber__c WHERE Subscription__c = :this.subscription.Id AND (Sticky__c = false AND Status__c = 'Opt In')];
  412.  
  413. List<SubscriberWrapper> subsFromReportAll = new List<SubscriberWrapper>();
  414. List<Subscriber__c> insertNewSubs = new List<Subscriber__c>();
  415.  
  416. // iterate through all selected reports
  417. List<SubscriberWrapper> subsFromReport = new List<SubscriberWrapper>();
  418. Set<Id> ids = new Set<Id>();
  419.  
  420. for(ReportWrapper report : this.selectedReports)
  421. {
  422. List<SubscriberWrapper> tmp = report.getSubscribers(this.subscription);
  423.  
  424. if(tmp != null)
  425. {
  426. subsFromReport.addAll(tmp);
  427. }
  428. }
  429.  
  430. for(SubscriberWrapper sub : subsFromReport)
  431. {
  432. ids.add((sub.subscriber.Contact__c == null) ? ((sub.subscriber.Organization__c == null) ? sub.subscriber.Position__c : sub.subscriber.Organization__c) : sub.subscriber.Contact__c);
  433. }
  434.  
  435. if(ids.size() > 0)
  436. {
  437. List<Subscriber__c> currentSubs = [SELECT Id, Contact__c, Organization__c, Position__c FROM Subscriber__c WHERE Subscription__c = :this.subscription.Id AND (Organization__c IN :ids OR Position__c IN :ids OR Contact__c IN :ids)];
  438. Map<Id, String> rep = new Map<Id, String>();
  439.  
  440. // iterate through all subscribers in this report
  441. for(SubscriberWrapper sub : subsFromReport)
  442. {
  443. // iterate through all subscribers already in this subscription
  444. subExists = false;
  445. for(Subscriber__c currentSub : currentSubs)
  446. {
  447. // check if subsriber already exists
  448. if((currentSub.Contact__c != null && sub.subscriber.Contact__c == currentSub.Contact__c) ||
  449. (currentSub.Organization__c != null && sub.subscriber.Organization__c == currentSub.Organization__c) ||
  450. (currentSub.Position__c != null && sub.subscriber.Position__c == currentSub.Position__c))
  451. {
  452. subExists = true;
  453. break;
  454. }
  455. }
  456.  
  457. if(sub.subscriber.Id == null && !subExists)
  458. {
  459. if(!rep.containsKey((sub.subscriber.Contact__c == null) ? ((sub.subscriber.Organization__c == null) ? sub.subscriber.Position__c : sub.subscriber.Organization__c) : sub.subscriber.Contact__c))
  460. {
  461. rep.put((sub.subscriber.Contact__c == null) ? ((sub.subscriber.Organization__c == null) ? sub.subscriber.Position__c : sub.subscriber.Organization__c) : sub.subscriber.Contact__c, '');
  462. insertNewSubs.add(sub.subscriber);
  463. }
  464. }
  465. }
  466. }
  467.  
  468. if(insertNewSubs.size() > 0)
  469. {
  470. insert insertNewSubs;
  471.  
  472. //Integer lim = Limits.getScriptStatements();
  473. //ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.CONFIRM, 'script statements: ' + lim));
  474. }
  475.  
  476. Integer cnt = [SELECT COUNT() FROM Subscriber__c WHERE Subscription__c = :this.subscription.Id];
  477. this.recordDeleted = true;
  478.  
  479. ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.CONFIRM, this.selectedReports.size() + ' report(s) selected'));
  480. ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.CONFIRM, cnt + ' total subscriber(s)'));
  481. }
  482.  
  483. // indicates whether there are more records after the current page set.
  484. public Boolean hasNext
  485. {
  486. get
  487. {
  488. return this.conn.getHasNext();
  489. }
  490. set;
  491. }
  492.  
  493. // indicates whether there are more records before the current page set.
  494. public Boolean hasPrevious
  495. {
  496. get
  497. {
  498. return this.conn.getHasPrevious();
  499. }
  500. set;
  501. }
  502.  
  503. // returns the page number of the current page set
  504. public Integer pageNumber
  505. {
  506. get
  507. {
  508. return this.conn.getPageNumber();
  509. }
  510. set;
  511. }
  512.  
  513. // returns the first page of records
  514. public void first()
  515. {
  516. try
  517. {
  518. this.conn.first();
  519. }
  520. catch(VisualforceException e)
  521. {
  522. this.conn.save();
  523. this.conn.first();
  524. }
  525. }
  526.  
  527. // returns the last page of records
  528. public void last()
  529. {
  530. try
  531. {
  532. this.conn.last();
  533. }
  534. catch(VisualforceException e)
  535. {
  536. this.conn.save();
  537. this.conn.last();
  538. }
  539. }
  540.  
  541. // returns the previous page of records
  542. public void previous()
  543. {
  544. try
  545. {
  546. this.conn.previous();
  547. }
  548. catch(VisualforceException e)
  549. {
  550. this.conn.save();
  551. this.conn.previous();
  552. }
  553. }
  554.  
  555. // returns the next page of records
  556. public void next()
  557. {
  558. try
  559. {
  560. this.conn.next();
  561. }
  562. catch(VisualforceException e)
  563. {
  564. this.conn.save();
  565. this.conn.next();
  566. }
  567. }
  568. }
  569.  
  570. // Wrapper class for Subscriber
  571. public class SubscriberWrapper
  572. {
  573. public Subscriber__c subscriber { get; set; }
  574. public String linkRecordId { get; private set; }
  575. public String linkRecordText { get; private set; }
  576. public String objectType { get; private set; }
  577.  
  578. public SubscriberWrapper(Subscriber__c subscriber)
  579. {
  580. this.subscriber = subscriber;
  581.  
  582. if(this.subscriber.Contact__c != null)
  583. {
  584. this.linkRecordId = this.subscriber.Contact__c;
  585. this.linkRecordText = this.subscriber.Contact__r.Name;
  586. this.objectType = 'Contact';
  587. }
  588. else if(this.subscriber.Organization__c != null)
  589. {
  590. this.linkRecordId = this.subscriber.Organization__c;
  591. this.linkRecordText = this.subscriber.Organization__r.Name;
  592. this.objectType = 'Organization';
  593. }
  594. else if(this.subscriber.Position__c != null)
  595. {
  596. this.linkRecordId = this.subscriber.Position__c;
  597. this.linkRecordText = this.subscriber.Position__r.Position_Title__c;
  598. this.objectType = 'Position';
  599. }
  600. }
  601. }
  602. }
Add Comment
Please, Sign In to add comment