Skip to content

Commit

Permalink
205547 delivery mechanism forms
Browse files Browse the repository at this point in the history
  • Loading branch information
domdinicola committed Jun 28, 2024
1 parent afa705b commit ac97e91
Show file tree
Hide file tree
Showing 12 changed files with 118 additions and 20 deletions.
15 changes: 14 additions & 1 deletion pdm.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,7 @@ dependencies = [
"wheel",
"uwsgi",
"zeep",
"django-phonenumber-field>=8.0.0",
]
name = "hope_payment_gateway"
version = "0.1"
Expand Down
25 changes: 20 additions & 5 deletions src/hope_payment_gateway/api/fsp/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,13 +39,28 @@ def get_payload(self, obj: Any) -> Any:

class DeliveryMechanismSerializer(PayloadMixin, serializers.ModelSerializer):

form = serializers.SerializerMethodField()

def get_form(self, obj):
if obj.form:
form = obj.form.get_form()
return [
{
field.name: {
"label": field.label,
"type": field.widget_type,
"help_text": field.help_text,
"validators": ", ".join(
[getattr(validator, "__name__", str(validator)) for validator in field.field.validators]
),
}
}
for field in form.visible_fields()
]

class Meta:
model = DeliveryMechanism
fields = (
"id",
"code",
"name",
)
fields = ("id", "code", "name", "form")


class FinancialServiceProviderConfigNestedSerializer(serializers.ModelSerializer):
Expand Down
6 changes: 3 additions & 3 deletions src/hope_payment_gateway/apps/fsp/western_union/apps.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
from django.apps import AppConfig as BaseAppConfig

from hope_payment_gateway.apps.gateway.registry import export_registry, registry
from hope_payment_gateway.apps.gateway.registry import delivery_mechanism_registry, export_registry, registry


class AppConfig(BaseAppConfig):
name = __name__.rpartition(".")[0]
verbose_name = "Western Union"

def ready(self) -> None:
from .handlers import CSVExportStrategy, WesternUnionHandler
from .handlers import WesternUnionHandler

registry.register(WesternUnionHandler)
export_registry.register(CSVExportStrategy)

from . import tasks # noqa
6 changes: 0 additions & 6 deletions src/hope_payment_gateway/apps/fsp/western_union/handlers.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,3 @@ def get_configuration(self, config_key, delivery_mechanism):
except FinancialServiceProviderConfig.DoesNotExist:
config = wu.configuration
return config


class CSVExportStrategy(FSPProcessor):

def export(self):
pass
16 changes: 15 additions & 1 deletion src/hope_payment_gateway/apps/gateway/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,19 @@
logger = logging.getLogger(__name__)


class APIAdminMixin:
reverse_name = None

@link()
def api(self, button: button) -> Optional[str]:
if self.reverse_name and "original" in button.context:
button.href = reverse(f"api:{self.reverse_name}-list")
button.visible = True
else:
button.visible = False
return None


class ImportCSVForm(Form):
file = FileField(widget=FileInput(attrs={"accept": "text/csv"}))

Expand Down Expand Up @@ -258,12 +271,13 @@ class FinancialServiceProviderAdmin(ExtraButtonsMixin, admin.ModelAdmin):


@admin.register(DeliveryMechanism)
class DeliveryMechanismAdmin(ExtraButtonsMixin, admin.ModelAdmin):
class DeliveryMechanismAdmin(APIAdminMixin, ExtraButtonsMixin, admin.ModelAdmin):
list_display = (
"code",
"name",
)
search_fields = ("code", "name")
reverse_name = "delivery_mechanism"


@admin.register(ExportTemplate)
Expand Down
8 changes: 5 additions & 3 deletions src/hope_payment_gateway/apps/gateway/apps.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
from django.apps import AppConfig as BaseAppConfig

from hope_payment_gateway.apps.gateway.registry import registry
from hope_payment_gateway.apps.gateway.registry import delivery_mechanism_registry, export_registry


class AppConfig(BaseAppConfig):
name = __name__.rpartition(".")[0]
verbose_name = "Gateway"

def ready(self) -> None:
from hope_payment_gateway.apps.fsp.western_union.handlers import WesternUnionHandler

registry.register(WesternUnionHandler)
from .handlers import CSVExportStrategy, MobileMoneyProcessor

export_registry.register(CSVExportStrategy)
delivery_mechanism_registry.register(MobileMoneyProcessor)
19 changes: 19 additions & 0 deletions src/hope_payment_gateway/apps/gateway/forms.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
from django import forms
from django.core.validators import RegexValidator

from phonenumber_field.formfields import PhoneNumberField

iban_validator = RegexValidator("^[A-Z]{2}(?:[ ]?[0-9]){18,20}$", "Invalid IBAN")


class DeliveryMechanismForm(forms.Form):
pass


class MobileMoneyForm(DeliveryMechanismForm):
phone_no = PhoneNumberField(help_text="Telephone number")
iban = forms.CharField(max_length=24, validators=[iban_validator], help_text="IBAN Address")


class IbanForm(DeliveryMechanismForm):
iban = forms.CharField(max_length=24, validators=[iban_validator], help_text="IBAN Address")
14 changes: 14 additions & 0 deletions src/hope_payment_gateway/apps/gateway/handlers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
from .forms import MobileMoneyForm
from .registry import DeliveryMechanismProcessor, FSPProcessor


class CSVExportStrategy(FSPProcessor):

def export(self):
pass


class MobileMoneyProcessor(DeliveryMechanismProcessor):

def get_form(self):
return MobileMoneyForm()
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# Generated by Django 5.0.6 on 2024-06-27 08:19

import strategy_field.fields
from django.db import migrations


class Migration(migrations.Migration):

dependencies = [
("gateway", "0021_paymentrecord_marked_for_payment"),
]

operations = [
migrations.AddField(
model_name="deliverymechanism",
name="form",
field=strategy_field.fields.StrategyField(blank=True, null=True),
),
]
3 changes: 2 additions & 1 deletion src/hope_payment_gateway/apps/gateway/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,13 @@
from strategy_field.fields import StrategyField

from hope_payment_gateway.apps.core.models import System
from hope_payment_gateway.apps.gateway.registry import export_registry, registry
from hope_payment_gateway.apps.gateway.registry import delivery_mechanism_registry, export_registry, registry


class DeliveryMechanism(TimeStampedModel):
code = models.CharField(max_length=32, unique=True)
name = models.CharField(max_length=128)
form = StrategyField(registry=delivery_mechanism_registry, null=True, blank=True)

def __str__(self):
return f"{self.name} [{self.code}]"
Expand Down
6 changes: 6 additions & 0 deletions src/hope_payment_gateway/apps/gateway/registry.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,15 @@ def notify(self):
pass


class DeliveryMechanismProcessor:
def __init__(self, dm):
self.dm = dm


class DefaultProcessor(FSPProcessor):
pass


registry = Registry(FSPProcessor)
export_registry = Registry(FSPProcessor)
delivery_mechanism_registry = Registry(DeliveryMechanismProcessor)

0 comments on commit ac97e91

Please sign in to comment.