private void SendRequestToSD(SdKoersel.AnsaettelseKoerselOpretInputType request, DriveReport report) { try { var response = _sdClient.SendRequest(request); } catch (Exception e) { _logger.ErrorSd($"{this.GetType().ToString()}, sendDataToSd(), Error when sending data to SD, Servicenummer = {report.Employment.EmploymentId}, EmploymentId = {report.EmploymentId}, Report = {report.Id}", e); return; } report.Status = ReportStatus.Invoiced; var epoch = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc); var deltaTime = DateTime.Now.ToUniversalTime() - epoch; report.ProcessedDateTimestamp = (long)deltaTime.TotalSeconds; try { _driveReportRepo.Save(); } catch (Exception e) { _logger.ErrorSd($"{this.GetType().ToString()}, sendDataToSd(), Error when saving invoice status for report after sending to SD. Report has been sent, but status has NOT been changed, Servicenummer = {report.Employment.EmploymentId}, EmploymentId = {report.EmploymentId}, Report = {report.Id}", e); _logger.LogForAdmin($"En indberetning er blevet sendt til udbetaling via SD Løn, men dens status er ikke blevet ændret i OS2 Indberetning. Den vil dermed potentielt kunne sendes til udbetaling igen. Det drejer sig om medarbejder: {report.Person.Initials}, og indberetning med med ID: {report.Id}, kørt den: {new System.DateTime(1970, 1, 1, 0, 0, 0, 0).AddSeconds(report.DriveDateTimestamp)}"); } }
private void SendDataToSD() { _logger.ErrorSd($"{this.GetType().ToString()}, SendDataToSD(), --------- TRANSFER TO SD STARTED -----------"); var reportsToInvoice = _reportGenerator.ReceiveReportsToInvoiceSD(); _logger.ErrorSd($"{this.GetType().ToString()}, SendDataToSD(), Number of reports to invoice: {reportsToInvoice.Count}"); foreach (DriveReport report in reportsToInvoice) { var requestData = new SdKoersel.AnsaettelseKoerselOpretInputType(); try { requestData = PrepareRequestData(report); } catch (SdConfigException se) { throw se; // This error is a general config error, and must break the loop. } catch (Exception e) { _logger.ErrorSd($"{this.GetType().ToString()}, sendDataToSd(), Error when preparing data, Servicenummer = {report.Employment.EmploymentId}, EmploymentId = {report.EmploymentId}, Report = {report.Id}", e); continue; } SendRequestToSD(requestData, report); } var reportsToInvoiceWithZeroDistance = _driveReportRepo.AsQueryable().Where(x => x.Status == ReportStatus.Accepted && x.Distance == 0).ToList(); foreach (DriveReport report in reportsToInvoiceWithZeroDistance) { report.Status = ReportStatus.Invoiced; var epoch = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc); var deltaTime = DateTime.Now.ToUniversalTime() - epoch; report.ProcessedDateTimestamp = (long)deltaTime.TotalSeconds; try { _driveReportRepo.Save(); } catch (Exception e) { _logger.ErrorSd($"{this.GetType().ToString()}, sendDataToSd(), Error when saving invoice status for report with distance = 0", e); } } _logger.ErrorSd($"{this.GetType().ToString()}, SendDataToSD(), --------- TRANSFER TO SD FINISHED -----------"); }
private SdKoersel.AnsaettelseKoerselOpretInputType PrepareRequestData(DriveReport report) { SdKoersel.AnsaettelseKoerselOpretInputType opretInputType = new SdKoersel.AnsaettelseKoerselOpretInputType(); opretInputType.Item = _customSettings.SdInstitutionNumber; // InstitutionIdentifikator if (string.IsNullOrEmpty(opretInputType.Item)) { throw new SdConfigException("PROTECTED_institutionNumber må ikke være tom"); } opretInputType.ItemElementName = SdKoersel.ItemChoiceType.InstitutionIdentifikator; opretInputType.BrugerIdentifikator = report.ApprovedBy.CprNumber; opretInputType.Item1 = report.Employment.EmploymentId; // AnsaettelseIdentifikator opretInputType.RegistreringTypeIdentifikator = report.TFCode; opretInputType.GodkendtIndikator = true; opretInputType.KoerselDato = new System.DateTime(1970, 1, 1, 0, 0, 0, 0).AddSeconds(report.DriveDateTimestamp).ToLocalTime(); opretInputType.RegistreringNummerIdentifikator = report.LicensePlate; opretInputType.KontrolleretIndikator = true; opretInputType.KilometerMaal = Convert.ToDecimal(report.Distance); opretInputType.Regel60DageIndikator = false; opretInputType.DokumentationEksternIndikator = true; return(opretInputType); }