Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- global class BatchUserAbsence implements Database.Batchable<sObject>, Database.Stateful {
- List<User> usersToUpdate {get; set;}
- Map<Id, TimeReport__c> ownerIdToTrMap;
- global Database.querylocator start(Database.BatchableContext bc) {
- System.debug(LoggingLevel.WARN, '@# start');
- usersToUpdate = new List<User>();
- ownerIdToTrMap = new Map<Id, TimeReport__c>();
- Date today = Date.today();
- String query = 'SELECT Date__c, AbsenceEndDate__c, ParentTimeReportId__r.Date__c, ParentTimeReportId__r.AbsenceEndDate__c, ReplacementEmployeeId__r.OwnerId, Employee__r.OwnerId '
- + 'FROM timereport__c '
- + 'WHERE AbsenceType__c != null AND Status__c = \'Accepted\' AND Date__c =: today';
- System.debug(LoggingLevel.WARN, '@# query ' + query);
- return Database.getQueryLocator(query);
- }
- global void execute(Database.BatchableContext bc, List<sObject> scope) {
- System.debug(LoggingLevel.WARN, '@# scope ' + scope);
- for (sObject obj : scope) {
- TimeReport__c tr = (TimeReport__c)obj;
- ownerIdToTrMap.put(tr.Employee__r.OwnerId, tr);
- }
- System.debug(LoggingLevel.WARN, '@# mapa ' + ownerIdToTrMap);
- List<User> users = [SELECT AbsenceStartDate__c, AbsenceEndDate__c, AbsenceReplacementUser__c FROM User WHERE Id IN: ownerIdToTrMap.keySet()];
- System.debug(LoggingLevel.WARN, '@# users ' + users);
- for (User user : users) {
- if(ownerIdToTrMap.containsKey(user.Id)) {
- TimeReport__c tr = ownerIdToTrMap.get(user.Id);
- user.AbsenceStartDate__c = tr.ParentTimeReportId__r.Date__c != null ? tr.ParentTimeReportId__r.Date__c : tr.Date__c;
- user.AbsenceEndDate__c = tr.AbsenceEndDate__c != NULL ? tr.AbsenceEndDate__c : tr.ParentTimeReportId__r.AbsenceEndDate__c;
- if (tr.ReplacementEmployeeId__c != null) {
- user.AbsenceReplacementUser__c = tr.ReplacementEmployeeId__r.OwnerId;
- }
- } else {
- user.AbsenceStartDate__c = null;
- user.AbsenceEndDate__c = null;
- user.AbsenceReplacementUser__c = null;
- }
- }
- System.debug(LoggingLevel.WARN, users);
- usersToUpdate.addAll(users);
- }
- global void finish(Database.BatchableContext bc) {
- update usersToUpdate;
- //usuwam przypisany urlop jak sie skonczyl
- List<User> users = [SELECT AbsenceStartDate__c, AbsenceEndDate__c, AbsenceReplacementUser__c FROM User WHERE AbsenceStartDate__c != NULL];
- for (User user : users) {
- if(!ownerIdToTrMap.containsKey(user.Id)) {
- user.AbsenceStartDate__c = null;
- user.AbsenceEndDate__c = null;
- user.AbsenceReplacementUser__c = null;
- }
- }
- update users;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement