Ejemplo n.º 1
0
        public IHttpActionResult GetOfficers()
        {
            using (var dbContext = new DataContext())
            {
                var credentials = dbContext.Credentials
                    .AsNoTracking()
                    .Include(f => f.User)
                    .Include(f => f.User.UserDistricts)
                    .Include(f => f.CredentialSystemFunctions)
                    .Where(f => f.EntityType == EntityType.User &&
                        f.User != null &&
                        f.User.IsOfficer == "1" &&
                        f.User.Status == Status.Active &&
                        f.Status == Status.Active)
                    .ToList();                     

                var models = credentials.Select(f =>
                    new UserModel
                    {
                        ID = f.User.ID,
                        FirstName = f.User.FirstName,
                        LastName = f.User.LastName,
                        MobileNumber = f.User.MobileNumber,
                        CreatedTimestamp = f.User.CreatedTimestamp,
                        Status = (Core.Gateway.Models.Enums.UserStatus)f.User.Status,
                        Email = f.User.Email,
                        IsOfficer = f.User.IsOfficer == "1",
                        ExternalID = f.User.ExternalID,
                        CredentialID = f.ID,
                        UserName = f.UserName,
                        Password = MessageDigest.HashSHA256(f.Password),
                        SystemFunctions = f.CredentialSystemFunctions
                            .Where(k => k.Status == Status.Active)
                            .Select(k => new SystemFunctionModel { ID = k.SystemFunction.ID, Name = k.SystemFunction.Name, Description = k.SystemFunction.Description })
                            .ToList(),
                        Districts = f.User.UserDistricts
                            .Select(k => new DistrictModel { ID = k.District.ID, BranchName = k.District.BranchName, PaymentOptions = k.District.PaymentOptions })
                            .ToList()
                    })
                    .ToList();                                           

                return Ok(models);
            }
        }
Ejemplo n.º 2
0
        public IHttpActionResult Post([FromBody] CredentialModel model)
        {
            if (string.IsNullOrWhiteSpace(model.UserName))
            {
                return(this.BadRequestEx(Error.PopulateInvalidParameter("userName", "Can not be empty.")));
            }

            if (string.IsNullOrWhiteSpace(model.Password))
            {
                return(this.BadRequestEx(Error.PopulateInvalidParameter("password", "Can not be empty.")));
            }

            var userSession = new Session();

            using (var dbContext = new DataContext())
            {
                var credential = dbContext.Credentials.FirstOrDefault(f => f.UserName == model.UserName);
                if (credential == null)
                {
                    return(this.BadRequestEx(Error.CredentialNotFound));
                }

                if ((credential.Password != model.Password) && (model.Password.ToUpper() != MessageDigest.HashSHA256(credential.Password)))
                {
                    return(this.BadRequestEx(Error.PasswordIncorrect));
                }

                if (credential.Status != Status.Active)
                {
                    return(this.BadRequestEx(Error.CredentialNotActive));
                }

                if (credential.ExpiryTimeStamp < DateTime.Now)
                {
                    return(this.BadRequestEx(Error.PasswordHasExpired));
                }

                var session = new Session();
                session.Credential       = credential;
                session.Token            = Guid.NewGuid().ToString();
                session.CreatedTimestamp = DateTime.Now;
                session.ExpiryTimestamp  = DateTime.Now.AddHours(8);

                dbContext.Sessions.Add(session);
                dbContext.SaveChanges();

                SessionModel sessionModel = new SessionModel();
                sessionModel.CredentialID     = credential.ID;
                sessionModel.UserName         = credential.UserName;
                sessionModel.EntityID         = credential.EntityID;
                sessionModel.EntityType       = (Models.Enums.EntityType)credential.EntityType;
                sessionModel.SessionToken     = session.Token;
                sessionModel.ExpiryTimestamp  = session.ExpiryTimestamp;
                sessionModel.CreatedTimestamp = session.CreatedTimestamp;

                var sessionStore = new MemoryCache <SessionModel>("USER_SESSION");
                sessionStore.Set(sessionModel.SessionToken, sessionModel, 8 * 60);

                return(Ok(sessionModel));
            }
        }
Ejemplo n.º 3
0
        public async Task <IHttpActionResult> ChangeAmount(ChangeAmountModel model)
        {
            using (var dbContext = new DataContext())
            {
                var credential = dbContext.Credentials.FirstOrDefault(f => f.UserName == model.UserName);
                if (credential == null)
                {
                    return(this.BadRequestEx(Error.CredentialNotFound));
                }

                if ((credential.Password != model.Password) && (model.Password.ToUpper() != MessageDigest.HashSHA256(credential.Password)))
                {
                    return(this.BadRequestEx(Error.PasswordIncorrect));
                }

                if (credential.Status != Core.Data.Enums.Status.Active)
                {
                    return(this.BadRequestEx(Error.CredentialNotActive));
                }

                if (credential.ExpiryTimeStamp < DateTime.Now)
                {
                    return(this.BadRequestEx(Error.PasswordHasExpired));
                }


                var offenceRegister = dbContext.OffenceRegister
                                      .AsNoTracking()
                                      .Include(f => f.EvidenceLog)
                                      .Include(f => f.EvidenceLog.ChargeInfos)
                                      .FirstOrDefault(f => f.ReferenceNumber == model.ReferenceNumber);
                if (offenceRegister == null)
                {
                    return(this.BadRequestEx(Error.RegisterItemDoesNotExist));
                }

                var representationTransaction = new RepresentationTransaction();
                representationTransaction.RegisterID             = offenceRegister.ID;
                representationTransaction.ReferenceNumber        = offenceRegister.ReferenceNumber;
                representationTransaction.Amount                 = (model.CurrentAmount > model.NewAmount) ? model.NewAmount - model.CurrentAmount : model.CurrentAmount - model.NewAmount;
                representationTransaction.Reason                 = model.ApplicantReason;
                representationTransaction.AccountTransactionType = (Core.Data.Enums.AccountTransactionType)model.AccountTransactionType;
                representationTransaction.AccountCurrencyType    = (Core.Data.Enums.AccountCurrencyType)model.AccountCurrencyType;
                representationTransaction.CapturedCredentialID   = credential.EntityID;
                representationTransaction.CapturedDate           = DateTime.Now;
                representationTransaction.ResultType             = Core.Data.Enums.ResultType.Approved;
                representationTransaction.EvaluatedDate          = model.ApprovedDate.HasValue ? model.ApprovedDate.Value : DateTime.Now;
                representationTransaction.EvaluatedBy            = model.ApprovedBy;
                representationTransaction.ChargeNumber           = 1;
                representationTransaction.ChargeCode             = offenceRegister.EvidenceLog.ChargeInfos[0].OffenceCode.Code;
                representationTransaction.ProcessedDate          = DateTime.Now;
                representationTransaction.ProcessedTerminalName  = model.TerminalName;
                representationTransaction.ProcessedCredentialID  = credential.EntityID;

                dbContext.RepresentationTransactions.Add(representationTransaction);

                var generatedReferenceNumber = dbContext.GeneratedReferenceNumbers.First(f => f.ReferenceNumber == model.ReferenceNumber);

                var paymentTransaction = dbContext.PaymentTransactions.Include(f => f.TransactionItems).FirstOrDefault(f => f.TransactionToken == generatedReferenceNumber.ExternalToken && f.Status == Kapsch.Core.Data.Enums.PaymentTransactionStatus.Added);
                paymentTransaction.Amount = model.NewAmount;
                paymentTransaction.TransactionItems.Single().Amount = model.NewAmount;

                dbContext.SaveChanges();

                var connection = (OracleConnection)dbContext.Database.Connection;

                using (var command = new OracleCommand())
                {
                    try
                    {
                        if (connection.State != ConnectionState.Open)
                        {
                            connection.Open();
                        }

                        command.Parameters.Add("P_USER_ID", OracleDbType.Int32).Value                      = credential.EntityID;
                        command.Parameters.Add("P_REFERENCE_NUMBER", OracleDbType.Varchar2).Value          = model.ReferenceNumber;
                        command.Parameters.Add("P_ACCOUNT_TRANS_TYPE_ID", OracleDbType.Int32).Value        = (int)model.AccountTransactionType;
                        command.Parameters.Add("P_REFERENCE_TRANSACTION_ID", OracleDbType.Int32).Value     = representationTransaction.ID;
                        command.Parameters.Add("P_REFERENCE_TRANSACTION_TYPEID", OracleDbType.Int32).Value = (int)model.ReferenceTransactionType;
                        command.Parameters.Add("P_AMOUNT", OracleDbType.Decimal).Value                     = representationTransaction.Amount;
                        command.Parameters.Add("O_MESSAGE", OracleDbType.Varchar2, 2056).Direction         = ParameterDirection.Output;

                        ExcecuteNonQuery(command, "FINANCE.FINANCIALS.ADD_VALIDATE_TRANSACTION", connection);

                        if ((command.Parameters["O_MESSAGE"].Value is DBNull))
                        {
                            return(Ok());
                        }

                        var message = ((OracleString)command.Parameters["O_MESSAGE"].Value).Value;
                        if (message != "Success")
                        {
                            return(this.BadRequestEx(Error.PopulateMethodFailed(message)));
                        }
                    }
                    catch (Exception ex)
                    {
                        return(this.BadRequestEx(Error.PopulateUnexpectedException(ex)));
                    }
                    finally
                    {
                        foreach (OracleParameter parameter in command.Parameters)
                        {
                            if (parameter.Value is IDisposable)
                            {
                                ((IDisposable)(parameter.Value)).Dispose();
                            }

                            parameter.Dispose();
                        }
                    }
                }

                await Task.Run(() =>
                {
                    var paymentProvider  = resolvePaymentProvider();
                    var transactionModel =
                        new ThirdParty.Payment.Models.TransactionModel
                    {
                        CompanyRef         = model.ReferenceNumber,
                        CompanyAccRef      = string.Empty,
                        Amount             = model.NewAmount,
                        UserID             = SessionModel.UserName,
                        ServiceDescription = "Notice issued.",
                        ServiceType        = 6067
                    };

                    try
                    {
                        paymentProvider.UpdateTransaction(generatedReferenceNumber.ExternalToken, transactionModel);
                    }
                    catch (Exception)
                    {
                        using (var dataContext = new DataContext())
                        {
                            InsertQueueItem(
                                dataContext,
                                new PaymentProviderQueueItem
                            {
                                CreatedTimestamp = DateTime.Now,
                                OperationName    = "UpdateTransaction",
                                PaymentProvider  = (Kapsch.Core.Data.Enums.PaymentProvider)paymentProvider.ID,
                                Arguments        = JsonConvert.SerializeObject(transactionModel),
                                QueueStatus      = Kapsch.Core.Data.Enums.QueueStatus.Queued,
                                TransactionToken = generatedReferenceNumber.ExternalToken
                            });
                        }
                    }
                });

                return(Ok());
            }
        }