def test_get_bcol_error(capsys): """Assert get_bcol_error.""" assert get_bcol_error(1) == Error.BCOL_ERROR assert get_bcol_error(7) == Error.BCOL_UNAVAILABLE assert get_bcol_error(20) == Error.BCOL_ACCOUNT_CLOSED assert get_bcol_error(21) == Error.BCOL_USER_REVOKED assert get_bcol_error(48) == Error.BCOL_ACCOUNT_REVOKED
def create_invoice(self, payment_account: PaymentAccount, # pylint: disable=too-many-locals line_items: [PaymentLineItem], invoice: Invoice, **kwargs): """Create Invoice in PayBC.""" current_app.logger.debug('<create_invoice') user: UserContext = kwargs['user'] pay_endpoint = current_app.config.get('BCOL_API_ENDPOINT') + '/payments' corp_number = invoice.business_identifier amount_excluding_txn_fees = sum(line.total for line in line_items) filing_types = ','.join([item.filing_type_code for item in line_items]) remarks = f'{corp_number}({filing_types})' if user.first_name: remarks = f'{remarks}-{user.first_name}' payload: Dict = { # 'userId': payment_account.bcol_user_id if payment_account.bcol_user_id else 'PE25020', 'userId': payment_account.bcol_user_id, 'invoiceNumber': str(invoice.id), 'folioNumber': invoice.folio_number, 'amount': str(amount_excluding_txn_fees), 'rate': str(amount_excluding_txn_fees), 'remarks': remarks[:50], 'feeCode': self._get_fee_code(kwargs.get('corp_type_code'), user.is_staff() or user.is_system()) } if user.is_staff() or user.is_system(): payload['userId'] = user.user_name_with_no_idp if user.is_staff() else current_app.config[ 'BCOL_USERNAME_FOR_SERVICE_ACCOUNT_PAYMENTS'] payload['accountNumber'] = payment_account.bcol_account_id payload['formNumber'] = invoice.dat_number payload['reduntantFlag'] = 'Y' payload['rateType'] = 'C' if payload.get('folioNumber', None) is None: # Set empty folio if None payload['folioNumber'] = '' try: pay_response = self.post(pay_endpoint, user.bearer_token, AuthHeaderType.BEARER, ContentType.JSON, payload, raise_for_error=False) response_json = pay_response.json() current_app.logger.debug(response_json) pay_response.raise_for_status() except HTTPError as bol_err: current_app.logger.error(bol_err) error_type: str = response_json.get('type') if error_type.isdigit(): error = get_bcol_error(int(error_type)) else: error = Error.BCOL_ERROR raise BusinessException(error) invoice = { 'invoice_number': response_json.get('key'), 'reference_number': response_json.get('sequenceNo'), 'totalAmount': -(int(response_json.get('totalAmount', 0)) / 100) } current_app.logger.debug('>create_invoice') return invoice