Пример #1
0
        public async Task RemoveArcFromList(string userId, int id)
        {
            var arc = this.dbContext.Arcs.Find(id);

            if (arc == null)
            {
                throw new KeyNotFoundException("Arc with given id does not exist.");
            }

            var user = this.dbContext.Users
                       .Include(u => u.UsersArcs)
                       .FirstOrDefault(u => u.Id == userId);

            if (!user.UsersArcs.Any(uv => uv.Arc == arc))
            {
                throw new InvalidOperationException("User does not have given arc in their list.");
            }

            var userArc = new UserArc {
                User = user, Arc = arc
            };

            user.UsersArcs.Remove(userArc);
            await this.dbContext.SaveChangesAsync();
        }
        public async Task <string> SavePic(UserArc userArc, byte imageType, IFormFile image)
        {
            string mainFolder = imageType switch
            {
                0 => ((PictureTypeEnum)imageType).ToString().ToLower(),
                1 => ((PictureTypeEnum)imageType).ToString().ToLower(),
                2 => ((PictureTypeEnum)imageType).ToString().ToLower(),
                3 => ((PictureTypeEnum)imageType).ToString().ToLower(),
                _ => PictureTypeEnum.Other.ToString().ToLower(),
            };
            string resultFileName = imageType + "_" + userArc.ArcNo + "_" + DateTimeOffset.Now.ToUnixTimeSeconds().ToString();
            string folder         = mainFolder + Path.DirectorySeparatorChar + userArc.UserId;
            string fileFullName   = folder + resultFileName;

            try
            {
                BlobContainerClient blobContainer = await GetOrCreateCloudBlobContainer(GetUploadPicContainerName(), PublicAccessType.None);

                if (fileFullName != null && image != null)
                {
                    BlobClient blobClient = blobContainer.GetBlobClient(fileFullName);
                    await blobClient.UploadAsync(image.OpenReadStream());

                    return(blobClient.Uri.AbsoluteUri);
                }
                return("");
            }
            catch (Exception ex)
            {
                throw (ex);
            }
        }
        public async Task <int?> RateArc(string userId, RateApiRequestModel model)
        {
            var arc = this.dbContext.Arcs.Find(model.Id);

            if (arc != null)
            {
                var userArc = arc.UsersArcs.FirstOrDefault(ua => ua.UserId == userId);

                if (userArc == null)
                {
                    userArc = new UserArc
                    {
                        UserId = userId,
                        ArcId  = model.Id,
                        Score  = model.Score,
                    };

                    arc.UsersArcs.Add(userArc);

                    this.dbContext.Update(arc);
                    await this.dbContext.SaveChangesAsync();
                }
                else
                {
                    userArc.Score = model.Score;

                    this.dbContext.Update(arc);
                    await this.dbContext.SaveChangesAsync();
                }

                return(model.Score);
            }

            return(null);
        }
Пример #4
0
        public async Task <bool> CheckUploadFileExistence(UserArc userArc, PictureTypeEnum typeEnum, String fileName)
        {
            String folder   = typeEnum.ToString().ToLower() + Path.DirectorySeparatorChar + userArc.UserId;
            var    filePath = Path.Combine(folder, fileName);

            return(folderHandler.IsFileExists(workingRootPath, filePath));
        }
        public async Task <IActionResult> GetUserImage([FromRoute, SwaggerParameter("id,可從/useradmin取得", Required = true)] long userId,
                                                       [FromRoute, SwaggerParameter("2:證件正面照,3:證件反面照", Required = true)] byte type)
        {
            UserArc userArc       = userService.GetUserArcById(userId);
            string  imageFileName = null;

            switch (type)
            {
            case (byte)PictureTypeEnum.Front:
                imageFileName = userArc.IdImageA;
                break;

            case (byte)PictureTypeEnum.Back:
                imageFileName = userArc.IdImageB;
                break;
            }

            var image = await uploadPicService.LoadImage(userArc, type, imageFileName);

            if (image == null)
            {
                return(NotFound());
            }

            return(File(image, "image/jpeg"));
        }
Пример #6
0
 private void AddScanRecordAndUpdateUserKycStatus(ArcScanRecord record, UserArc userArc, RemitRecord remitRecord)
 {
     using var transaction = dbContext.Database.BeginTransaction();
     try
     {
         // for demo
         if (configuration["IsDemo"] != null && bool.Parse(configuration["IsDemo"]) == true)
         {
             var demoArcArray = configuration.GetSection("DemoArc").Get <string[]>();
             if (Array.IndexOf(demoArcArray, userArc.ArcNo) > -1)
             {
                 remitRecord.TransactionStatus = (short)RemitTransactionStatusEnum.SuccessfulAmlVerification;
                 userArc.KycStatus             = (short)KycStatusEnum.PASSED_KYC_FORMAL_MEMBER;
             }
         }
         //
         arcScanRecordService.AddScanRecord(record);
         userArc.LastArcScanRecordId = record.Id;
         userArc.UpdateTime          = DateTime.UtcNow;
         dbContext.UserArc.Update(userArc);
         dbContext.SaveChanges();
         remitRecord.ArcScanRecordId = record.Id;
         dbContext.RemitRecord.Update(remitRecord);
         dbContext.SaveChanges();
         transaction.Commit();
         return;
     }
     catch (Exception ex)
     {
         logger.LogError(ex, null);
         transaction.Rollback();
     }
 }
Пример #7
0
        public ActionResult <MessageModel <RemitRecordDTO> > GetRemitRecordById([FromRoute, SwaggerParameter("交易紀錄id", Required = true)] long id)
        {
            var         userId  = long.Parse(User.FindFirstValue("id"));
            UserArc     userArc = userService.GetUserArcById(userId);
            RemitRecord record  = remitRecordService.GetRemitRecordById(id);

            if (record != null && record.UserId != userId)
            {
                return(Unauthorized(new MessageModel <RemitRecordDTO>
                {
                    Status = (int)HttpStatusCode.Unauthorized,
                    Success = false,
                    Msg = NOT_AUTHORIZED
                }));
            }


            List <ReceiveBank> banks          = bankService.GetReceiveBanks();
            ReceiveBank        bank           = banks.Find(bank => bank.Id == record.Beneficiary.ReceiveBankId);
            RemitRecordDTO     remitRecordDTO = _mapper.Map <RemitRecordDTO>(record);

            remitRecordDTO.BankEnName   = bank.EnName;
            remitRecordDTO.BankTwName   = bank.TwName;
            remitRecordDTO.BankVietName = bank.VietName;

            return(Ok(new MessageModel <RemitRecordDTO>()
            {
                Data = remitRecordDTO
            }));
        }
 public bool CheckIfKYCPassed(UserArc userArc)
 {
     if (userArc != null && userArc.KycStatus == (short)KycStatusEnum.PASSED_KYC_FORMAL_MEMBER)
     {
         return(true);
     }
     return(false);
 }
 private string CheckSignatureFileExistence(UserArc userArc, string filename)
 {
     if (!uploadPicService.CheckUploadFileExistence(userArc, PictureTypeEnum.Signature, filename).Result)
     {
         return("Signature file does not exist!");
     }
     return(null);
 }
 private string CheckPhotoFileExistence(UserArc userArc, string filename)
 {
     if (!uploadPicService.CheckUploadFileExistence(userArc, PictureTypeEnum.Instant, filename).Result)
     {
         return("Photo file does not exist!");
     }
     return(null);
 }
Пример #11
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
            }));
        }
Пример #12
0
 public UserArc UpdateUserArc(UserArc modifyUserArc, UserArc originalUserArc)
 {
     dbContext.Entry(originalUserArc).CurrentValues.SetValues(modifyUserArc);
     dbContext.Entry(originalUserArc).Property(x => x.UserId).IsModified     = false;
     dbContext.Entry(originalUserArc).Property(x => x.CreateTime).IsModified = false;
     originalUserArc.UpdateTime = DateTime.UtcNow;
     dbContext.SaveChanges();
     return(modifyUserArc);
 }
Пример #13
0
        public ActionResult <MessageModel <RemitRecordDTO> > CreateDraftRemitRecord([FromBody] DraftRemitRequest draftRemitRequest)
        {
            if (!ModelState.IsValid)
            {
                var errors = ModelState.Select(x => x.Value.Errors)
                             .Where(y => y.Count > 0)
                             .ToList();

                return(BadRequest(new MessageModel <RemitRecordDTO>
                {
                    Status = (int)HttpStatusCode.BadRequest,
                    Success = false,
                    Msg = string.Join(",", errors)
                }));
            }
            // 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
            RemitRecord draftRemitRecord = remitRecordService.GetDraftRemitRecordByUserArc(userArc);

            if (draftRemitRecord != null)
            {
                remitRecordService.DeleteRmitRecord(draftRemitRecord);
            }

            draftRemitRecord = new RemitRecord();
            string error = helper.CheckAndSetDraftRemitProperty(userArc, draftRemitRecord, draftRemitRequest, draftRemitRequest.Country ?? "TW");

            if (error != null)
            {
                return(BadRequest(new MessageModel <RemitRecordDTO>
                {
                    Status = (int)HttpStatusCode.BadRequest,
                    Success = false,
                    Msg = error
                }));
            }
            draftRemitRecord = remitRecordService.CreateRemitRecordByUserArc(userArc, draftRemitRecord, PayeeTypeEnum.Bank);


            return(Ok(new MessageModel <RemitRecordDTO>
            {
                Data = _mapper.Map <RemitRecordDTO>(draftRemitRecord)
            }));
        }
Пример #14
0
        public bool ReigsterUser(User user, UserArc userArc, UserRegisterType userRegisterType)
        {
            dbContext.User.Update(user);
            dbContext.UserArc.Update(userArc);
            dbContext.UserRegisterType.Update(userRegisterType);

            dbContext.SaveChanges();

            return(true);
        }
Пример #15
0
        public List <RemitRecord> GetOngoingRemitRecordsByUserArc(UserArc userArc)
        {
            short[] completedStatus =
            {
                (short)RemitTransactionStatusEnum.Complete, (short)RemitTransactionStatusEnum.FailedVerified, (short)RemitTransactionStatusEnum.OtherError,
            };
            List <short> completedStatusList = completedStatus.ToList();

            return(dbContext.RemitRecord.Where <RemitRecord>(record => record.UserId == userArc.UserId && !completedStatusList.Contains(record.TransactionStatus)).ToList());
        }
        public async Task <bool> CheckUploadFileExistence(UserArc userArc, PictureTypeEnum typeEnum, String imageFileUri)
        {
            String[]            imageUriArray = imageFileUri.Split('/');
            String              imageFileName = WebUtility.UrlDecode(imageUriArray[imageUriArray.Length - 1]);
            BlobContainerClient blobContainer = await GetOrCreateCloudBlobContainer(GetUploadPicContainerName(), PublicAccessType.None);

            BlobClient imageBlob = blobContainer.GetBlobClient(imageFileName);
            bool       isExist   = await imageBlob.ExistsAsync();

            return(isExist);
        }
Пример #17
0
        public async Task SystemVerifyArcForRegisterProcess(long userId)
        {
            UserArc userArc = GetUserArcById(userId);

            if (userArc.ArcIssueDate == null || userArc.ArcExpireDate == null)
            {
                logger.LogError("ARC data error");
                throw new Exception("ARC Data not sufficient");
            }
            ArcValidationResult arcValidationResult = arcValidationTask.Validate(workingRootPath, userArc.ArcNo, ((DateTime)userArc.ArcIssueDate).ToString("yyyyMMdd"), ((DateTime)userArc.ArcExpireDate).ToString("yyyyMMdd"), userArc.BackSequence).Result;

            logger.LogInformation("IsSuccessful:{1}", arcValidationResult.IsSuccessful);
            logger.LogInformation("result:{1}", arcValidationResult.Result);

            if (arcValidationResult.IsSuccessful)
            {
                ArcScanRecord record = new ArcScanRecord()
                {
                    ArcStatus   = (short)SystemArcVerifyStatusEnum.PASS,
                    ScanTime    = DateTime.UtcNow,
                    Description = arcValidationResult.Result,
                    Event       = (byte)ArcScanEvent.Register
                };


                userArc.KycStatus = (short)KycStatusEnum.ARC_PASS_VERIFY;
                // for demo
                if (configuration["IsDemo"] != null && bool.Parse(configuration["IsDemo"]) == true)
                {
                    userArc.KycStatus = (short)KycStatusEnum.AML_PASS_VERIFY;
                }
                //
                userArc.KycStatusUpdateTime = DateTime.UtcNow;
                AddScanRecordAndUpdateUserKycStatus(record, userArc);
                // send mail
                await SendMailForRegisterArc(true, receivers, userId);
            }
            else
            {
                ArcScanRecord record = new ArcScanRecord()
                {
                    ArcStatus   = (short)SystemArcVerifyStatusEnum.FAIL,
                    ScanTime    = DateTime.UtcNow,
                    Description = arcValidationResult.Result,
                    Event       = (byte)ArcScanEvent.Register
                };
                userArc.KycStatus           = (short)KycStatusEnum.FAILED_KYC;
                userArc.KycStatusUpdateTime = DateTime.UtcNow;
                AddScanRecordAndUpdateUserKycStatus(record, userArc);
                // send mail
                await SendMailForRegisterArc(false, receivers, userId);
            }
        }
Пример #18
0
        public async Task SystemVerifyArcForRemitProcess(RemitRecord remitRecord, long userId)
        {
            UserArc userArc = userService.GetUserArcById(userId);

            if (userArc.ArcIssueDate == null || userArc.ArcExpireDate == null)
            {
                throw new Exception("ARC Data not sufficient");
            }
            ArcValidationResult arcValidationResult = arcValidationTask.Validate(workingRootPath, userArc.ArcNo, ((DateTime)userArc.ArcIssueDate).ToString("yyyyMMdd"), ((DateTime)userArc.ArcExpireDate).ToString("yyyyMMdd"), userArc.BackSequence).Result;

            if (arcValidationResult.IsSuccessful)
            {
                ArcScanRecord record = new ArcScanRecord()
                {
                    ArcStatus   = (short)SystemArcVerifyStatusEnum.PASS,
                    ScanTime    = DateTime.UtcNow,
                    Description = arcValidationResult.Result,
                    Event       = (byte)ArcScanEvent.Remit
                };

                remitRecord.TransactionStatus = (short)RemitTransactionStatusEnum.SuccessfulArcVerification;
                // for demo
                if (configuration["IsDemo"] != null && bool.Parse(configuration["IsDemo"]) == true)
                {
                    remitRecord.TransactionStatus = (short)RemitTransactionStatusEnum.SuccessfulAmlVerification;
                }
                //
                AddScanRecordAndUpdateUserKycStatus(record, userArc, remitRecord);
                // send mail
                await SendMailForRemitArc(true, receivers, userId);
            }
            else
            {
                ArcScanRecord record = new ArcScanRecord()
                {
                    ArcStatus   = (short)SystemArcVerifyStatusEnum.FAIL,
                    ScanTime    = DateTime.UtcNow,
                    Description = arcValidationResult.Result,
                    Event       = (byte)ArcScanEvent.Remit
                };
                remitRecord.TransactionStatus = (short)RemitTransactionStatusEnum.FailedVerified;
                userArc.KycStatus             = (short)KycStatusEnum.FAILED_KYC;
                userArc.KycStatusUpdateTime   = DateTime.UtcNow;
                AddScanRecordAndUpdateUserKycStatus(record, userArc, remitRecord);
                // send mail
                await SendMailForRemitArc(false, receivers, userId);

                // push notification
                await notificationService.SaveAndSendNotification((int)userId, "Unsuccessful Remit", "You do not pass The KYC procedure", "en-US");
            }
        }
        public async Task <Stream> LoadImage(UserArc userArc, byte imageType, string imageFileUri)
        {
            String []           imageUriArray = imageFileUri.Split('/');
            String              imageFileName = WebUtility.UrlDecode(imageUriArray[imageUriArray.Length - 1]);
            BlobContainerClient blobContainer = await GetOrCreateCloudBlobContainer(GetUploadPicContainerName(), PublicAccessType.None);

            BlobClient imageBlob = blobContainer.GetBlobClient(imageFileName);

            if (!imageBlob.Exists())
            {
                return(null);
            }
            return(await imageBlob.OpenReadAsync());
        }
Пример #20
0
        public void UpdatePicFileNameOfUserInfo(UserArc userArc, PictureTypeEnum pictureType, String fileName)
        {
            switch (pictureType)
            {
            case PictureTypeEnum.Front:
                userArc.IdImageA = fileName;
                break;

            case PictureTypeEnum.Back:
                userArc.IdImageB = fileName;
                break;
            }
            dbContext.UserArc.Update(userArc);
            dbContext.SaveChanges();
        }
Пример #21
0
        public async Task <Stream> LoadImage(UserArc userArc, byte imageType, string imageFileName)
        {
            string mainFolder = imageType switch
            {
                0 => ((PictureTypeEnum)imageType).ToString().ToLower(),
                1 => ((PictureTypeEnum)imageType).ToString().ToLower(),
                2 => ((PictureTypeEnum)imageType).ToString().ToLower(),
                3 => ((PictureTypeEnum)imageType).ToString().ToLower(),
                _ => PictureTypeEnum.Other.ToString().ToLower(),
            };
            string        folder        = mainFolder + Path.DirectorySeparatorChar + userArc.UserId;
            DirectoryInfo directoryInfo = folderHandler.CreateFolder(workingRootPath, folder);
            var           filePath      = Path.Combine(directoryInfo.FullName, imageFileName);

            return(System.IO.File.OpenRead(filePath));
        }
Пример #22
0
        public RemitRecord CreateRemitRecordByUserArc(UserArc userArc, RemitRecord remitRecord, PayeeTypeEnum payeeTypeEnum)
        {
            remitRecord.UserId    = userArc.UserId;
            remitRecord.ArcName   = userArc.ArcName;
            remitRecord.ArcNo     = userArc.ArcNo;
            remitRecord.PayeeType = (byte)payeeTypeEnum;

            dbContext.RemitRecord.Add(remitRecord);
            dbContext.SaveChanges();
            dbContext.Entry(remitRecord).Reference(record => record.Beneficiary).Query()
            .Include(Beneficiary => Beneficiary.PayeeRelation)
            .Load();
            dbContext.Entry(remitRecord).Reference(record => record.ToCurrency).Load();

            return(remitRecord);
        }
        public string CheckAndSetDraftRemitProperty(UserArc userArc, RemitRecord remitRecord, DraftRemitRequest draftRemitRequest, String country)
        {
            string error = null;

            if (draftRemitRequest.FromAmount != null)
            {
                error = CheckIfAmountOutOfRange(userArc.UserId, (int)draftRemitRequest.FromAmount, country);
                if (error != null)
                {
                    return(error);
                }
                remitRecord.FromAmount = (double)draftRemitRequest.FromAmount;
            }

            if (draftRemitRequest.BeneficiaryId != null)
            {
                error = CheckBenificiarExistence((int)draftRemitRequest.BeneficiaryId);
                if (error != null)
                {
                    return(error);
                }
                remitRecord.BeneficiaryId = draftRemitRequest.BeneficiaryId;
            }


            if (draftRemitRequest.DiscountId != null)
            {
                error = CheckDiscountExistence((int)draftRemitRequest.DiscountId);
                if (error != null)
                {
                    return(error);
                }
                remitRecord.DiscountId = draftRemitRequest.DiscountId;
            }

            if (draftRemitRequest.ToCurrencyId != null)
            {
                error = CheckCurrencyExistence((int)draftRemitRequest.ToCurrencyId);
                if (error != null)
                {
                    return(error);
                }
                remitRecord.ToCurrencyId = draftRemitRequest.ToCurrencyId;
            }
            return(null);
        }
Пример #24
0
        public bool ChangeKycStatusByUserId(KycStatusEnum kycStatus, long userId)
        {
            User    user    = dbContext.User.Where(user => user.Id == userId).FirstOrDefault();
            UserArc userArc = dbContext.UserArc.Where(userArc => userArc.UserId == userId).FirstOrDefault();

            if (user == null || userArc == null)
            {
                logger.LogError("userId {userId} does not exists", userId);
                return(false);
            }

            userArc.KycStatus           = (short)kycStatus;
            userArc.KycStatusUpdateTime = DateTime.UtcNow;


            dbContext.SaveChanges();

            return(true);
        }
Пример #25
0
        public async Task <bool> AddNewUserInfo(UserRegisterType loginUser)
        {
            using var transaction = dbContext.Database.BeginTransaction();
            try
            {
                var user = new User();
                await dbContext.User.AddAsync(user);

                dbContext.SaveChanges();
                var userArc = new UserArc()
                {
                    UserId = user.Id
                };
                await dbContext.UserArc.AddAsync(userArc);

                dbContext.SaveChanges();


                var userRegisterType = new UserRegisterType()
                {
                    UserId         = user.Id,
                    AuthPlatformId = loginUser.AuthPlatformId,
                    RegisterType   = loginUser.RegisterType,
                    Email          = loginUser.Email,
                    Name           = loginUser.Name
                };
                await dbContext.UserRegisterType.AddAsync(userRegisterType);

                dbContext.SaveChanges();

                // Commit transaction if all commands succeed, transaction will auto-rollback
                // when disposed if either commands fails
                transaction.Commit();
                return(true);
            }
            catch (Exception ex)
            {
                logger.LogError(ex, null);
                transaction.Rollback();
                return(false);
            }
        }
Пример #26
0
        public ActionResult <MessageModel <Object> > ChangeUserKyc([FromBody] KycRequest kycRequest, [FromRoute, SwaggerParameter("使用者ID", Required = true)] long userId)
        {
            UserArc userArc = userService.GetUserArcById(userId);

            if (userArc == null)
            {
                return(BadRequest(new MessageModel <Object>
                {
                    Status = (int)HttpStatusCode.BadRequest,
                    Success = false,
                    Msg = "User does not exist"
                }));;
            }

            var result = new MessageModel <Object>
            {
                Status  = (int)HttpStatusCode.BadRequest,
                Success = false,
                Msg     = "Fail to Operate"
            };

            if (userService.ChangeKycStatusByUserId((KycStatusEnum)kycRequest.KycStatus, userId))
            {
                if ((KycStatusEnum)kycRequest.KycStatus == KycStatusEnum.PASSED_KYC_FORMAL_MEMBER)
                {
                    notificationService.SaveAndSendNotification((int)userId, "Successful Registration", "Your registration have been confirmed", "en-US");
                }
                if ((KycStatusEnum)kycRequest.KycStatus == KycStatusEnum.FAILED_KYC)
                {
                    notificationService.SaveAndSendNotification((int)userId, "Unsuccessful Registration", "You do not pass The KYC procedure", "en-US");
                }


                result.Status  = (int)HttpStatusCode.OK;
                result.Success = true;
                result.Msg     = "Successful Operation";
                return(Ok(result));
            }

            return(BadRequest(result));
        }
Пример #27
0
        public async Task AddArcToList(string userId, int id)
        {
            var arc = this.dbContext.Arcs.Find(id);

            if (arc == null)
            {
                throw new KeyNotFoundException("Arc with given id does not exist.");
            }

            if (arc.UsersArcs.Any(ua => ua.UserId == userId))
            {
                throw new InvalidOperationException("User has already added given arc to their list.");
            }

            var userArc = new UserArc {
                UserId = userId, Arc = arc
            };

            arc.UsersArcs.Add(userArc);
            await this.dbContext.SaveChangesAsync();
        }
Пример #28
0
        public async Task <string> SavePic(UserArc userArc, byte imageType, IFormFile image)
        {
            string mainFolder = imageType switch
            {
                0 => ((PictureTypeEnum)imageType).ToString().ToLower(),
                1 => ((PictureTypeEnum)imageType).ToString().ToLower(),
                2 => ((PictureTypeEnum)imageType).ToString().ToLower(),
                3 => ((PictureTypeEnum)imageType).ToString().ToLower(),
                _ => PictureTypeEnum.Other.ToString().ToLower(),
            };
            string        resultFileName = imageType + "_" + userArc.ArcNo + "_" + DateTimeOffset.Now.ToUnixTimeSeconds().ToString();
            string        folder         = mainFolder + Path.DirectorySeparatorChar + userArc.UserId;
            DirectoryInfo directoryInfo  = folderHandler.CreateFolder(workingRootPath, folder);
            var           filePath       = Path.Combine(directoryInfo.FullName, resultFileName);

            using (var stream = System.IO.File.Create(filePath))
            {
                await image.CopyToAsync(stream);
            }
            return(resultFileName);
        }
Пример #29
0
        public RemitRecord GetDraftRemitRecordByUserArc(UserArc userArc)
        {
            List <RemitRecord> onGogingRemitRecords = GetOngoingRemitRecordsByUserArc(userArc);

            return(onGogingRemitRecords.Find(record => record.TransactionStatus == (short)RemitTransactionStatusEnum.Draft));
        }
        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);
        }