Пример #1
0
        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);
        }
Пример #4
0
        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;
            }
        }