Esempio n. 1
0
        public ActionResult <MessageModel <RemitRecordDTO> > ApplyRemitRecord([FromBody] RemitRequest remitRequest, [FromRoute, SwaggerParameter("草稿匯款的id", Required = true)] int id)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }

            // KYC passed?
            var     userId  = long.Parse(User.FindFirstValue("id"));
            UserArc userArc = userService.GetUserArcById(userId);

            if (!helper.CheckIfKYCPassed(userArc))
            {
                return(BadRequest(new MessageModel <RemitRecordDTO>
                {
                    Status = (int)HttpStatusCode.BadRequest,
                    Success = false,
                    Msg = KYC_NOT_PASSED
                }));
            }

            // get draft remit
            RemitRecord record = remitRecordService.GetRemitRecordById(id);

            if (record == null || record.TransactionStatus != (short)RemitTransactionStatusEnum.Draft)
            {
                return(BadRequest(new MessageModel <RemitRecordDTO>
                {
                    Status = (int)HttpStatusCode.BadRequest,
                    Success = false,
                    Msg = "This Draft Remit doesn't exit or wrong status"
                }));
            }

            string validationResult = helper.ValidateFormalRemitRequestAndUpdateRemitRecord(remitRequest, record, userArc, remitRequest.Country ?? "TW");

            if (validationResult != null)
            {
                return(BadRequest(new MessageModel <RemitRecordDTO>
                {
                    Status = (int)HttpStatusCode.BadRequest,
                    Success = false,
                    Msg = validationResult
                }));
            }

            DateTime       now            = DateTime.UtcNow;
            RemitRecord    modifiedRecord = remitRecordService.ModifyRemitRecord(record, now);
            RemitRecordDTO recordDTO      = _mapper.Map <RemitRecordDTO>(modifiedRecord);

            // 系統掃ARC No.
            BackgroundJob.Enqueue(() => remitRecordService.SystemVerifyArcForRemitProcess(modifiedRecord, userId));

            return(Ok(new MessageModel <RemitRecordDTO>
            {
                Data = recordDTO
            }));
        }
        private string CheckDiscountExistence(RemitRequest remitRequest)
        {
            Discount discount = discountService.GetDoscountById((long)remitRequest.DiscountId);

            if (discount == null)
            {
                return("discount does not exist!");
            }
            remitRequest.DiscountAmount = discount.Value;
            return(null);
        }
        private string CheckCurrencyExistence(RemitRequest remitRequest)
        {
            CurrencyCode currency = currencyService.GetCurrencyById(remitRequest.ToCurrencyId);

            if (currency == null)
            {
                return("currency does not exist!");
            }
            remitRequest.ToCurrency = currency.CurrencyName;
            remitRequest.FeeType    = currency.FeeType;
            remitRequest.Fee        = currency.Fee;
            return(null);
        }
        public string ValidateFormalRemitRequestAndUpdateRemitRecord(RemitRequest remitRequest, RemitRecord remitRecord, UserArc userArc, String country)
        {
            string error = null;

            // check ToCurrency
            error = CheckCurrencyExistence(remitRequest);
            if (error != null)
            {
                return(error);
            }
            remitRecord.FeeType      = remitRequest.FeeType;
            remitRecord.Fee          = remitRequest.Fee;
            remitRecord.ToCurrencyId = remitRequest.ToCurrencyId;

            // check amount
            error = CheckIfAmountOutOfRange(userArc.UserId, remitRequest.FromAmount, "TW");
            if (error != null)
            {
                return(error);
            }
            ExchangeRate applyExchangeRate = exchangeRateService.GetExchangeRateByCurrencyName(remitRequest.ToCurrency);

            remitRecord.FromAmount        = remitRequest.FromAmount;
            remitRecord.ApplyExchangeRate = applyExchangeRate.Rate;
            remitRecord.FromCurrencyId    = currencyService.GetCurrencyByCountry(country)[0].Id;

            // check Beneficiary
            error = CheckBenificiarExistence(remitRequest.BeneficiaryId);
            if (error != null)
            {
                return(error);
            }
            remitRecord.BeneficiaryId = remitRequest.BeneficiaryId;

            // check uploaded picture
            error = CheckPhotoFileExistence(userArc, remitRecord.RealTimePic);
            if (error != null)
            {
                return(error);
            }
            error = CheckSignatureFileExistence(userArc, remitRecord.ESignature);
            if (error != null)
            {
                return(error);
            }

            // check discount
            if (remitRequest.DiscountId != null)
            {
                error = CheckDiscountExistence(remitRequest);
                if (error != null)
                {
                    return(error);
                }
                remitRecord.DiscountId     = remitRequest.DiscountId;
                remitRecord.DiscountAmount = remitRequest.DiscountAmount;
            }

            remitRecord.TransactionStatus = (short)RemitTransactionStatusEnum.WaitingArcVerifying;

            return(error);
        }