This commit is contained in:
anhduy-tech
2026-03-19 12:05:45 +07:00
parent b72be8471e
commit 690ada1a2f
2 changed files with 3 additions and 85 deletions

View File

@@ -27,7 +27,7 @@ class AutoCodeModel(models.Model):
# ====================================================================================
# GIỮ NGUYÊN TỪ FILE GỐC — lookup tables không liên quan BĐS
# GIỮ NGUYÊN TỪ FILE GỐC
# ====================================================================================
class Money_Unit(models.Model):
@@ -594,8 +594,6 @@ class News(models.Model):
class Meta:
db_table = 'news'
# GIỮ NGUYÊN — hệ thống messaging/notification
class Message_Type(models.Model):
code = models.CharField(max_length=30, null=False, unique=True)
title = models.CharField(max_length=200, null=True)
@@ -641,7 +639,6 @@ class Message_Receiver(models.Model):
unique_together = ('message', 'user')
# GIỮ NGUYÊN — task/schedule/alert
class Schedule_Type(models.Model):
code = models.CharField(max_length=30, null=False, unique=True)
name = models.CharField(max_length=100, null=False)
@@ -986,7 +983,6 @@ class Customer(AutoCodeModel):
note = models.TextField(null=True)
type = models.ForeignKey(Customer_Type, null=False, related_name='+', on_delete=models.PROTECT)
segment = models.ForeignKey(Customer_Segment, null=True, related_name='+', on_delete=models.PROTECT)
# Field mới cho cloud: tài khoản portal + nhân viên phụ trách
user = models.OneToOneField(User, null=True, related_name='customer_profile', on_delete=models.SET_NULL)
sale_staff = models.ForeignKey('Staff', null=True, related_name='+', on_delete=models.PROTECT)
creator = models.ForeignKey(User, null=False, related_name='+', on_delete=models.PROTECT)
@@ -1228,7 +1224,6 @@ class Internal_Entry(AutoCodeModel):
date = models.DateField(null=False)
ref = models.CharField(max_length=30, null=True, unique=True)
customer = models.ForeignKey(Customer, null=True, related_name='entrycus', on_delete=models.PROTECT)
# Cloud: thay product → subscription
subscription = models.ForeignKey('Subscription', null=True, related_name='+', on_delete=models.PROTECT)
invoice = models.ForeignKey('Invoice', null=True, related_name='+', on_delete=models.PROTECT)
provider_invoice = models.ForeignKey('Provider_Invoice', null=True, related_name='+', on_delete=models.PROTECT)
@@ -1252,13 +1247,11 @@ class Entry_File(models.Model):
unique_together = ('ref', 'file')
# GIỮ NGUYÊN — Invoice gốc (liên kết với payment_schedule BĐS, giữ để không break data cũ)
class Invoice(models.Model):
link = models.CharField(max_length=100, null=True)
ref_code = models.CharField(max_length=30, null=False)
amount = models.DecimalField(max_digits=35, decimal_places=2)
note = models.CharField(max_length=100, null=True)
# Cloud: thêm fields mới (nullable để không break data cũ)
customer = models.ForeignKey(Customer, null=True, related_name='invoices', on_delete=models.PROTECT)
issue_date = models.DateField(null=True)
due_date = models.DateField(null=True)
@@ -1559,81 +1552,6 @@ class Email_Job(models.Model):
class Meta:
db_table = 'email_job'
# GIỮ NGUYÊN — Workflow engine
class Workflow(models.Model):
code = models.CharField(max_length=50, unique=True)
name = models.CharField(max_length=200)
description = models.TextField(blank=True)
is_active = models.BooleanField(default=True)
initial_step = models.ForeignKey('StepAction', null=True, blank=True, on_delete=models.SET_NULL,
related_name='initial_workflows')
create_time = models.DateTimeField(auto_now_add=True)
update_time = models.DateTimeField(auto_now=True)
class Meta:
db_table = 'workflow'
class StepAction(models.Model):
workflow = models.ForeignKey(Workflow, on_delete=models.CASCADE, related_name='steps')
step_code = models.CharField(max_length=50, unique=True)
name = models.CharField(max_length=200)
description = models.TextField(blank=True)
order = models.PositiveIntegerField(default=0)
trigger_event = models.CharField(max_length=50, choices=[
('create', 'Create'), ('update', 'Update'), ('approve', 'Approve'),
('advance', 'Advance'), ('confirm', 'Confirm'), ('custom', 'Custom')
])
target_model = models.CharField(max_length=100, blank=True)
actions = JSONField(default=list, blank=True)
config = JSONField(default=dict, blank=True)
is_active = models.BooleanField(default=True)
create_time = models.DateTimeField(auto_now_add=True)
update_time = models.DateTimeField(auto_now=True)
class Meta:
db_table = 'step_action'
ordering = ['order']
unique_together = ('workflow', 'step_code')
class Utility(models.Model):
code = models.CharField(max_length=50, unique=True)
name = models.CharField(max_length=200)
description = models.TextField(blank=True)
utility_type = models.CharField(max_length=50, choices=[
('email', 'Email API'), ('crud', 'Data CRUD'), ('payment', 'Payment API'),
('document', 'Document Gen'), ('notification', 'Notification'), ('custom', 'Custom')
])
api_config = JSONField(default=dict, blank=True)
params_template = JSONField(default=dict, blank=True)
integration_module = models.CharField(max_length=100, blank=True)
is_active = models.BooleanField(default=True)
create_time = models.DateTimeField(auto_now_add=True)
update_time = models.DateTimeField(auto_now=True)
class Meta:
db_table = 'utility'
class Rule(models.Model):
step_action = models.ForeignKey(StepAction, on_delete=models.CASCADE, related_name='rules')
rule_code = models.CharField(max_length=50, unique=True)
name = models.CharField(max_length=200)
description = models.TextField(blank=True)
conditions = JSONField(default=list, blank=True)
constraints = JSONField(default=list, blank=True)
utility = models.ForeignKey(Utility, null=True, blank=True, on_delete=models.SET_NULL, related_name='rules')
is_active = models.BooleanField(default=True)
create_time = models.DateTimeField(auto_now_add=True)
update_time = models.DateTimeField(auto_now=True)
class Meta:
db_table = 'rule'
unique_together = ('step_action', 'rule_code')
# ====================================================================================
# CLOUD DOMAIN — PROVIDER (NHÀ CUNG CẤP HẠ TẦNG)
# ====================================================================================