Advertisement
Guest User

Controller

a guest
Jan 17th, 2018
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 10.34 KB | None | 0 0
  1. public class TourPlanningController {
  2.  
  3.     //selectList indexes for swap
  4.     Integer oldIndex {get; set;}
  5.     Integer newIndex {get; set;}
  6.    
  7.     public PageReference onOrderSelect() {
  8.             //oldIndex = this.options[this.selectedIndex];
  9.             system.debug('Order status: '+Order);
  10.             return null;
  11.     }
  12.     public PageReference onOrderChange() {
  13.             //newIndex = this.options[this.selectedIndex];
  14.             //reOrder(oldIndex, newIndex);
  15.             return null;
  16.     }
  17.    
  18.     //Preview block display flag
  19.     public Boolean rendPreview {
  20.         get {
  21.             if (rendPreview == NULL) {
  22.                 rendPreview = false;
  23.             }
  24.             return rendPreview;
  25.         }
  26.         set;
  27.     }
  28.    
  29.     //Properties implementation
  30.     public Time startTime {
  31.         get {
  32.             if (startTime == NULL) {
  33.                 startTime = Time.newInstance(9, 0, 0, 0);
  34.             }
  35.             return startTime;
  36.         }
  37.         set;
  38.     }
  39.     public Time endTime {
  40.         get {
  41.             if (endTime == NULL) {
  42.                 endTime = Time.newInstance(18, 0, 0, 0);
  43.             }
  44.             return endTime;
  45.         }
  46.         set;
  47.     }
  48.     public Integer duration {
  49.         get {
  50.             if (duration == NULL) {
  51.                 duration = 15;
  52.             }
  53.             return duration;
  54.         }
  55.         set;
  56.     }
  57.     public Integer pause {
  58.         get {
  59.             if (pause == NULL) {
  60.                 pause = 30;
  61.             }
  62.             return pause;
  63.         }
  64.         set;
  65.     }
  66.    
  67.     public List<Integer> Order {
  68.         //REWRITE THIS METHOD!
  69.         get {
  70.             Integer sC = selectedContacts.size();
  71.             if ((order == NULL) || (order.size()<sC)) {
  72.                 //Generate initial order
  73.                 order = new List<Integer>();
  74.                 for (Integer i=0; i<sC; i++) {
  75.                     order.add(i);
  76.                     system.debug('Added order record: '+order[i]);
  77.                 }
  78.             }
  79.  
  80.             system.debug('Generated order: '+order);
  81.             return Order;
  82.         }
  83.         set {
  84.             for (Integer i=0; i<tableRows.size(); i++) {
  85.                 this.order[i]=tableRows[i].visitOrder;
  86.                 system.debug('Copied order record: '+order[i]);
  87.             }
  88.             system.debug('Updated order: '+order);
  89.         }
  90.     }
  91.     public List<SelectOption> getOrderOptions() {
  92.         List<SelectOption> options = new List<SelectOption>();
  93.         Integer sC = selectedContacts.size();
  94.         for (Integer i=0; i<sC; i++) {
  95.             String str = String.valueOf(Order[i]);
  96.             SelectOption option = new SelectOption(str, str);
  97.             options.add(option);
  98.         }
  99.         return options;
  100.     }
  101.  
  102.     public List<String> selectedContacts {get; set;}  //holds the values of the selected contacts
  103.     // Generates Customers list
  104.     public List<SelectOption> getTargetedContacts() {
  105.         List<SelectOption> options = new List<SelectOption>();
  106.  
  107.         // Find all the targeted contacts
  108.         List<Contact> targetedContacts = Database.query('SELECT Id, Name ' +
  109.                                                         'FROM Contact ' +
  110.                                                         'WHERE Is_Target__c = true'
  111.         );
  112.        
  113.         // Sort them by name
  114.         targetedContacts.sort();
  115.        
  116.         // Create the Select Options.
  117.         if (targetedContacts.size() > 0) {
  118.             for (Integer i=0; i<targetedContacts.size(); i++) {
  119.                 //create new selectOption
  120.                 SelectOption option = new SelectOption(targetedContacts[i].Id, targetedContacts[i].Name);
  121.                
  122.                 //add the option to options
  123.                 options.add(option);
  124.             }
  125.         } else {
  126.             options.add(new SelectOption('', 'Targeted customers are absent'));
  127.         }
  128.        
  129.         return options;
  130.     }
  131.  
  132.     //visits for preview
  133.     public List<Visit__c> Visits {
  134.         get {
  135.             visits = new List<Visit__c>();
  136.            
  137.             //calculate visitsNumber
  138.             Integer visitsNumber = selectedContacts.size();
  139.            
  140.             //prepere data for the visits generation
  141.             DateTime startDateTime = System.today(); //initialization startDateTime for a visit generation
  142.             startDateTime = startDateTime.addHours(startTime.hour()); //add hours to startDateTime
  143.             startDateTime = startDateTime.addMinutes(startTime.minute()); //add minutes to startDateTime
  144.             DateTime edgeDateTime = System.today(); //for a visit number limit detection
  145.             edgeDateTime = edgeDateTime.addHours(endTime.hour());
  146.             edgeDateTime = edgeDateTime.addMinutes(endTime.minute());
  147.             Integer curDuration = 0; //for the total duration counting in the loop
  148.            
  149.             //visits list generation
  150.             for (Integer i=0; i<visitsNumber; i++) {
  151.                 //generate startDateTime__c and endDateTime__c
  152.                 //calculate values for the loop each iteration
  153.                 startDateTime = startDateTime.addMinutes(curDuration);
  154.                 //system.debug('Start DateTime in '+i+' FOR loop: '+startDateTime);
  155.                 curDuration += duration;
  156.                 DateTime endDateTime = startDateTime.addMinutes(duration);
  157.                 //system.debug('End DateTime: '+endDateTime);
  158.                
  159.                 if (endDateTime > edgeDateTime) {
  160.                     //proceed to preview generation (ignore the rest of the visits)
  161.                     system.debug('The visit end time ('+endDateTime+') is greater than work hours: '+edgeDateTime);
  162.                     return visits;
  163.                 }
  164.    
  165.                 if (i<visitsNumber-1) {
  166.                     curDuration += pause;
  167.                 }
  168.                
  169.                 Visit__c visit = new Visit__c(Representative__c=UserInfo.getUserId(), Customer__c=selectedContacts[i], StartDateTime__c=startDateTime, EndDateTime__c=endDateTime);
  170.                 system.debug('Single visit for '+i+' iteration: '+visit);
  171.                 visits.add(visit);
  172.             }
  173.             system.debug('Generated visits: '+visits);
  174.             return visits;
  175.         }
  176.         set;
  177.     }
  178.  
  179.     //Visits preview combined record
  180.     public List<cTableRow> tableRows {
  181.         get {
  182.             tableRows = new List<cTableRow>();
  183.             Integer rowsNumber = selectedContacts.size();
  184.             for (Integer i=0; i<rowsNumber; i++) {
  185.                 tableRows.add(new cTableRow(visits[i],
  186.                                             order[i]));
  187.             }
  188.             return tableRows;
  189.         }
  190.         set { //HOW TO INVOKE THIS METHOD?
  191.             system.debug('Table rows status: '+tableRows);
  192.            
  193.             //setOrder();
  194.         } /*{
  195.             system.debug('Selected index: '+newIndex+'. Index to replace: '+oldIndex);
  196.             Id tmpId = visits[oldIndex].Customer__c;
  197.             visits[oldIndex].Customer__c = visits[newIndex].Customer__c;
  198.             visits[newIndex].Customer__c = tmpId;
  199.             rendPreview = true;
  200.             system.debug('Reordered table: '+tableRows);
  201.         }*/
  202.     }
  203.     //OR THIS METHOD?
  204.     public void setTableRows(List<cTableRow> tableRows) {
  205.         system.debug('Table rows before renew: '+tableRows);
  206.         for (Integer i=0; i<tableRows.size(); i++) {
  207.             this.tableRows[i].visitOrder = tableRows[i].visitOrder;
  208.         }
  209.         system.debug('Table rows after renew: '+tableRows);
  210.     }
  211.     public class cTableRow {
  212.         //fields of the record
  213.         public Id customerId { get; set; }
  214.         public String customerName { get; set; }
  215.         private DateTime visitStartDatetime { get; set; }
  216.         private DateTime visitEndDatetime { get; set; }
  217.         public Time visitStartTime { get; set; }
  218.         public Time visitEndTime { get; set; }
  219.         public Integer visitOrder { get; set; }
  220.        
  221.         public cTableRow(Visit__c v, Integer o) {
  222.             customerId = v.Customer__c;
  223.             List<Contact> contNames = [SELECT Name FROM Contact WHERE id=:customerId];
  224.             customerName = contNames[0].Name;
  225.             visitStartDatetime = v.startDateTime__c;
  226.             visitEndDatetime = v.endDateTime__c;
  227.             visitStartTime = visitStartDatetime.time();
  228.             visitEndTime = visitEndDatetime.time();
  229.             visitOrder = o;
  230.         }
  231.     }
  232.     public void reOrder(Integer newIndex, Integer oldIndex) {
  233.         system.debug('Selected index: '+newIndex+'. Index to replace: '+oldIndex);
  234.         Id tmpId = visits[oldIndex].Customer__c;
  235.         visits[oldIndex].Customer__c = visits[newIndex].Customer__c;
  236.         visits[newIndex].Customer__c = tmpId;
  237.         rendPreview = true;
  238.         system.debug('Reordered table: '+tableRows);
  239.     }
  240.    
  241.     //Render id="preview"
  242.     public PageReference calculate() {
  243.         //initiate Order
  244.         if (order == NULL) {
  245.             order = new List<Integer>();
  246.         } else {
  247.             order.clear();
  248.         }
  249.        
  250.         //validate parameters
  251.        
  252.         //rerender "preview"
  253.         rendPreview = true;
  254.        
  255.         return null;
  256.     }
  257.  
  258.     public PageReference save() {
  259.         //check order list for collisions
  260.         for (Integer i=0; i<order.size(); i++) {
  261.             Integer etalon = Order[i];
  262.             for (Integer j=0; j<order.size(); j++) {
  263.                 if ((etalon==Order[j]) && (j!=i)) {
  264.                     //show validation error
  265.                    
  266.                     return null;
  267.                 }
  268.             }
  269.         }
  270.        
  271.         //prepare visits list (sort by order)
  272.         for (Integer j=0; j<order.size(); j++) {
  273.             if ((Order[j]!=j) && (Order[j]>j)) {
  274.                 newIndex = Order[j];
  275.                 oldIndex = j;
  276.                 //swap visits (customers)
  277.                 for (Integer i=0; i<visits.size(); i++) {
  278.                     Id tmpId = visits[oldIndex].Customer__c;
  279.                     visits[oldIndex].Customer__c = visits[newIndex].Customer__c;
  280.                     visits[newIndex].Customer__c = tmpId;
  281.                 }
  282.             }
  283.         }
  284.        
  285.         if (visits != null) {
  286.             //insert visits;
  287.             return null;
  288.         } else {
  289.             //show error message and
  290.             return null;
  291.         }
  292.     }
  293.    
  294. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement