Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class TourPlanningController {
- //selectList indexes for swap
- Integer oldIndex {get; set;}
- Integer newIndex {get; set;}
- public PageReference onOrderSelect() {
- //oldIndex = this.options[this.selectedIndex];
- system.debug('Order status: '+Order);
- return null;
- }
- public PageReference onOrderChange() {
- //newIndex = this.options[this.selectedIndex];
- //reOrder(oldIndex, newIndex);
- return null;
- }
- //Preview block display flag
- public Boolean rendPreview {
- get {
- if (rendPreview == NULL) {
- rendPreview = false;
- }
- return rendPreview;
- }
- set;
- }
- //Properties implementation
- public Time startTime {
- get {
- if (startTime == NULL) {
- startTime = Time.newInstance(9, 0, 0, 0);
- }
- return startTime;
- }
- set;
- }
- public Time endTime {
- get {
- if (endTime == NULL) {
- endTime = Time.newInstance(18, 0, 0, 0);
- }
- return endTime;
- }
- set;
- }
- public Integer duration {
- get {
- if (duration == NULL) {
- duration = 15;
- }
- return duration;
- }
- set;
- }
- public Integer pause {
- get {
- if (pause == NULL) {
- pause = 30;
- }
- return pause;
- }
- set;
- }
- public List<Integer> Order {
- //REWRITE THIS METHOD!
- get {
- Integer sC = selectedContacts.size();
- if ((order == NULL) || (order.size()<sC)) {
- //Generate initial order
- order = new List<Integer>();
- for (Integer i=0; i<sC; i++) {
- order.add(i);
- system.debug('Added order record: '+order[i]);
- }
- }
- system.debug('Generated order: '+order);
- return Order;
- }
- set {
- for (Integer i=0; i<tableRows.size(); i++) {
- this.order[i]=tableRows[i].visitOrder;
- system.debug('Copied order record: '+order[i]);
- }
- system.debug('Updated order: '+order);
- }
- }
- public List<SelectOption> getOrderOptions() {
- List<SelectOption> options = new List<SelectOption>();
- Integer sC = selectedContacts.size();
- for (Integer i=0; i<sC; i++) {
- String str = String.valueOf(Order[i]);
- SelectOption option = new SelectOption(str, str);
- options.add(option);
- }
- return options;
- }
- public List<String> selectedContacts {get; set;} //holds the values of the selected contacts
- // Generates Customers list
- public List<SelectOption> getTargetedContacts() {
- List<SelectOption> options = new List<SelectOption>();
- // Find all the targeted contacts
- List<Contact> targetedContacts = Database.query('SELECT Id, Name ' +
- 'FROM Contact ' +
- 'WHERE Is_Target__c = true'
- );
- // Sort them by name
- targetedContacts.sort();
- // Create the Select Options.
- if (targetedContacts.size() > 0) {
- for (Integer i=0; i<targetedContacts.size(); i++) {
- //create new selectOption
- SelectOption option = new SelectOption(targetedContacts[i].Id, targetedContacts[i].Name);
- //add the option to options
- options.add(option);
- }
- } else {
- options.add(new SelectOption('', 'Targeted customers are absent'));
- }
- return options;
- }
- //visits for preview
- public List<Visit__c> Visits {
- get {
- visits = new List<Visit__c>();
- //calculate visitsNumber
- Integer visitsNumber = selectedContacts.size();
- //prepere data for the visits generation
- DateTime startDateTime = System.today(); //initialization startDateTime for a visit generation
- startDateTime = startDateTime.addHours(startTime.hour()); //add hours to startDateTime
- startDateTime = startDateTime.addMinutes(startTime.minute()); //add minutes to startDateTime
- DateTime edgeDateTime = System.today(); //for a visit number limit detection
- edgeDateTime = edgeDateTime.addHours(endTime.hour());
- edgeDateTime = edgeDateTime.addMinutes(endTime.minute());
- Integer curDuration = 0; //for the total duration counting in the loop
- //visits list generation
- for (Integer i=0; i<visitsNumber; i++) {
- //generate startDateTime__c and endDateTime__c
- //calculate values for the loop each iteration
- startDateTime = startDateTime.addMinutes(curDuration);
- //system.debug('Start DateTime in '+i+' FOR loop: '+startDateTime);
- curDuration += duration;
- DateTime endDateTime = startDateTime.addMinutes(duration);
- //system.debug('End DateTime: '+endDateTime);
- if (endDateTime > edgeDateTime) {
- //proceed to preview generation (ignore the rest of the visits)
- system.debug('The visit end time ('+endDateTime+') is greater than work hours: '+edgeDateTime);
- return visits;
- }
- if (i<visitsNumber-1) {
- curDuration += pause;
- }
- Visit__c visit = new Visit__c(Representative__c=UserInfo.getUserId(), Customer__c=selectedContacts[i], StartDateTime__c=startDateTime, EndDateTime__c=endDateTime);
- system.debug('Single visit for '+i+' iteration: '+visit);
- visits.add(visit);
- }
- system.debug('Generated visits: '+visits);
- return visits;
- }
- set;
- }
- //Visits preview combined record
- public List<cTableRow> tableRows {
- get {
- tableRows = new List<cTableRow>();
- Integer rowsNumber = selectedContacts.size();
- for (Integer i=0; i<rowsNumber; i++) {
- tableRows.add(new cTableRow(visits[i],
- order[i]));
- }
- return tableRows;
- }
- set { //HOW TO INVOKE THIS METHOD?
- system.debug('Table rows status: '+tableRows);
- //setOrder();
- } /*{
- system.debug('Selected index: '+newIndex+'. Index to replace: '+oldIndex);
- Id tmpId = visits[oldIndex].Customer__c;
- visits[oldIndex].Customer__c = visits[newIndex].Customer__c;
- visits[newIndex].Customer__c = tmpId;
- rendPreview = true;
- system.debug('Reordered table: '+tableRows);
- }*/
- }
- //OR THIS METHOD?
- public void setTableRows(List<cTableRow> tableRows) {
- system.debug('Table rows before renew: '+tableRows);
- for (Integer i=0; i<tableRows.size(); i++) {
- this.tableRows[i].visitOrder = tableRows[i].visitOrder;
- }
- system.debug('Table rows after renew: '+tableRows);
- }
- public class cTableRow {
- //fields of the record
- public Id customerId { get; set; }
- public String customerName { get; set; }
- private DateTime visitStartDatetime { get; set; }
- private DateTime visitEndDatetime { get; set; }
- public Time visitStartTime { get; set; }
- public Time visitEndTime { get; set; }
- public Integer visitOrder { get; set; }
- public cTableRow(Visit__c v, Integer o) {
- customerId = v.Customer__c;
- List<Contact> contNames = [SELECT Name FROM Contact WHERE id=:customerId];
- customerName = contNames[0].Name;
- visitStartDatetime = v.startDateTime__c;
- visitEndDatetime = v.endDateTime__c;
- visitStartTime = visitStartDatetime.time();
- visitEndTime = visitEndDatetime.time();
- visitOrder = o;
- }
- }
- public void reOrder(Integer newIndex, Integer oldIndex) {
- system.debug('Selected index: '+newIndex+'. Index to replace: '+oldIndex);
- Id tmpId = visits[oldIndex].Customer__c;
- visits[oldIndex].Customer__c = visits[newIndex].Customer__c;
- visits[newIndex].Customer__c = tmpId;
- rendPreview = true;
- system.debug('Reordered table: '+tableRows);
- }
- //Render id="preview"
- public PageReference calculate() {
- //initiate Order
- if (order == NULL) {
- order = new List<Integer>();
- } else {
- order.clear();
- }
- //validate parameters
- //rerender "preview"
- rendPreview = true;
- return null;
- }
- public PageReference save() {
- //check order list for collisions
- for (Integer i=0; i<order.size(); i++) {
- Integer etalon = Order[i];
- for (Integer j=0; j<order.size(); j++) {
- if ((etalon==Order[j]) && (j!=i)) {
- //show validation error
- return null;
- }
- }
- }
- //prepare visits list (sort by order)
- for (Integer j=0; j<order.size(); j++) {
- if ((Order[j]!=j) && (Order[j]>j)) {
- newIndex = Order[j];
- oldIndex = j;
- //swap visits (customers)
- for (Integer i=0; i<visits.size(); i++) {
- Id tmpId = visits[oldIndex].Customer__c;
- visits[oldIndex].Customer__c = visits[newIndex].Customer__c;
- visits[newIndex].Customer__c = tmpId;
- }
- }
- }
- if (visits != null) {
- //insert visits;
- return null;
- } else {
- //show error message and
- return null;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement