Exemple #1
0
        private void RegisterForPayment(HandWrittenCaptureModel model, decimal amount)
        {
            using (var dbContext = new DataContext())
            {
                var paymentTransaction = new PaymentTransaction();
                paymentTransaction.TransactionToken = model.ExternalToken;
                paymentTransaction.TransactionReference = model.ExternalReference;
                paymentTransaction.Amount = amount;
                paymentTransaction.CreatedTimestamp = DateTime.Now;
                paymentTransaction.CustomerContactNumber = model.MobileNumber;
                paymentTransaction.CustomerFirstName = model.FirstName;
                paymentTransaction.CustomerIDNumber = model.IdentificationNumber;
                paymentTransaction.CustomerLastName = model.Surname;
                paymentTransaction.PaymentMethod = PaymentMethod.DumaPay;
                paymentTransaction.Status = PaymentTransactionStatus.Added;

                dbContext.PaymentTransactions.Add(paymentTransaction);

                var paymentTransactionItem = new PaymentTransactionItem();
                paymentTransactionItem.PaymentTransaction = paymentTransaction;
                paymentTransactionItem.ReferenceNumber = model.TicketNumber;
                paymentTransactionItem.TransactionToken = model.ExternalToken;
                paymentTransactionItem.EntityReferenceTypeID = long.Parse(model.TicketNumber[1].ToString());
                paymentTransactionItem.Description = "Notice issued.";
                paymentTransactionItem.Amount = amount;
                paymentTransactionItem.Status = PaymentTransactionStatus.Added;

                dbContext.PaymentTransactionItems.Add(paymentTransactionItem);

                dbContext.SaveChanges();
            }
        }
Exemple #2
0
        public async Task<IHttpActionResult> PostHandWrittenCapture([FromBody] HandWrittenCaptureModel model, long offenceSetID, bool performNatisRequest)
        {            
            decimal totalAmount = 0;
            if (model.Amount1.HasValue)
                totalAmount += model.Amount1.Value;

            if (model.Amount2.HasValue)
                totalAmount += model.Amount2.Value;

            if (model.Amount3.HasValue)
                totalAmount += model.Amount3.Value;

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

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

            using (var connection = new Oracle.DataAccess.Client.OracleConnection(DataContextConnectionString))
            {
                var handWrittenCapture =
                    new HandWrittenCapture
                    {
                        TICKET_NUMBER = model.TicketNumber,
                        PERSON_INFO_ID = model.PersonInfoID,
                        TITLE = model.Title,
                        FIRST_NAME = model.FirstName,
                        MIDDLE_NAMES = model.MiddleNames,
                        SURNAME = model.Surname,
                        INITIALS = model.Initials,
                        IDENTIFICATION_NUMBER = model.IdentificationNumber,
                        IDENTIFICATION_TYPE_ID = model.IdentificationTypeID,
                        IDENTIFICATION_COUNTRY_ID = model.IdentificationCountryID,
                        CITIZEN_TYPE_ID = model.CitizenTypeID,
                        GENDER = model.Gender,
                        AGE = model.Age,
                        BIRTHDATE = model.BirthDateTime,
                        OCCUPATION = model.Occupation,
                        TELEPHONE = model.Telephone,
                        MOBILE_NUMBER = model.MobileNumber,
                        FAX = model.Fax,
                        EMAIL = model.Email,
                        COMPANY = model.Company,
                        BUSINESS_TELEPHONE = model.BusinessTelephone,
                        PHYSICAL_ADDRESS_INFO_ID = model.PhysicalAddressInfoID,
                        PHYSICAL_ADDRESS_TYPE_ID = model.PhysicalAddressTypeID,
                        PHYSICAL_STREET_1 = model.PhysicalStreet1,
                        PHYSICAL_STREET_2 = model.PhysicalStreet2,
                        PHYSICAL_SUBURB = model.PhysicalSuburb,
                        PHYSICAL_TOWN = model.PhysicalTown,
                        PHYSICAL_CODE = model.PhysicalCode,
                        POSTAL_ADDRESS_INFO_ID = model.PostalAddressInfoID,
                        POSTAL_ADDRESS_TYPE_ID = model.PostalAddressTypeID,
                        POSTAL_PO_BOX = model.PostalPoBox,
                        POSTAL_STREET = model.PostalStreet,
                        POSTAL_SUBURB = model.PostalSuburb,
                        POSTAL_TOWN = model.PostalTown,
                        POSTAL_CODE = model.PostalCode,
                        OFFENCE_LOCATION_STREET = model.OffenceLocationStreet,
                        OFFENCE_LOCATION_SUBURB = model.OffenceLocationSuburb,
                        OFFENCE_LOCATION_TOWN = model.OffenceLocationTown,
                        OFFENCE_LOCATION_LATITUDE = model.OffenceLocationLatitude,
                        OFFENCE_LOCATION_LONGITUDE = model.OffenceLocationlongitude,
                        VEHICLE_REGISTRATION_MAIN = model.VehicleRegistrationMain,
                        VEHICLE_REGISTRATION_NO_2 = model.VehicleRegistrationNo2,
                        VEHICLE_REGISTRATION_NO_3 = model.VehicleRegistrationNo3,
                        VEHICLE_MAKE_MAIN = model.VehicleMakeMain,
                        VEHICLE_MODEL_MAIN = model.VehicleModelMain,
                        VEHICLE_TYPE_MAIN = model.VehicleTypeMain,
                        VEHICLE_LICENCE_EXPIRY_DATE = model.VehicleLicenceExpiryDateTime,
                        VEHICLE_COLOUR = model.VehicleColour,
                        VEHICLE_CHASSIS_NUMBER = model.VehicleChassisNumber,
                        VEHICLE_ENGINE_NUMBER = model.VehicleEngineNumber,
                        VEHICLE_REGISTER_NUMBER = model.VehicleRegisterNumber,
                        GUARDIAN = model.Gaurdian,
                        DIRECTION = model.Direction,
                        METER_NUMBER = model.MeterNumber,
                        CASE_NUMBER = model.CaseNumber,
                        CC_NUMBER = model.CcNumber,
                        CHARGE_CODE_1 = model.ChargeCode1,
                        AMOUNT_1 = model.Amount1,
                        CHARGE_CODE_1_ID = model.ChargeCode1ID,
                        CHARGE_CODE_2 = model.ChargeCode2,
                        CHARGE_CODE_2_ID = model.ChargeCode2ID,
                        AMOUNT_2 = model.Amount2,
                        CHARGE_CODE_3 = model.ChargeCode3,
                        CHARGE_CODE_3_ID = model.ChargeCode3ID,
                        AMOUNT_3 = model.Amount3,
                        HAS_ALTERNATIVE_CHARGE = model.HasAlternativeCharge,
                        OFFENCE_DATE = model.OffenceDateTime,
                        ISSUED_DATE = model.IssueDateTime,
                        COURT_DATE = model.CourtDateTime,
                        COURT_NAME = model.CourtName,
                        COURT_ROOM = model.CourtRoom,
                        DISTRICT_NAME = model.DistrictName,
                        PAYMENT_PLACE = model.PaymentPlace,
                        PAYMENT_DATE = model.PaymentDateTime,
                        OFFICER_CREDENTIAL_ID = model.OfficerCredentialID,
                        CAPTURED_DATE = DateTime.Now,
                        CAPTURED_CREDENTIAL_ID = SessionModel.CredentialID,
                        LICENCE_CODE = model.LicenceCode,
                        LICENCE_TYPE = model.LicenceType,
                        DRIVER_LICENCE_CERTIFICATE_NO = model.DriverLicenceCertificateNo,
                        MODIFIED_DATE = default(DateTime?),
                        MODIFIED_CREDENTIAL_ID = default(long?),
                        SPEED = model.Speed,
                        MASS_PERCENTAGE = model.MassPercentage,
                        IS_CANCELLED = model.IsCancelled ? 1 : 0,
                        CANCEL_REASON = model.CancelReason,
                        SEND_TO_COURT_ROLE = model.SendToCourtRole ? 1 : 0,
                        NOTES = model.Notes,
                        APPLICATION_AND_VERSION = model.ApplicationAndVersion,
                        MACHINE_IDENTIFIER = model.DeviceID,
                        CAMERA_HWID = model.CameraID,
                        EVENT_ID = model.EventID,
                        INFRINGEMENT_LOCATION_CODE = model.InfringementLocationCode,
                        EXTERNAL_TOKEN = model.ExternalToken,
                        EXTERNAL_REFERENCE = model.ExternalReference,
                        CHARGE_DESCRIPTION_1 = model.ChargeDescription1,
                        CHARGE_DESCRIPTION_2 = model.ChargeDescription2,
                        CHARGE_DESCRIPTION_3 = model.ChargeDescription3,
                    };

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

                        command.Parameters.Add(
                            new Oracle.DataAccess.Client.OracleParameter("P_TYPE_HANDWRITTEN_CAPTURE", Oracle.DataAccess.Client.OracleDbType.Object)
                            {
                                Value = handWrittenCapture,
                                UdtTypeName = "ITS.TYPE_HANDWRITTEN_CAPTURE"
                            });
                        command.Parameters.Add("P_NATIS_REQUEST", Oracle.DataAccess.Client.OracleDbType.Int32).Value = performNatisRequest ? 1 : 0;
                        command.Parameters.Add("P_OFFENCE_SET", Oracle.DataAccess.Client.OracleDbType.Int32).Value = offenceSetID;
                        command.Parameters.Add("P_CREDENTIAL_ID", Oracle.DataAccess.Client.OracleDbType.Int32).Value = SessionModel.CredentialID;

                        ExcecuteNonQuery(command, "ITS.OFFENCE_CAPTURE.SUBMIT_HANDWRITTEN", connection);
                    }
                    catch (Exception ex)
                    {
                        return this.BadRequestEx(Error.PopulateUnexpectedException(ex));
                    }
                    finally
                    {
                        foreach (Oracle.DataAccess.Client.OracleParameter parameter in command.Parameters)
                        {
                            if (parameter.Value is IDisposable)
                            {
                                ((IDisposable)(parameter.Value)).Dispose();
                            }

                            parameter.Dispose();
                        }
                    }
                }
            }

            if (!model.IsCancelled)
            {
                RegisterForPayment(model, totalAmount);
            }

            return Ok();
        }