msenyk / sf-practicum-2022

Виробнича практика на платформі Salesforce
0 stars 0 forks source link

Код для генерації турів для типу екскурсії #8

Open msenyk opened 2 years ago

msenyk commented 2 years ago
thxnk commented 2 years ago

Метод буде приймати три параметри: String StartDate, String EndDay, List<Id> ids Назва методу: generateTours Назва класу: ExcursionController

msenyk commented 2 years ago

Все гаразд, але раджу почати з роботи над сервіс класом. Назвати який можна ToursGeneratorService або якось схоже.

thxnk commented 2 years ago

Є одне запитання: які давати назви згенерованим турам? Можна брати з типу екскурсії, і прибавляти дату?

thxnk commented 2 years ago

Чи можливо нам треба додати поле на компонент, куди користувач буде вводити ім'я яке захоче для цих турів?

msenyk commented 2 years ago

Можна створювати взагалі без імені, і написати окремий тригер, що буде оновлювати назву автоматично. Ви під час курсу мали розробляти подібний тригер.

foxxua commented 2 years ago

@thxnk Є декілька зауважень

  1. SOQL не можна робити в циклі - може впасти по лімітах
  2. в SOQL запити можна напряму підставити список Id, для цього є спеціальний синтаксис
  3. в SOQL запиті, коли звертаються до полів цього ж об"єкта непотрібно вказувати об"єкт. Я про це ExcursionTypes__c.Id
  4. по тому що написано, буде створено на кожен тип екскурсії по 1му туру. але 1 тип екскурсії може мати багато турів на туристичний сезон
  5. щоб перевірити умову непотрібно це робити так - while(startDay <= lastDay). Для цього є інший оператор. Повертаю таску в In Progress
foxxua commented 2 years ago

@thxnk

thxnk commented 2 years ago
public class ToursGeneratorService {
    public static void generateTours(Date startDay, Date lastDay, Id excId) {
        List<Tour__c> toursToInsert = new List<Tour__c>();
        ExcursionTypes__c excursion = [Select DaysOfWeek__c, TimeOfBeginning__c, NumbersOfTickets__c 
                                      FROM ExcursionTypes__c 
                                      WHERE Id =: excId];

        for( ;!startDay.isSameDay(lastDay); startDay = startDay.addDays(1)){
            DateTime dateOfTour = DateTime.newInstance(startDay, excursion.TimeOfBeginning__c);
            if(excursion.DaysOfWeek__c.contains(dateOfTour.format('EEEE'))){
                toursToInsert.add(makeNewTour(dateOfTour, excursion));
            }
        }
        insert toursToInsert;
    }
    public static Tour__c makeNewTour(DateTime tourDayTime ,ExcursionTypes__c excursion){
        return new Tour__c (Name = 'Tour',
                             DateTime__c = tourDayTime,
                             ExcursionType__c = excursion.Id,
                             NumberOfTickets__c = excursion.NumbersOfTickets__c,
                             Status__c = 'Planned'); 
    }
}