Files
MermsCoreFlask/app/models/payments.py
T
CHIEFSOFT\ameye a0cde39737 payment added
2025-08-30 06:12:05 -04:00

99 lines
3.3 KiB
Python

from datetime import datetime, timezone, timedelta
from app.extensions import db
from app.models.charge import Charge
from sqlalchemy.orm import relationship
from sqlalchemy.sql import func
from sqlalchemy.exc import IntegrityError
class Payments(db.Model):
__tablename__ = 'payments'
id = db.Column(
db.Integer,
primary_key=True,
autoincrement=True,
)
uid = db.Column(db.String(150), nullable=True)
member_id = db.Column(db.Integer, nullable=False)
option_name = db.Column(db.String(100), nullable=False)
option_type = db.Column(db.String(25), nullable=False)
payment_uid = db.Column(db.String(100), nullable=False)
amount = db.Column(db.Integer, nullable=True, default=0)
status = db.Column(db.Integer, nullable=True, default=1)
added = db.Column(db.DateTime(timezone=True), server_default=func.now())
sub_start = db.Column(db.DateTime(timezone=True))
next_billing = db.Column(db.DateTime(timezone=True))
sub_stop = db.Column(db.DateTime(timezone=True))
'''
"payment_uid": currentPaymentsession.uid,
"member_id": currentPaymentsession.member_id,
"option_name": currentPaymentsession.option_name,
"amount": amount_subtotal,
"option_type": "MAIN"
'''
@classmethod
def add_payment(cls, member_id, payment_uid, option_name,amount, option_type, next_billing_days=30):
# Get the current date and time
current_date = datetime.now()
# Calculate the date "next_billing_days" days from now
next_billing_date = current_date + timedelta(days=next_billing_days)
# Save the response
pay_data = cls(
member_id=member_id,
payment_uid=payment_uid,
option_name=option_name,
amount=amount,
option_type=option_type,
added=datetime.now(timezone.utc),
sub_start=datetime.now(timezone.utc),
next_billing = next_billing_date
)
try:
db.session.add(pay_data)
except IntegrityError as err:
raise ValueError(f"Database integrity error: {err}")
return pay_data
def to_dict(self):
return {
"id": self.id,
"uid": self.uid,
"member_id": self.member_id,
"option_name": self.option_name,
"option_type": self.option_type,
"payment_uid": self.payment_uid,
"amount": self.amount,
"status": self.status,
"added": self.added,
"sub_start": self.sub_start,
"next_billing": self.next_billing,
"sub_stop": self.sub_stop
}
def __repr__(self):
return f'<Payments {self.id}>'
'''
id SERIAL,
uid uuid DEFAULT uuid_generate_v4(),
member_id INT REFERENCES members(id),
option_name VARCHAR(100) REFERENCES subscription_options(option_name),
option_type VARCHAR(25),
payment_uid VARCHAR(100) UNIQUE NOT NULL,
amount INT DEFAULT 0,
status INT DEFAULT 1,
added timestamp without time zone DEFAULT now(),
sub_start timestamp without time zone,
next_billing timestamp without time zone,
sub_stop timestamp without time zone
'''