public async Task ExportAbsence(Absence absence) { var integration = await GetIntegrationRecursive(absence.UnitId); var validationResult = await Validate(absence, integration); if (validationResult.SkipFurtherProcessing) { Logger.LogInformation($"{validationResult.Message}. Absence will not be processed. UnitId:{absence?.UnitId}"); return; } var externalSystem = (ExternalEconomySystem)integration.ExternalSystem; var absenceExport = new AbsenceExport(absence); try { if (!validationResult.IsValid) { absenceExport.Status = AbsenceExportStatus.Failed; absenceExport.Message = validationResult.Message; return; } var externalSystemAdapter = _externalSystemFactory.CreateSystemAdapter(externalSystem); var existingAbsenceExport = await GetExistingAbsenceExport(absence.UnitId, absence.LocalId); if (existingAbsenceExport != null) { existingAbsenceExport.Status = AbsenceExportStatus.Obsolete; await _absenceExportService.UpdateAbsenceExport(existingAbsenceExport); absenceExport.Action = AbsenceExportAction.Update; await externalSystemAdapter.DeleteAbsence(integration.UnitId, existingAbsenceExport.Absence); } absenceExport.Absence = await externalSystemAdapter.ExportAbsence(integration.UnitId, absence); absenceExport.Status = AbsenceExportStatus.Success; absenceExport.Message = "Absence successfully exported"; } catch (ExternalSystemCommunicationException ex) { absenceExport.Status = AbsenceExportStatus.Failed; absenceExport.Message = $"Communication with external system failed: {ex.Message}"; Logger.LogInformation($"Communication with external system failed: {ex.Message}"); } catch (Exception ex) { absenceExport.Status = AbsenceExportStatus.Failed; absenceExport.Message = ex.Message; Logger.LogInformation(ex.Message); } finally { await _absenceExportService.CreateAbsenceExport(absenceExport); } }
public async Task <AbsenceExport> Create(AbsenceExport entity) { var mappedEntity = _mapper.Map <AbsenceExport, entities.AbsenceExport>(entity); mappedEntity.CreatedAt = DateTimeOffset.Now; mappedEntity.CreatedBy = _authorizationContextService.GetUserIdFromClaims().ToString(); using (var context = await _contextFactory.CreateDbContext()) { context.AbsenceExports.Add(mappedEntity); await context.SaveChangesAsync(); return(entity); } }
public entities.AbsenceExport AddInitialAbsence() { var employeeId = new Random().Next(100, 10000000); var localAbsenceId = new Random().Next(100, 10000000); var absence = new Absence() { LocalId = 69, UnitId = 1, EmployeeId = employeeId, AbsenceEntries = new List <AbsenceEntry> { new AbsenceEntry { ExternalAbsenceCode = null, ExternalEntityId = null, ExternalId = null, LocalAbsenceCode = localAbsenceId, IsFullDay = true, } } }; var uniqueId = Guid.NewGuid().ToString(); var uniqueMessage = Guid.NewGuid().ToString(); var absenceExport = new AbsenceExport() { Id = uniqueId.ToString(), UnitId = 1, EmployeeId = employeeId, Status = AbsenceExportStatus.Obsolete, Absence = absence, LocalAbsenceId = localAbsenceId, Message = uniqueMessage, }; var mappedEntity = _mapper.Map <AbsenceExport, entities.AbsenceExport>(absenceExport); var absenceExportCreated = _db.AbsenceExports.Add(mappedEntity); _db.SaveChanges(); return(mappedEntity); }
public async Task <AbsenceExport> UpdateAbsenceExport(AbsenceExport absenceExport) { var result = await _repository.Update(absenceExport); return(result); }