This commit is contained in:
anhduy-tech
2026-01-05 00:34:49 +07:00
parent 15bb6720b6
commit e0403055e3
11 changed files with 76 additions and 7 deletions

Binary file not shown.

View File

@@ -1,7 +1,7 @@
import os import os
import subprocess import subprocess
from datetime import datetime from datetime import datetime
from django.db import models
import numpy as np import numpy as np
from docx import Document from docx import Document
from docx.enum.text import WD_ALIGN_PARAGRAPH from docx.enum.text import WD_ALIGN_PARAGRAPH
@@ -206,13 +206,23 @@ class DocumentGenerator:
raise ValueError(f"Could not resolve '{lookup_from}'. It is not a valid API parameter or a reference to another data source.") raise ValueError(f"Could not resolve '{lookup_from}'. It is not a valid API parameter or a reference to another data source.")
def _get_value_from_object(self, obj, field_path): def _get_value_from_object(self, obj, field_path):
if obj is None: if not obj:
return None return None
parts = field_path.split('.')
value = obj value = obj
for part in field_path.replace("__", ".").split("."): for part in parts:
if value is None: if value is None:
return None break
# Lấy thuộc tính từ object
value = getattr(value, part, None) value = getattr(value, part, None)
# KIỂM TRA NẾU LÀ QUAN HỆ NGƯỢC (ForeignKey ngược hoặc ManyToMany)
# Trong Django, các quan hệ này trả về một Manager (có method 'all')
if hasattr(value, 'all') and not isinstance(value, models.Model):
value = value.first() # Tự động lấy bản ghi đầu tiên
return value return value
def fetch_data(self): def fetch_data(self):

View File

@@ -0,0 +1,35 @@
# Generated by Django 5.1.7 on 2026-01-04 16:15
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('app', '0343_import_setting_call_api_delete_payment'),
]
operations = [
migrations.AddField(
model_name='legal_rep',
name='relation',
field=models.ForeignKey(default=10, on_delete=django.db.models.deletion.PROTECT, related_name='+', to='app.relation'),
preserve_default=False,
),
migrations.AddField(
model_name='organization',
name='bank_account',
field=models.CharField(max_length=50, null=True),
),
migrations.AddField(
model_name='organization',
name='bank_name',
field=models.CharField(max_length=100, null=True),
),
migrations.AddField(
model_name='organization',
name='tax_code',
field=models.CharField(max_length=20, null=True),
),
]

View File

@@ -0,0 +1,19 @@
# Generated by Django 5.1.7 on 2026-01-04 17:34
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('app', '0344_legal_rep_relation_organization_bank_account_and_more'),
]
operations = [
migrations.AlterField(
model_name='co_ownership',
name='transaction',
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='co_op', to='app.transaction'),
),
]

View File

@@ -1322,7 +1322,10 @@ class Organization(models.Model):
customer = models.ForeignKey(Customer, null=False, related_name='orgncust', on_delete=models.PROTECT) customer = models.ForeignKey(Customer, null=False, related_name='orgncust', on_delete=models.PROTECT)
shortname = models.CharField(max_length=50, null=False) shortname = models.CharField(max_length=50, null=False)
established_date = models.DateField() established_date = models.DateField()
tax_code = models.CharField(max_length=20, null=True)
website = models.CharField(max_length=200, null=True) website = models.CharField(max_length=200, null=True)
bank_account = models.CharField(max_length=50, null=True)
bank_name = models.CharField(max_length=100, null=True)
type = models.ForeignKey(Company_Type, null=True, related_name='+', on_delete=models.PROTECT) type = models.ForeignKey(Company_Type, null=True, related_name='+', on_delete=models.PROTECT)
create_time = models.DateTimeField(null=True, auto_now_add=True) create_time = models.DateTimeField(null=True, auto_now_add=True)
update_time = models.DateTimeField(null=True, auto_now=True) update_time = models.DateTimeField(null=True, auto_now=True)
@@ -1334,6 +1337,7 @@ class Organization(models.Model):
class Legal_Rep(models.Model): class Legal_Rep(models.Model):
organization = models.ForeignKey(Organization, null=False, related_name='orgrep', on_delete=models.PROTECT) organization = models.ForeignKey(Organization, null=False, related_name='orgrep', on_delete=models.PROTECT)
people = models.ForeignKey(People, null=False, related_name='+', on_delete=models.PROTECT) people = models.ForeignKey(People, null=False, related_name='+', on_delete=models.PROTECT)
relation = models.ForeignKey(Relation, null=False, related_name='+', on_delete=models.PROTECT)
create_time = models.DateTimeField(null=True, auto_now_add=True) create_time = models.DateTimeField(null=True, auto_now_add=True)
class Meta: class Meta:
@@ -1952,7 +1956,7 @@ class Transaction_Discount(models.Model):
class Co_Ownership(models.Model): class Co_Ownership(models.Model):
code = models.CharField(max_length=30, null=False, unique=True) code = models.CharField(max_length=30, null=False, unique=True)
transaction = models.ForeignKey(Transaction, null=False, related_name='+', on_delete=models.PROTECT) transaction = models.ForeignKey(Transaction, null=False, related_name='co_op', on_delete=models.PROTECT)
people = models.ForeignKey(People, null=False, related_name='+', on_delete=models.PROTECT) people = models.ForeignKey(People, null=False, related_name='+', on_delete=models.PROTECT)
create_time = models.DateTimeField(null=True, auto_now_add=True) create_time = models.DateTimeField(null=True, auto_now_add=True)
update_time = models.DateTimeField(null=True, auto_now=True) update_time = models.DateTimeField(null=True, auto_now=True)

View File

@@ -0,0 +1 @@
,kumduy,duy-pc,04.01.2026 23:48,file:///home/kumduy/.config/libreoffice/4;