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);
            }
        }
Esempio n. 2
0
        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);
        }