changes
This commit is contained in:
@@ -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)
|
||||
# ====================================================================================
|
||||
|
||||
Reference in New Issue
Block a user