public async Task <IWrappedResponse> Rollback(Guid refLtmsTransactionId) { PostingRequestRollbackSyncRequest requestRollbackSyncRequest = new PostingRequestRollbackSyncRequest { RefLtmsTransactionId = refLtmsTransactionId }; var postingRequestsSyncRequest = new PostingRequestsSyncRequest { PostingRequestRollbackSyncRequests = new List <PostingRequestRollbackSyncRequest> { requestRollbackSyncRequest } }; var result = await _synchronizationsService.SendPostingRequestsAsync(postingRequestsSyncRequest); if (result.ResultType == ResultType.Failed) { return(new WrappedResponse { ResultType = ResultType.Failed, State = ErrorHandler.Create().AddMessage(new PostingRequestNotRolledBackError()).GetServiceState() }); } return(new WrappedResponse { ResultType = ResultType.Ok }); }
public async Task <IWrappedResponse> SendPostingRequestsAsync(PostingRequestsSyncRequest request) { try { _queueClient = new QueueClient(_syncServiceBusConnectionString, _postingRequestSyncRequestQueueName, retryPolicy: RetryPolicy.Default); var messageBody = JsonConvert.SerializeObject(request); var message = new Message(Encoding.UTF8.GetBytes(messageBody)) { ContentType = @"application/json" }; await _queueClient.SendAsync(message); return(new WrappedResponse { ResultType = ResultType.Ok }); } catch (Exception exception) { ErrorHandler.Create() .LogException(new SynchronizationException("Send posting request failed.", exception), request); return(new WrappedResponse { ResultType = ResultType.Failed }); } }
public async Task <IWrappedResponse <long> > SchedulePostingRequestsAsync(PostingRequestsSyncRequest request, DateTimeOffset dateTimeOffset) { _queueClient = new QueueClient(_syncServiceBusConnectionString, _postingRequestSyncRequestQueueName, retryPolicy: RetryPolicy.Default); var messageBody = JsonConvert.SerializeObject(request); var message = new Message(Encoding.UTF8.GetBytes(messageBody)); var numberSequence = await _queueClient.ScheduleMessageAsync(message, dateTimeOffset); return(new WrappedResponse <long> { ResultType = ResultType.Ok, Data = numberSequence }); }
public async Task <IWrappedResponse> Create(PostingRequestsCreateRequest request) { var olmaPostingRequests = new List <Olma.PostingRequest>(); foreach (var postingRequestPosition in request.Positions) { var olmaPostingRequest = Mapper.Map <Olma.PostingRequest>(request); olmaPostingRequest.LoadCarrierId = postingRequestPosition.LoadCarrierId; olmaPostingRequest.LoadCarrierQuantity = postingRequestPosition.LoadCarrierQuantity; olmaPostingRequest.SyncDate = DateTime.UtcNow; _olmaPostingRequestRepo.Create(olmaPostingRequest); _olmaPostingRequestRepo.Save(); var postingRequest = olmaPostingRequest; olmaPostingRequest = _olmaPostingRequestRepo.FindByCondition(pr => pr.Id == postingRequest.Id) .Include(lc => lc.LoadCarrier) .Include(pa => pa.PostingAccount) .FirstOrDefault(); if (olmaPostingRequest == null) { return(Failed <IEnumerable <PostingRequest> >()); } if (string.IsNullOrEmpty(request.ReferenceNumber)) { olmaPostingRequest.ReferenceNumber = await _numberSequencesService.GetProcessNumber(ProcessType.PostingRequest, olmaPostingRequest.Id); } olmaPostingRequests.Add(olmaPostingRequest); } var postingRequestsSyncRequest = new PostingRequestsSyncRequest { PostingRequestCreateSyncRequests = new List <PostingRequestCreateSyncRequest>() }; var postingRequestCreateSyncRequest = new PostingRequestCreateSyncRequest { IsSortingRequired = olmaPostingRequests.Select(i => i.IsSortingRequired).FirstOrDefault(), Positions = olmaPostingRequests.Select(pr => new PostingRequestPosition { RefLtmsPalletId = pr.LoadCarrier.RefLtmsPalletId, LoadCarrierQuantity = pr.LoadCarrierQuantity, RefLtmsBookingRowGuid = pr.RowGuid }), CreditRefLtmsAccountId = olmaPostingRequests.Select(pr => pr.DestinationRefLtmsAccountId).FirstOrDefault(), DebitRefLtmsAccountId = olmaPostingRequests.Select(pr => pr.SourceRefLtmsAccountId).FirstOrDefault(), ReferenceNumber = olmaPostingRequests.Select(pr => pr.ReferenceNumber).FirstOrDefault(), IssuedByRefLtmsAccountId = olmaPostingRequests.Select(pr => pr.PostingAccount.RefLtmsAccountId) .FirstOrDefault(), Note = olmaPostingRequests.Select(pr => pr.Note).FirstOrDefault(), RefLtmsProcessId = olmaPostingRequests.Select(pr => pr.RefLtmsProcessId).FirstOrDefault(), RefLtmsProcessType = (RefLtmsProcessType)olmaPostingRequests.Select(pr => pr.RefLtmsProcessTypeId) .FirstOrDefault(), RefLtmsTransactionId = request.RefLtmsTransactionRowGuid ?? olmaPostingRequests.Select(pr => pr.RefLtmsTransactionId).FirstOrDefault(), DocumentFileName = request.DocumentFileName, IsSelfService = request.IsSelfService, DigitalCode = request.DigitalCode, DeliveryNoteNumber = request.DeliveryNoteNumber, PickUpNoteNumber = request.PickUpNoteNumber, RefLmsBusinessTypeId = request.RefLmsBusinessTypeId }; var result = Mapper.Map <IEnumerable <Olma.PostingRequest>, IEnumerable <PostingRequest> >(olmaPostingRequests); postingRequestsSyncRequest.PostingRequestCreateSyncRequests.Add(postingRequestCreateSyncRequest); var syncResult = await _synchronizationsService.SendPostingRequestsAsync(postingRequestsSyncRequest); // Switch (override) Type and loadCarrierQuantity sign when quantity is negative to support Split Bookings // PostingRequests have to have positive quantities all the time if (olmaPostingRequests.Any(r => r.LoadCarrierQuantity < 0)) { foreach (var postingRequest in olmaPostingRequests.Where(r => r.LoadCarrierQuantity < 0)) { postingRequest.LoadCarrierQuantity = Math.Abs(postingRequest.LoadCarrierQuantity); postingRequest.Type = PostingRequestType.Credit; } _olmaPostingRequestRepo.Save(); } if (syncResult.ResultType != ResultType.Ok) { return(new WrappedResponse { ResultType = ResultType.Failed }); } return(Created(result)); }
private async Task CheckPostingRequestsSyncDate(CancellationToken stoppingToken) { using var scope = Services.CreateScope(); var olmaPostingRequestRepo = scope.ServiceProvider.GetRequiredService <IRepository <Olma.PostingRequest> >(); var postingRequests = olmaPostingRequestRepo.FindByCondition(pr => //PostingRequest created but not synchronized !pr.IsDeleted && !pr.SyncDate.HasValue) .Include(lc => lc.LoadCarrier) .Include(pa => pa.PostingAccount) .IgnoreQueryFilters().ToList(); if (postingRequests.Any()) { var postingRequestsGroupedByTransactionId = postingRequests.GroupBy(pr => pr.RefLtmsTransactionId); foreach (var postingRequestGroup in postingRequestsGroupedByTransactionId) { var postingRequestsSyncRequest = new PostingRequestsSyncRequest { PostingRequestCreateSyncRequests = new List <PostingRequestCreateSyncRequest>() }; var postingRequestCreateSyncRequest = new PostingRequestCreateSyncRequest { IsSortingRequired = postingRequestGroup.Select(i => i.IsSortingRequired).FirstOrDefault(), CreditRefLtmsAccountId = postingRequestGroup.Select(pr => pr.DestinationRefLtmsAccountId).FirstOrDefault(), DebitRefLtmsAccountId = postingRequestGroup.Select(pr => pr.SourceRefLtmsAccountId).FirstOrDefault(), IssuedByRefLtmsAccountId = postingRequestGroup.Select(pr => pr.PostingAccount.RefLtmsAccountId).FirstOrDefault(), Note = postingRequestGroup.Select(pr => pr.Note).FirstOrDefault(), ReferenceNumber = postingRequestGroup.Select(pr => pr.ReferenceNumber).FirstOrDefault(), RefLtmsProcessId = postingRequestGroup.Select(pr => pr.RefLtmsProcessId).FirstOrDefault(), RefLtmsProcessType = (RefLtmsProcessType)postingRequestGroup.Select(pr => pr.RefLtmsProcessTypeId).FirstOrDefault(), RefLtmsTransactionId = postingRequestGroup.Select(pr => pr.RefLtmsTransactionId).FirstOrDefault(), Positions = postingRequestGroup.Select(pr => new PostingRequestPosition { RefLtmsPalletId = pr.LoadCarrier.RefLtmsPalletId, LoadCarrierQuantity = pr.LoadCarrierQuantity, RefLtmsBookingRowGuid = pr.RowGuid }) }; postingRequestsSyncRequest.PostingRequestCreateSyncRequests.Add(postingRequestCreateSyncRequest); var synchronizationsService = scope.ServiceProvider.GetRequiredService <ISynchronizationsService>(); var syncResult = await synchronizationsService.SendPostingRequestsAsync(postingRequestsSyncRequest); if (syncResult.ResultType == ResultType.Ok) { foreach (var olmaPostingRequest in postingRequestGroup) { olmaPostingRequest.SyncDate = DateTime.UtcNow; olmaPostingRequestRepo.Update(olmaPostingRequest); } olmaPostingRequestRepo.Save(); } } } await Task.Delay(30000, stoppingToken); }