Static Namespace Public Sealed Class Private Const Decimal Private Const Int Private Private
Static Namespace Public Sealed Class Private Const Decimal Private Const Int Private Private
using System.Activities;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Query;
using Microsoft.Xrm.Sdk.Workflow;
using static HolidaysManagement.Helpers;
namespace HolidaysManagement
{
public sealed class AddHolidaysForBookableResources : CodeActivity
{
private const decimal ResourceWorkingHours = 8m;
private const int PayableHoursType = 100000000;
[Input("HolidayIds")]
[RequiredArgument]
public InArgument<string> HolidayIds { get; set; }
TracingService.Trace($"Message");
try
{
string[] holidayIds = HolidayIds.Get(executionContext).Split(',').ToArray();
IEnumerable<Entity> holidays = GetHolidays(OrgService, holidayIds);
IEnumerable<Entity> bookableResources = GetBookableResources();
foreach (Entity bookableResource in bookableResources)
{
Guid brId = bookableResource.Id;
DateTime brStartDate = bookableResource.GetAttributeValue<DateTime>("amc_startdate"
);
DateTime? brEndDate = null;
if (bookableResource.Contains("amc_enddate"))
{
brEndDate = bookableResource.GetAttributeValue<DateTime>("amc_enddate");
}
int brTargetUtilization = bookableResource.GetAttributeValue<int>("msdyn_targetutil
ization");
IEnumerable<Entity> brHolidays = GetBookableResourceHolidays(bookableResource.Id);
if (eLoc != hLoc)
{
continue;
}
try
{
// Change to union or other
Entity[] leftHolidays = holidays.Except(brHolidays, new EntityComparer(true)).T
oArray();
_Log($"Count holids = {leftHolidays.Count().ToString()}");
foreach (Entity holiday in leftHolidays)
{
_Log($"* IN CYCLE / brID = {brId}, holidLocObj = {holiday.GetAttributeValue
<OptionSetValue>("amc_holiday_location")}");
var eLoc = bookableResource.GetAttributeValue<OptionSetValue>("amc_employee
_location").Value;
var hLoc = holiday.GetAttributeValue<OptionSetValue>("amc_holiday_location"
).Value;
if (eLoc != hLoc)
{
_Log("* IN IF");
// Delete holiday for thit BR
// GET TE ID
var id = holiday.GetAttributeValue<Guid>("timeEntry");
_Log($"ID IN CYCLE = {id}");
// FIXME: This need id, current id == Guid(000-00)
var holidayTimeEntry = new Entity("msdyn_timeentry", id);
OrgService.Delete("msdyn_timeentry", id);
}
}
}
catch (Exception ex)
{
_Log($"* Hy TyT KaK Bce {ex.Message}");
}
}
}
catch (Exception ex)
{
TracingService.Trace($"Unhandled exception occurred!\nMessage: {ex.Message}\nStack trac
e: {ex.StackTrace}");
}
}
return OrgService.RetrieveMultiple(query).Entities;
}
query.ColumnSet.AddColumns("amc_holiday", "msdyn_timeentryid");
query.Criteria.AddCondition("amc_type", ConditionOperator.Equal, HolidayTimeEntryType);
query.Criteria.AddCondition("msdyn_date", ConditionOperator.Between, new DateTime(curre
ntYear, 1, 1), new DateTime(currentYear + 1, 1, 1));
query.Criteria.AddCondition("msdyn_bookableresource", ConditionOperator.Equal, bookable
ResourceId);
// FIXME
holiday.Attributes.Add("timeEntry", holidayTimeEntry.GetAttributeValue<Guid>("msdyn
_timeentryid"));
brHolidays.Add(holiday);
}