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(); } }
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(); }