public async Task <EmploymentLeave> PutEmploymentLeave(EmploymentLeave employmentLeave)
 {
     return(await Put <EmploymentLeave, EmploymentLeave>($"biz/employeeLeave{employmentLeave.Id}", employmentLeave));
 }
        public async Task <Absence> ResendAbsence(int integrationUnitId, Absence absence)
        {
            await SignIn(integrationUnitId);

            foreach (var absenceEntry  in absence.AbsenceEntries)
            {
                var workTypeId = await _entityMapService.GetWorkTypeId(absenceEntry.LocalAbsenceCode, integrationUnitId);

                var isWorkItem = workTypeId != null;

                if (isWorkItem)
                {
                    var workRelationId = await _entityMapService.GetWorkRelationId(absence.EmployeeId, integrationUnitId);

                    absenceEntry.ExternalEntityId    = workRelationId.ToString();
                    absenceEntry.ExternalAbsenceCode = workTypeId.ToString();

                    var workItem = new WorkItem
                    {
                        // From AbsenceDay
                        StartTime  = absenceEntry.StartTime,
                        EndTime    = absenceEntry.EndTime,
                        WorkTypeId = workTypeId.Value,

                        // From Absence
                        UnitId         = absence.UnitId,
                        WorkRelationId = workRelationId.Value,
                        Description    = absence.Description,
                        LunchInMinutes = absence.LunchInMinutes
                    };
                    if (string.IsNullOrWhiteSpace(absenceEntry.ExternalId))
                    {
                        var externalId = await _unimicroClient.PostWorkItem(workItem);

                        absenceEntry.ExternalId = externalId.ToString();
                    }
                    else
                    {
                        workItem.Id = int.Parse(absenceEntry.ExternalId);
                        await _unimicroClient.PutWorkItem(workItem);
                    }
                }
                else
                {
                    var employementLeaveId = await _entityMapService.GetEmploymentLeaveId(absenceEntry.LocalAbsenceCode, absence.UnitId);

                    var isEmploymentLeave = employementLeaveId != null;

                    if (isEmploymentLeave)
                    {
                        var employmentId = await _entityMapService.GetEmploymentId(absence.EmployeeId, integrationUnitId);

                        absenceEntry.ExternalEntityId    = employmentId.ToString();
                        absenceEntry.ExternalAbsenceCode = employementLeaveId.ToString();

                        var employmentLeave = new EmploymentLeave()
                        {
                            EmploymentID = employmentId.Value,
                            LeaveType    = Enum.Parse <LeaveType>(employementLeaveId.Value.ToString()),
                            FromDate     = absenceEntry.StartTime.Date,
                            ToDate       = absenceEntry.StartTime.Date,
                            LeavePercent = 100
                        };

                        if (string.IsNullOrWhiteSpace(absenceEntry.ExternalId))
                        {
                            var externalId = await _unimicroClient.PostEmploymentLeave(employmentLeave);

                            absenceEntry.ExternalId = externalId.ToString();
                        }
                        else
                        {
                            employmentLeave.Id = int.Parse(absenceEntry.ExternalId);
                            await _unimicroClient.PutEmploymentLeave(employmentLeave);
                        }
                    }
                    else
                    {
                        throw new ArgumentException($"Mapping is not found for absencecode={absenceEntry.LocalAbsenceCode}. This error should have been taken care of in pre-validation");
                    }
                }
            }
            return(absence);
        }
        public async Task <int> PostEmploymentLeave(EmploymentLeave employmentLeave)
        {
            var createdEmploymentLeave = await Post <EmploymentLeave, EmploymentLeave>("biz/EmployeeLeave", employmentLeave);

            return(createdEmploymentLeave.Id);
        }