From 3b9c548bf7c24c6493fb05686b2ad5d48b996a28 Mon Sep 17 00:00:00 2001 From: Steven Chen Date: Fri, 22 Nov 2024 11:01:58 -0800 Subject: [PATCH 1/2] Update Payment Society to match the requirements from home team#24493 Signed-off-by: Steven Chen --- .../179a7b0089ce_payment_societies.py | 9 ++- api/namex/models/payment_society.py | 22 +++--- api/namex/resources/payment_societies.py | 69 +++++++++---------- 3 files changed, 48 insertions(+), 52 deletions(-) diff --git a/api/migrations/versions/179a7b0089ce_payment_societies.py b/api/migrations/versions/179a7b0089ce_payment_societies.py index 9de659f1a..d6e265cd2 100644 --- a/api/migrations/versions/179a7b0089ce_payment_societies.py +++ b/api/migrations/versions/179a7b0089ce_payment_societies.py @@ -22,10 +22,13 @@ def upgrade(): sa.Column('id', sa.Integer(), nullable=False), sa.Column('nr_num', sa.String(length=10), nullable=True), sa.Column('corp_num', sa.String(20), nullable=True), - sa.Column('request_state', sa.String(length=40), nullable=True), - sa.Column('payment_status', sa.String(length=50), nullable=True), - sa.Column('payment_date', sa.DateTime(), nullable=True), + sa.Column('payment_completion_date', sa.DateTime(), nullable=True), + sa.Column('payment_status_code', sa.String(length=30), nullable=True), + sa.Column('payment_fee_code', sa.String(length=30), nullable=True), + sa.Column('payment_type', sa.String(length=30), nullable=True), + sa.Column('payment_amount', sa.Numeric(), nullable=True), sa.Column('payment_json', postgresql.JSONB(astext_type=sa.Text()), nullable=True), + sa.Column('payment_action', sa.String(length=30), nullable=True), sa.PrimaryKeyConstraint('id') ) # ### end Alembic commands ### diff --git a/api/namex/models/payment_society.py b/api/namex/models/payment_society.py index 2dcce704c..53a00a84c 100644 --- a/api/namex/models/payment_society.py +++ b/api/namex/models/payment_society.py @@ -11,20 +11,18 @@ class PaymentSociety(db.Model): id = db.Column(db.Integer, primary_key=True) nrNum = db.Column('nr_num', db.String(10), unique=True) corpNum = db.Column('corp_num', db.String(20), unique=True) - requestState = db.Column('request_state', db.String(40), unique=True) - paymentState = db.Column('payment_status', db.String(50), unique=True) - paymentDate = db.Column('payment_date', db.DateTime(timezone=True), default=datetime.utcnow) - paymentJson = db.Column('payment_json', JSONB) - + paymentCompletionDate = db.Column('payment_completion_date', db.DateTime(timezone=True), default=datetime.utcnow) + paymentStatusCode = db.Column('payment_status_code', db.String(30), unique=True) + paymentFeeCode = db.Column('payment_fee_code', db.String(30), unique=True) + paymentType = db.Column('payment_type', db.String(30), unique=True) + paymentAmount = db.Column('payment_amount', db.Numeric(19, 2), unique=True) + paymentJson = db.Column('payment_json', JSONB) + paymentAction = db.Column('payment_action', db.String(30), unique=True) + def json(self): return {"id": self.id, - "nrNum": self.nrNum, - "corpNum": self.corpNum, - "requestState": self.requestState, - "paymentState": self.paymentState, - "paymentDate": self.paymentDate, - "paymentJson": self.paymentJson - } + "nrNum": self.nrNum + } def save_to_db(self): db.session.add(self) diff --git a/api/namex/resources/payment_societies.py b/api/namex/resources/payment_societies.py index 9d1549255..3447af209 100644 --- a/api/namex/resources/payment_societies.py +++ b/api/namex/resources/payment_societies.py @@ -1,7 +1,7 @@ -import copy, json -import json -from flask import request, jsonify, g, current_app, make_response -from flask_restx import Resource, Namespace, cors +import copy +from flask import request, jsonify, current_app, make_response +from flask_restx import Namespace, cors +from namex.resources.name_requests.abstract_nr_resource import AbstractNameRequestResource from sqlalchemy.orm.exc import NoResultFound from namex import jwt @@ -17,7 +17,7 @@ @cors_preflight('GET') @api.route('/', methods=['GET', 'OPTIONS']) -class PaymentSocietiesSearch(Resource): +class PaymentSocietiesSearch(AbstractNameRequestResource): @staticmethod @cors.crossdomain(origin='*') @@ -56,13 +56,15 @@ def get(nr): nr_payment_society_info['id'] = ps.id nr_payment_society_info['nr_num'] = ps.nrNum nr_payment_society_info['corp_num'] = ps.corpNum - nr_payment_society_info['request_state'] = ps.requestState - nr_payment_society_info['payment_state'] = ps.paymentState - nr_payment_society_info['paymentDate'] = ps.paymentDate + nr_payment_society_info['payment_completion_date'] = ps.paymentCompletionDate + nr_payment_society_info['payment_status_code'] = ps.paymentStatusCode + nr_payment_society_info['payment_fee_code'] = ps.paymentFeeCode + nr_payment_society_info['payment_type'] = ps.paymentType + nr_payment_society_info['payment_amount'] = ps.paymentAmount nr_payment_society_info['payment_json'] = ps.paymentJson + nr_payment_society_info['payment_action'] = ps.paymentAction payment_society_txn_history.insert(0, copy.deepcopy(nr_payment_society_info)) - if len(payment_society_txn_history) == 0: return make_response(jsonify({ 'message': f'No valid payment societies for {nr} found'}), 404) @@ -76,39 +78,28 @@ def get(nr): @cors_preflight('POST') @api.route('', methods=['POST', 'OPTIONS']) -class PaymentSocieties(Resource): - - @staticmethod +class PaymentSocieties(AbstractNameRequestResource): @cors.crossdomain(origin='*') @jwt.has_one_of_roles([User.APPROVER, User.EDITOR, User.SYSTEM]) - def post(*args, **kwargs): + def post(self): # do the cheap check first before the more expensive ones - try: json_input = request.get_json() if not json_input: return make_response(jsonify({'message': 'No input data provided'}), 400) - current_app.logger.debug(json_input) + current_app.logger.debug(f'Request Json: {json_input}') nr_num = json_input.get('nrNum', None) if not nr_num: return make_response(jsonify({"message": "nr_num not set in json input"}), 406) - - paymentStateType = json_input.get('paymentStateType', None) - if not paymentStateType: - return make_response(jsonify({"message": "paymentStateType not set in json input"}), 406) - - payment_json = json_input.get('payment', None) - if not payment_json: - return make_response(jsonify({"message": "payment not set in json input"}), 406) - - paymentDate = payment_json.get('paymentDate', None) - if not paymentDate: - return make_response(jsonify({"message": "paymentDate not set in json input"}), 406) nrd = RequestDAO.find_by_nr(nr_num) if not nrd: return make_response(jsonify({"message": "Request: {} not found in requests table".format(nr_num)}), 404) + + # replacing temp NR number to a formal NR number if needed. + nrd = self.add_new_nr_number(nrd, False) + current_app.logger.debug(f'Formal NR nubmer is: {nrd.nrNum}') except NoResultFound as nrf: # not an error we need to track in the log return make_response(jsonify({"message": "Request: {} not found".format(nr_num)}), 404) @@ -116,19 +107,23 @@ def post(*args, **kwargs): current_app.logger.error("Error when posting NR: {0} Err:{1} Please double check the json input file format".format(nr_num, err)) return make_response(jsonify({"message": "NR had an internal error. Please double check the json input file format"}), 404) - user = User.find_by_jwtToken(g.jwt_oidc_token_info) - if user is None: - return make_response(jsonify({'message': 'No User'}), 404) - ps_instance = PaymentSocietyDAO() - ps_instance.nrNum = nr_num - ps_instance.corpNum = nrd.corpNum - ps_instance.requestState = nrd.stateCd - ps_instance.paymentState = paymentStateType - ps_instance.paymentDate = paymentDate - ps_instance.paymentJson = json.dumps(json_input) + ps_instance.nrNum = nrd.nrNum + ps_instance.corpNum = json_input.get('corpNum', None) + ps_instance.paymentCompletionDate = json_input.get('paymentCompletionDate', None) + ps_instance.paymentStatusCode = json_input.get('paymentStatusCode', None) + ps_instance.paymentFeeCode = json_input.get('paymentFeeCode', None) + ps_instance.paymentType = json_input.get('paymentType', None) + ps_instance.paymentAmount = json_input.get('paymentAmount', None) + ps_instance.paymentJson = json_input.get('paymentJson', None) + ps_instance.paymentAction = json_input.get('paymentAction', None) ps_instance.save_to_db() + current_app.logger.debug(f'ps_instance saved...') + + if nrd.nrNum !=nr_num: + nrd.save_to_db() + current_app.logger.debug(f'nrd saved...') return make_response(jsonify(ps_instance.json()), 200) From 1ebe33f85e6e2ecb6b1fe33436a945936b228ebb Mon Sep 17 00:00:00 2001 From: Steven Chen Date: Fri, 22 Nov 2024 11:05:09 -0800 Subject: [PATCH 2/2] Update Payment Society to match the requirements from home team#24493 Signed-off-by: Steven Chen --- api/namex/VERSION.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/namex/VERSION.py b/api/namex/VERSION.py index c7ac77f96..a8102c1e2 100644 --- a/api/namex/VERSION.py +++ b/api/namex/VERSION.py @@ -1 +1 @@ -__version__ = '1.2.10' +__version__ = '1.2.11'