Skip to content

Commit

Permalink
Dynamic ICPS from hoosnick/payme-pkg-3.0b
Browse files Browse the repository at this point in the history
Dynamic ICPS
  • Loading branch information
hoosnick authored Aug 18, 2023
2 parents f31823f + fc798d7 commit b8ea956
Show file tree
Hide file tree
Showing 14 changed files with 285 additions and 93 deletions.
13 changes: 11 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,10 +1,19 @@
# virtual env
env/
venv/

# dev test
core/
my_app/
db.sqlite3
manage.py
dist/
venv/

# ide configs
.vscode/
.idea/

# caches
__pycache__/
paymentsuz.egg-info/
payme_pkg.egg-info/
manage.py
25 changes: 17 additions & 8 deletions lib/payme/admin.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,20 @@
from django.contrib import admin

from payme.models import CUSTOM_ORDER
from payme.models import Order as DefaultOrderModel
from payme.models import (
Item, MerchatTransactionsModel,
OrderDetail, ShippingDetail
)
# pylint: disable=fixme
# TODO: order Payme models in admin panel
# 1. OrderDetail
# 2. Item
# 3. ShippingDetail
# 4. MerchatTransactionsModel

from payme.models import MerchatTransactionsModel

if not CUSTOM_ORDER:
admin.site.register(DefaultOrderModel)

admin.site.register(MerchatTransactionsModel)
admin.site.register(
[
OrderDetail, Item,
ShippingDetail,
MerchatTransactionsModel,
]
)
13 changes: 7 additions & 6 deletions lib/payme/methods/cancel_transaction.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@

from django.db import transaction

from payme.utils.logging import logger
from payme.models import MerchatTransactionsModel
from payme.errors.exceptions import PerformTransactionDoesNotExist
from payme.models import MerchatTransactionsModel as MTM
from payme.serializers import MerchatTransactionsModelSerializer as MTMS
from payme.utils.logging import logger


class CancelTransaction:
Expand All @@ -25,16 +25,17 @@ def __call__(self, params: dict):
)
try:
with transaction.atomic():
transactions: MerchatTransactionsModel = \
MerchatTransactionsModel.objects.filter(
_id=clean_data.get('_id'),
).first()
transactions = MTM.objects.filter(
_id=clean_data.get('_id')
).first()

if transactions.cancel_time == 0:
transactions.cancel_time = int(time.time() * 1000)
if transactions.perform_time == 0:
transactions.state = -1
if transactions.perform_time != 0:
transactions.state = -2

transactions.reason = clean_data.get("reason")
transactions.save()

Expand Down
19 changes: 17 additions & 2 deletions lib/payme/methods/check_perform_transaction.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
from payme.serializers import (
MerchatTransactionsModelSerializer,
OrderModelSerializer
)
from payme.utils.get_params import get_params
from payme.serializers import MerchatTransactionsModelSerializer
from payme.utils.order_finder import Order


class CheckPerformTransaction:
Expand All @@ -11,16 +15,27 @@ class CheckPerformTransaction:
-------------------------
https://developer.help.paycom.uz/metody-merchant-api/checktransaction
"""

def __call__(self, params: dict) -> dict:
serializer = MerchatTransactionsModelSerializer(
data=get_params(params)
)
serializer.is_valid(raise_exception=True)

order = OrderModelSerializer(
instance=Order.objects.get(
id=serializer.validated_data.get('order_id')
)
)

response = {
"result": {
"allow": True,
}
"detail": order.data.get("detail")
}
}

if not order.data.get("detail"):
del response["result"]["detail"]

return None, response
5 changes: 2 additions & 3 deletions lib/payme/methods/check_transaction.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,9 @@ class CheckTransaction:
-------------------------
https://developer.help.paycom.uz/metody-merchant-api/checkperformtransaction
"""

def __call__(self, params: dict) -> None:
clean_data: dict = MTMS.get_validated_data(
params=params
)
clean_data: dict = MTMS.get_validated_data(params=params)

try:
transaction = \
Expand Down
14 changes: 7 additions & 7 deletions lib/payme/methods/create_transaction.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import uuid
import time
import datetime
import time
import uuid

from payme.utils.logging import logger
from payme.utils.get_params import get_params
from payme.models import MerchatTransactionsModel
from payme.errors.exceptions import TooManyRequests
from payme.models import MerchatTransactionsModel
from payme.serializers import MerchatTransactionsModelSerializer
from payme.utils.get_params import get_params
from payme.utils.logging import logger


class CreateTransaction:
Expand All @@ -18,6 +18,7 @@ class CreateTransaction:
-------------------------
https://developer.help.paycom.uz/metody-merchant-api/createtransaction
"""

def __call__(self, params: dict) -> dict:
serializer = MerchatTransactionsModelSerializer(
data=get_params(params)
Expand Down Expand Up @@ -61,8 +62,7 @@ def __call__(self, params: dict) -> dict:

@staticmethod
def _convert_ms_to_datetime(time_ms: str) -> int:
"""Use this format to convert from time ms to datetime format.
"""
"""Use this format to convert from time ms to datetime format."""
readable_datetime = datetime.datetime.fromtimestamp(time_ms / 1000)

return readable_datetime
13 changes: 6 additions & 7 deletions lib/payme/methods/generate_link.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import base64
from decimal import Decimal
from dataclasses import dataclass

from django.conf import settings
Expand All @@ -19,7 +18,7 @@ class GeneratePayLink:
Parameters
----------
order_id: int — The order_id for paying
amount: int — The amount belong to the order
amount: float — The amount belong to the order
Returns str — pay link
----------------------
Expand All @@ -29,7 +28,7 @@ class GeneratePayLink:
https://developer.help.paycom.uz/initsializatsiya-platezhey/
"""
order_id: str
amount: Decimal
amount: float

def generate_link(self) -> str:
"""
Expand All @@ -52,23 +51,23 @@ def generate_link(self) -> str:
)

@staticmethod
def to_tiyin(amount: Decimal) -> Decimal:
def to_tiyin(amount: float) -> float:
"""
Convert from soum to tiyin.
Parameters
----------
amount: Decimal -> order amount
amount: float -> order amount
"""
return amount * 100

@staticmethod
def to_soum(amount: Decimal) -> Decimal:
def to_soum(amount: float) -> float:
"""
Convert from tiyin to soum.
Parameters
----------
amount: Decimal -> order amount
amount: float -> order amount
"""
return amount / 100
2 changes: 1 addition & 1 deletion lib/payme/methods/get_statement.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
from django.db import DatabaseError

from payme.utils.logging import logger
from payme.models import MerchatTransactionsModel
from payme.serializers import MerchatTransactionsModelSerializer as MTMS
from payme.utils.logging import logger
from payme.utils.make_aware_datetime import make_aware_datetime as mad


Expand Down
5 changes: 3 additions & 2 deletions lib/payme/methods/perform_transaction.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@

from django.db import DatabaseError

from payme.utils.logging import logger
from payme.utils.get_params import get_params
from payme.models import MerchatTransactionsModel
from payme.serializers import MerchatTransactionsModelSerializer
from payme.utils.get_params import get_params
from payme.utils.logging import logger


class PerformTransaction:
Expand All @@ -17,6 +17,7 @@ class PerformTransaction:
-------------------------
https://developer.help.paycom.uz/metody-merchant-api/performtransaction
"""

def __call__(self, params: dict) -> dict:
serializer = MerchatTransactionsModelSerializer(
data=get_params(params)
Expand Down
57 changes: 43 additions & 14 deletions lib/payme/migrations/0001_initial.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
# pylint: disable=invalid-name
import django.db.models.deletion
from django.db import migrations, models


Expand All @@ -8,15 +9,30 @@ class Migration(migrations.Migration):
dependencies = []

operations = [
migrations.CreateModel(
name='Item',
fields=[
('id', models.BigAutoField(
auto_created=True, primary_key=True,
serialize=False, verbose_name='ID'
)),
('discount', models.FloatField(blank=True, null=True)),
('title', models.CharField(max_length=255)),
('price', models.FloatField(blank=True, null=True)),
('count', models.IntegerField(default=1)),
('code', models.CharField(max_length=17)),
('units', models.IntegerField(blank=True, null=True)),
('package_code', models.CharField(max_length=255)),
('vat_percent', models.IntegerField(blank=True, default=0, null=True)),
],
),
migrations.CreateModel(
name='MerchatTransactionsModel',
fields=[
('id', models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name='ID')
),
auto_created=True, primary_key=True,
serialize=False, verbose_name='ID'
)),
('_id', models.CharField(max_length=255, null=True)),
('transaction_id', models.CharField(max_length=255, null=True)),
('order_id', models.BigIntegerField(blank=True, null=True)),
Expand All @@ -32,17 +48,30 @@ class Migration(migrations.Migration):
],
),
migrations.CreateModel(
name='Order',
name='ShippingDetail',
fields=[
('id', models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name='ID')
),
('amount', models.IntegerField(blank=True, null=True)),
('created_at', models.DateTimeField(auto_now_add=True)),
('updated_at', models.DateTimeField(auto_now=True)),
auto_created=True, primary_key=True,
serialize=False, verbose_name='ID'
)),
('title', models.CharField(max_length=255)),
('price', models.FloatField(default=0)),
],
),
migrations.CreateModel(
name='OrderDetail',
fields=[
('id', models.BigAutoField(
auto_created=True, primary_key=True,
serialize=False, verbose_name='ID'
)),
('receipt_type', models.IntegerField(default=0)),
('items', models.ManyToManyField(to='payme.item')),
('shipping', models.ForeignKey(
blank=True, null=True,
on_delete=django.db.models.deletion.CASCADE,
to='payme.shippingdetail'
)),
],
),
]
Loading

0 comments on commit b8ea956

Please sign in to comment.