public async Task <ActionResult> SaveDraft(Model.Aes aesObject) { if (aesObject == null) { return(BadRequest("Invalid aes object")); } if (string.IsNullOrEmpty(aesObject.Id)) { return(BadRequest("Invalid aes id")); } var item = await aesDbRepository.GetItemAsync <Model.Aes>(aesObject.Id); if (item == null) { return(NotFound("Invalid aes id")); } this.mapper.Map(aesObject, item); if (item.SubmissionStatus == AesStatus.PENDING || item.SubmissionStatus == AesStatus.DRAFT) { item.SubmissionStatus = AesStatus.DRAFT; item.SubmissionStatusDescription = string.Empty; } item.DraftDate = DateTime.UtcNow.ToString(); var response = await aesDbRepository.UpdateItemAsync(aesObject.Id, item); return(Ok()); }
private static void ApplyCustomsSuccessStatus(Model.Aes item, FtpReponseStructure response) { item.SubmissionResponse.Status = "SUCCESS"; item.SubmissionStatus = AesStatus.CUSTOMSAPPROVED; item.SubmissionStatusDescription = response.narrativeText; item.ShipmentHeader.OriginalItn = response.internalTransactionNumber; }
private void AddItemToCustomsResponse(FtpReponseStructure response, Model.Aes item) { var responseItem = new CustomsResponse() { NarrativeText = response.narrativeText, ResponseCode = response.responseCode, SeverityIndicator = response.severityIndicator, ReasonCode = response.reasonCode, FinalDestinationIndicator = response.finalDispositionIndicator }; item.SubmissionResponse.CustomsResponseList.Add(responseItem); }
public async Task <ActionResult> Submit(Model.Aes aesObject) { if (aesObject == null) { return(BadRequest("Invalid aes object")); } var item = await aesDbRepository.GetItemAsync <Model.Aes>(aesObject.Id); if (item == null) { return(NotFound("Invalid aes id")); } if (string.IsNullOrEmpty(aesObject.ShipmentHeader.ShipmentReferenceNumber)) { return(BadRequest("Invalid ShipmentReference Number")); } if (aesObject.SubmissionStatus == AesStatus.SUBMITTED) { return(BadRequest("Already submited, waiting for acknowledgement !!")); } // message id aesObject.Header.MessageId = this.Configuration["AppSettings:MessageId"]; aesObject.StatusNotification = new List <Model.SubClasses.StatusNotification>(); if (!string.IsNullOrEmpty(aesObject.PicUser?.Email)) { aesObject.StatusNotification.Add(new Model.SubClasses.StatusNotification() { Name = aesObject.PicUser.FirstName, NotificationType = "ALL", Email = aesObject.PicUser.Email }); } // submitted user if (!string.IsNullOrEmpty(aesObject.SubmittedUser?.Email)) { aesObject.StatusNotification.Add(new Model.SubClasses.StatusNotification() { Name = aesObject.SubmittedUser.FirstName, NotificationType = "ALL", Email = aesObject.SubmittedUser.Email }); } this.mapper.Map(aesObject, item); if (item.SubmissionStatus == AesStatus.CUSTOMSAPPROVED) { if (item.ShipmentHeader.ShipmentAction != "X") { item.ShipmentHeader.ShipmentAction = "R"; } } else if (item.ShipmentHeader.ShipmentAction != "R") { item.ShipmentHeader.ShipmentAction = "A"; } item.Header.ActionType = this.Configuration["AppSettings:ActionType"]; var getsAes = (GetsAes)item; getsAes.Header.Sentat = DateTime.UtcNow.ToString("yyyy-MM-ddTHH\\:mm\\:ss.fffZ"); // DateTime.UtcNow.ToString("o"); //getsAes.Header.Sentat = DateTime.UtcNow.ToString("s") + "Z"; try { var signature = await this.ixService.GetSignatureAsync(getsAes.Header.Senderappcode, getsAes.Header.Sentat); getsAes.Header.Signature = signature.Trim('"'); } catch (Exception ex) { return(StatusCode(500, ex.Message)); } //if MOT=34 (Road,Other) then remove transportationDEtails node if (aesObject.Transportation != null && aesObject.Transportation.ModeofTransport == "34") { aesObject.Transportation.TransportationDetails = null; } await aesDbRepository.UpdateItemAsync(aesObject.Id, item); // submit to IX var ixResponse = await this.ixService.SubmitAes(getsAes); if (ixResponse.HttpStatusCode == HttpStatusCode.OK) { item.SubmissionStatus = AesStatus.SUBMITTED; item.SubmittedOn = DateTime.UtcNow; item.SubmissionStatusDescription = "Waiting for confirmation from GETS"; var response = await aesDbRepository.UpdateItemAsync(aesObject.Id, item); return(Ok(response)); } if (ixResponse.HttpStatusCode == HttpStatusCode.BadRequest) { return(BadRequest(ixResponse.ErrorMessage)); } if (ixResponse.HttpStatusCode == HttpStatusCode.Unauthorized) { return(StatusCode(401, "Authorization error when communicating with IX server")); } return(StatusCode(500, "An error occured while communicating with IX server")); }
private void ProcessCustomsStructure(Ftpcommodityshipment ftpcommodityShipment, Model.Aes item) { var isShipmentCancelled = false; var responseText = string.Empty; var isShipmentRejected = false; item.SubmissionResponse = new SubmissionResponse(); if (ftpcommodityShipment.ftpshipmentHeaderResponse?.Count > 0) { foreach (var shipmentHeaderResponse in ftpcommodityShipment.ftpshipmentHeaderResponse) { AddItemToCustomsResponse(shipmentHeaderResponse, item); if (!string.IsNullOrEmpty(shipmentHeaderResponse.internalTransactionNumber)) { ApplyCustomsSuccessStatus(item, shipmentHeaderResponse); } if (shipmentHeaderResponse.narrativeText.ToUpper().Contains("REJECTED")) { isShipmentRejected = true; responseText = shipmentHeaderResponse.narrativeText; } if (shipmentHeaderResponse.narrativeText.ToUpper().Contains("CANCELLED")) { isShipmentCancelled = true; responseText = shipmentHeaderResponse.narrativeText; } } } if (ftpcommodityShipment.ftpcommodityLineItemGroup != null) { foreach (var commodityLineItemGroup in ftpcommodityShipment.ftpcommodityLineItemGroup) { if (commodityLineItemGroup.ftplineItemHeaderResponse != null) { foreach (var lineItemHeaderResponse in commodityLineItemGroup.ftplineItemHeaderResponse) { AddItemToCustomsResponse(lineItemHeaderResponse, item); if (!string.IsNullOrEmpty(lineItemHeaderResponse.internalTransactionNumber)) { ApplyCustomsSuccessStatus(item, lineItemHeaderResponse); } if (lineItemHeaderResponse.narrativeText.ToUpper().Contains("REJECTED")) { isShipmentRejected = true; responseText = lineItemHeaderResponse.narrativeText; } } } if (commodityLineItemGroup.ftplineItemHeaderContinuationResponse != null) { foreach (var lineItemHeaderContinuationResponse in commodityLineItemGroup.ftplineItemHeaderContinuationResponse) { AddItemToCustomsResponse(lineItemHeaderContinuationResponse, item); if (!string.IsNullOrEmpty(lineItemHeaderContinuationResponse.internalTransactionNumber)) { ApplyCustomsSuccessStatus(item, lineItemHeaderContinuationResponse); } if (lineItemHeaderContinuationResponse.narrativeText.ToUpper().Contains("REJECTED")) { isShipmentRejected = true; responseText = lineItemHeaderContinuationResponse.narrativeText; } } } if (commodityLineItemGroup.ftpdDTCLicenseDetailResponse != null) { foreach (var licenseDetailResponse in commodityLineItemGroup.ftpdDTCLicenseDetailResponse) { AddItemToCustomsResponse(licenseDetailResponse, item); if (!string.IsNullOrEmpty(licenseDetailResponse.internalTransactionNumber)) { ApplyCustomsSuccessStatus(item, licenseDetailResponse); } if (licenseDetailResponse.narrativeText.ToUpper().Contains("REJECTED")) { isShipmentRejected = true; responseText = licenseDetailResponse.narrativeText; } } } } } if (ftpcommodityShipment.ftpshipmentHeaderContinuationResponse != null) { foreach (var shipmentHeaderContinuationResponse in ftpcommodityShipment .ftpshipmentHeaderContinuationResponse) { AddItemToCustomsResponse(shipmentHeaderContinuationResponse, item); if (!string.IsNullOrEmpty(shipmentHeaderContinuationResponse.internalTransactionNumber)) { ApplyCustomsSuccessStatus(item, shipmentHeaderContinuationResponse); } if (shipmentHeaderContinuationResponse.narrativeText.ToUpper().Contains("REJECTED")) { isShipmentRejected = true; responseText = shipmentHeaderContinuationResponse.narrativeText; } } } if (ftpcommodityShipment.ftptransportationGroup != null) { foreach (var transportationGroup in ftpcommodityShipment.ftptransportationGroup) { if (transportationGroup.transportationDetailResponse != null) { foreach (var line in transportationGroup.transportationDetailResponse) { AddItemToCustomsResponse(line, item); if (!string.IsNullOrEmpty(line.internalTransactionNumber)) { ApplyCustomsSuccessStatus(item, line); } if (line.narrativeText.ToUpper().Contains("REJECTED")) { isShipmentRejected = true; responseText = line.narrativeText; } } } } } if (ftpcommodityShipment.ftpshipmentPartyGroup != null) { foreach (var shipmentPartyGroup in ftpcommodityShipment.ftpshipmentPartyGroup) { if (shipmentPartyGroup.partyHeaderResponse != null) { foreach (var partyHeaderResponse in shipmentPartyGroup.partyHeaderResponse) { AddItemToCustomsResponse(partyHeaderResponse, item); if (!string.IsNullOrEmpty(partyHeaderResponse.internalTransactionNumber)) { ApplyCustomsSuccessStatus(item, partyHeaderResponse); } if (partyHeaderResponse.narrativeText.ToUpper().Contains("REJECTED")) { isShipmentRejected = true; responseText = partyHeaderResponse.narrativeText; } } } if (shipmentPartyGroup.partyAddressResponse != null) { foreach (var partyAddressResponse in shipmentPartyGroup.partyAddressResponse) { AddItemToCustomsResponse(partyAddressResponse, item); if (!string.IsNullOrEmpty(partyAddressResponse.internalTransactionNumber)) { ApplyCustomsSuccessStatus(item, partyAddressResponse); } if (partyAddressResponse.narrativeText.ToUpper().Contains("REJECTED")) { isShipmentRejected = true; responseText = partyAddressResponse.narrativeText; } } } if (shipmentPartyGroup.partyAddressContinuationResponse != null) { foreach (var partyAddressContinuationResponse in shipmentPartyGroup .partyAddressContinuationResponse) { AddItemToCustomsResponse(partyAddressContinuationResponse, item); if (!string.IsNullOrEmpty(partyAddressContinuationResponse.internalTransactionNumber)) { ApplyCustomsSuccessStatus(item, partyAddressContinuationResponse); } if (partyAddressContinuationResponse.narrativeText.ToUpper().Contains("REJECTED")) { isShipmentRejected = true; responseText = partyAddressContinuationResponse.narrativeText; } } } } } if (isShipmentCancelled) { item.SubmissionResponse.Status = "SUCCESS"; item.SubmissionStatus = AesStatus.CANCELLED; item.SubmissionStatusDescription = responseText; } else if (isShipmentRejected) { item.SubmissionStatus = AesStatus.CUSTOMSREJECTED; item.SubmissionStatusDescription = responseText; } else if (item.SubmissionStatus != AesStatus.CUSTOMSAPPROVED && item.SubmissionStatus != AesStatus.CUSTOMSREJECTED) { // nohting found on xml to decide success so failed item.SubmissionResponse.Status = "FAIL"; item.SubmissionStatus = AesStatus.CUSTOMSREJECTED; item.SubmissionStatusDescription = "Automatically set by AES, found no relevant information to process. Please see response details."; item.ShipmentHeader.OriginalItn = string.Empty; } }