forked from elmau/empresa-libre
Agregar tablas para facturar
This commit is contained in:
parent
85c0804ecd
commit
e57001db56
|
@ -32,7 +32,7 @@ def conectar():
|
||||||
|
|
||||||
class Configuracion(BaseModel):
|
class Configuracion(BaseModel):
|
||||||
clave = TextField()
|
clave = TextField()
|
||||||
valor = TextField()
|
valor = TextField(default='')
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
order_by = ('clave',)
|
order_by = ('clave',)
|
||||||
|
@ -86,8 +86,25 @@ class SATRegimenes(BaseModel):
|
||||||
class Emisor(BaseModel):
|
class Emisor(BaseModel):
|
||||||
rfc = TextField(index=True)
|
rfc = TextField(index=True)
|
||||||
nombre = TextField()
|
nombre = TextField()
|
||||||
|
calle = TextField(default='')
|
||||||
|
no_exterior = TextField(default='')
|
||||||
|
no_interior = TextField(default='')
|
||||||
|
colonia = TextField(default='')
|
||||||
|
municipio = TextField(default='')
|
||||||
|
estado = TextField(default='')
|
||||||
|
pais = TextField(default='')
|
||||||
codigo_postal = TextField(default='')
|
codigo_postal = TextField(default='')
|
||||||
moral = BooleanField(default=False)
|
cp_expedicion = TextField(default='')
|
||||||
|
es_moral = BooleanField(default=False)
|
||||||
|
es_ong = BooleanField(default=False)
|
||||||
|
es_escuela = BooleanField(default=False)
|
||||||
|
autorizacion = TextField(default='')
|
||||||
|
fecha_autorizacion = DateField(null=True)
|
||||||
|
fecha_dof = DateField(null=True)
|
||||||
|
telefono = TextField(default='')
|
||||||
|
correo = TextField(default='')
|
||||||
|
web = TextField(default='')
|
||||||
|
curp = TextField(default='')
|
||||||
regimenes = ManyToManyField(SATRegimenes, related_name='emisores')
|
regimenes = ManyToManyField(SATRegimenes, related_name='emisores')
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
|
@ -114,51 +131,263 @@ class Certificado(BaseModel):
|
||||||
return self.serie
|
return self.serie
|
||||||
|
|
||||||
|
|
||||||
class Clients(BaseModel):
|
class Folios(BaseModel):
|
||||||
person_type = IntegerField(default=0)
|
serie = TextField()
|
||||||
rfc = FixedCharField(max_length=13, index=True)
|
inicio = IntegerField(default=1)
|
||||||
name = CharField(max_length=1000, index=True)
|
default = BooleanField(default=False)
|
||||||
street = FixedCharField(max_length=200, default='')
|
usar_con = TextField(default='T')
|
||||||
num_ext = FixedCharField(max_length=25, default='')
|
|
||||||
num_int = FixedCharField(max_length=25, default='')
|
|
||||||
postal_code = FixedCharField(max_length=15, default='')
|
|
||||||
colonia = FixedCharField(max_length=100, default='')
|
|
||||||
municipio = FixedCharField(max_length=100, default='')
|
|
||||||
state = FixedCharField(max_length=100, default='')
|
|
||||||
country = FixedCharField(max_length=100, default='')
|
|
||||||
conditions_pay = FixedCharField(max_length=250, default='')
|
|
||||||
days_pay = IntegerField(default=0)
|
|
||||||
business_days = BooleanField(default=False)
|
|
||||||
is_active = BooleanField(default=True)
|
|
||||||
commercial_name = CharField(max_length=1000, default='')
|
|
||||||
phones = CharField(max_length=500, default='')
|
|
||||||
web_page = CharField(max_length=500, default='')
|
|
||||||
invoice_email = CharField(max_length=500, default='')
|
|
||||||
is_client = BooleanField(default=False)
|
|
||||||
is_supplier = BooleanField(default=False)
|
|
||||||
is_ong = BooleanField(default=False)
|
|
||||||
account_client = FixedCharField(max_length=100, default='')
|
|
||||||
account_supplier = FixedCharField(max_length=100, default='')
|
|
||||||
notes = CharField(max_length=5000)
|
|
||||||
|
|
||||||
def __str__(self):
|
class Meta:
|
||||||
t = '{} ({})'
|
order_by = ('-default', 'serie', 'inicio')
|
||||||
return t.format(self.name, self.rfc)
|
indexes = (
|
||||||
|
(('serie', 'inicio'), True),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class Categorias(BaseModel):
|
||||||
|
categoria = TextField()
|
||||||
|
id_padre = IntegerField(default=0)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
order_by = ('categoria',)
|
||||||
|
indexes = (
|
||||||
|
(('categoria', 'id_padre'), True),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class CondicionesPago(BaseModel):
|
||||||
|
condicion = TextField(unique=True)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
order_by = ('condicion',)
|
||||||
|
|
||||||
|
|
||||||
|
class SATUnidades(BaseModel):
|
||||||
|
key = TextField(unique=True, index=True)
|
||||||
|
name = TextField(default='', index=True)
|
||||||
|
activo = BooleanField(default=False)
|
||||||
|
default = BooleanField(default=False)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
order_by = ('name',)
|
order_by = ('name',)
|
||||||
indexes = (
|
indexes = (
|
||||||
(('rfc', 'name'), True),
|
(('key', 'name'), True),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class ClientsTags(BaseModel):
|
class SATFormaPago(BaseModel):
|
||||||
client = ForeignKeyField(Clients)
|
key = TextField(unique=True, index=True)
|
||||||
tag = ForeignKeyField(Tags)
|
name = TextField(default='', index=True)
|
||||||
|
activo = BooleanField(default=False)
|
||||||
|
default = BooleanField(default=False)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
|
order_by = ('-default', 'name',)
|
||||||
indexes = (
|
indexes = (
|
||||||
(('client', 'tag'), True),
|
(('key', 'name'), True),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class SATAduanas(BaseModel):
|
||||||
|
key = TextField(unique=True, index=True)
|
||||||
|
name = TextField(default='', index=True)
|
||||||
|
activo = BooleanField(default=False)
|
||||||
|
default = BooleanField(default=False)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
order_by = ('-default', 'name',)
|
||||||
|
indexes = (
|
||||||
|
(('key', 'name'), True),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class SATMonedas(BaseModel):
|
||||||
|
key = TextField(unique=True, index=True)
|
||||||
|
name = TextField(default='', index=True)
|
||||||
|
activo = BooleanField(default=False)
|
||||||
|
default = BooleanField(default=False)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
order_by = ('-default', 'name',)
|
||||||
|
indexes = (
|
||||||
|
(('key', 'name'), True),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class SATImpuestos(BaseModel):
|
||||||
|
key = TextField(index=True)
|
||||||
|
name = TextField(default='', index=True)
|
||||||
|
factor = TextField(default='T')
|
||||||
|
tipo = TextField(default='T')
|
||||||
|
tasa = DecimalField(default=0.0, decimal_places=6, auto_round=True)
|
||||||
|
activo = BooleanField(default=False)
|
||||||
|
default = BooleanField(default=False)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
order_by = ('-default', 'name',)
|
||||||
|
indexes = (
|
||||||
|
(('key', 'factor', 'tipo', 'tasa'), True),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class SATUsoCfdi(BaseModel):
|
||||||
|
key = TextField(index=True, unique=True)
|
||||||
|
name = TextField(default='', index=True)
|
||||||
|
activo = BooleanField(default=False)
|
||||||
|
default = BooleanField(default=False)
|
||||||
|
fisica = BooleanField(default=True)
|
||||||
|
moral = BooleanField(default=False)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
order_by = ('-default', 'name',)
|
||||||
|
indexes = (
|
||||||
|
(('key', 'name'), True),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class Addendas(BaseModel):
|
||||||
|
nombre = TextField(unique=True)
|
||||||
|
addenda = TextField()
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
order_by = ('nombre',)
|
||||||
|
|
||||||
|
|
||||||
|
class Socios(BaseModel):
|
||||||
|
rfc = TextField(index=True)
|
||||||
|
nombre = TextField(index=True)
|
||||||
|
nombre_comercial = TextField(index=True)
|
||||||
|
calle = TextField(default='')
|
||||||
|
no_exterior = TextField(default='')
|
||||||
|
no_interior = TextField(default='')
|
||||||
|
colonia = TextField(default='')
|
||||||
|
municipio = TextField(default='')
|
||||||
|
estado = TextField(default='')
|
||||||
|
pais = TextField(default='')
|
||||||
|
codigo_postal = TextField(default='')
|
||||||
|
notas = TextField(default='')
|
||||||
|
telefonos = TextField(default='')
|
||||||
|
es_activo = BooleanField(default=True)
|
||||||
|
es_moral = BooleanField(default=False)
|
||||||
|
es_extranjero = BooleanField(default=False)
|
||||||
|
es_ong = BooleanField(default=False)
|
||||||
|
fecha_alta = DateField(default=util.now)
|
||||||
|
dias_pago = IntegerField(default=0)
|
||||||
|
dias_habiles = BooleanField(default=False)
|
||||||
|
es_cliente = BooleanField(default=False)
|
||||||
|
es_proveedor = BooleanField(default=False)
|
||||||
|
cuenta_cliente = TextField(default='')
|
||||||
|
cuenta_proveedor = TextField(default='')
|
||||||
|
web = TextField(default='')
|
||||||
|
correo_facturas = TextField(default='')
|
||||||
|
condicion_pago = ForeignKeyField(CondicionesPago, null=True)
|
||||||
|
addenda = ForeignKeyField(Addendas, null=True)
|
||||||
|
tags = ManyToManyField(Tags, related_name='socios_tags')
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
t = '{} ({})'
|
||||||
|
return t.format(self.nombre, self.rfc)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
order_by = ('nombre',)
|
||||||
|
indexes = (
|
||||||
|
(('rfc', 'nombre'), True),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class Productos(BaseModel):
|
||||||
|
categoria = ForeignKeyField(Categorias, null=True)
|
||||||
|
clave = TextField(unique=True, index=True)
|
||||||
|
clave_sat = TextField()
|
||||||
|
descripcion = TextField(index=True)
|
||||||
|
unidad = ForeignKeyField(SATUnidades)
|
||||||
|
valor_unitario = DecimalField(default=0.0, decimal_places=6, auto_round=True)
|
||||||
|
ultimo_costo = DecimalField(default=0.0, decimal_places=6, auto_round=True)
|
||||||
|
descuento = DecimalField(default=0.0, decimal_places=6, auto_round=True)
|
||||||
|
inventario = BooleanField(default=False)
|
||||||
|
existencia = DoubleField(default=0.0)
|
||||||
|
minimo = DoubleField(default=0.0)
|
||||||
|
codigo_barras = TextField(default='')
|
||||||
|
cuenta_predial = TextField(default='')
|
||||||
|
es_activo = BooleanField(default=True)
|
||||||
|
impuestos = ManyToManyField(SATImpuestos, related_name='productos')
|
||||||
|
tags = ManyToManyField(Tags, related_name='productos_tags')
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
order_by = ('descripcion',)
|
||||||
|
|
||||||
|
|
||||||
|
class Facturas(BaseModel):
|
||||||
|
cliente = ForeignKeyField(Socios)
|
||||||
|
serie = TextField(default='')
|
||||||
|
folio = IntegerField(default=0)
|
||||||
|
fecha = DateTimeField(default=util.now)
|
||||||
|
fecha_timbrado = DateTimeField(null=True)
|
||||||
|
forma_pago = TextField(default='')
|
||||||
|
condiciones_pago = TextField(default='')
|
||||||
|
subtotal = DecimalField(default=0.0, decimal_places=6, auto_round=True)
|
||||||
|
descuento = DecimalField(default=0.0, decimal_places=6, auto_round=True)
|
||||||
|
moneda = TextField(default='MXN')
|
||||||
|
tipo_cambio = DecimalField(default=1.0, decimal_places=6, auto_round=True)
|
||||||
|
total = DecimalField(default=0.0, decimal_places=6, auto_round=True)
|
||||||
|
total_mn = DecimalField(default=0.0, decimal_places=6, auto_round=True)
|
||||||
|
tipo_comprobante = TextField(default='I')
|
||||||
|
metodo_pago = TextField(default='PUE')
|
||||||
|
lugar_expedicion = TextField(default='')
|
||||||
|
confirmacion = TextField(default='')
|
||||||
|
uso_cfdi = TextField(default='')
|
||||||
|
total_retenciones = DecimalField(
|
||||||
|
decimal_places=6, auto_round=True, null=True)
|
||||||
|
total_trasladados = DecimalField(
|
||||||
|
decimal_places=6, auto_round=True, null=True)
|
||||||
|
xml = TextField(default='')
|
||||||
|
uuid = UUIDField(null=True)
|
||||||
|
estatus = TextField(default='Guardada')
|
||||||
|
regimen_fiscal = TextField(default='')
|
||||||
|
notas = TextField(default='')
|
||||||
|
pagada = BooleanField(default=False)
|
||||||
|
error = TextField(default='')
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
order_by = ('fecha',)
|
||||||
|
|
||||||
|
|
||||||
|
class FacturasDetalle(BaseModel):
|
||||||
|
factura = ForeignKeyField(Facturas)
|
||||||
|
producto = ForeignKeyField(Productos, null=True)
|
||||||
|
cantidad = DecimalField(default=0.0, decimal_places=6, auto_round=True)
|
||||||
|
valor_unitario = DecimalField(default=0.0, decimal_places=6, auto_round=True)
|
||||||
|
descuento = DecimalField(default=0.0, decimal_places=6, auto_round=True)
|
||||||
|
precio_final = DecimalField(default=0.0, decimal_places=6, auto_round=True)
|
||||||
|
importe = DecimalField(default=0.0, decimal_places=6, auto_round=True)
|
||||||
|
descripcion = TextField(default='')
|
||||||
|
unidad = TextField(default='')
|
||||||
|
clave = TextField(default='')
|
||||||
|
clave_sat = TextField(default='')
|
||||||
|
categoria = TextField(default='')
|
||||||
|
aduana = TextField(default='')
|
||||||
|
pedimento = TextField(default='')
|
||||||
|
fecha_pedimento = DateField(null=True)
|
||||||
|
alumno = TextField(default='')
|
||||||
|
curp = TextField(default='')
|
||||||
|
nivel = TextField(default='')
|
||||||
|
autorizacion = TextField(default='')
|
||||||
|
cuenta_predial = TextField(default='')
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
order_by = ('factura',)
|
||||||
|
|
||||||
|
|
||||||
|
class FacturasImpuestos(BaseModel):
|
||||||
|
factura = ForeignKeyField(Facturas)
|
||||||
|
impuesto = ForeignKeyField(SATImpuestos)
|
||||||
|
base = DecimalField(default=0.0, decimal_places=6, auto_round=True)
|
||||||
|
importe = DecimalField(default=0.0, decimal_places=6, auto_round=True)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
order_by = ('factura',)
|
||||||
|
indexes = (
|
||||||
|
(('factura', 'impuesto'), True),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -250,8 +479,15 @@ def _init_values():
|
||||||
|
|
||||||
def _crear_tablas():
|
def _crear_tablas():
|
||||||
conectar()
|
conectar()
|
||||||
tablas = [Configuracion, Tags, Usuarios,
|
tablas = [Addendas, Categorias, Certificado, CondicionesPago, Configuracion,
|
||||||
Certificado, Emisor, Emisor.regimenes.get_through_model()]
|
Emisor, Facturas, FacturasDetalle, FacturasImpuestos, Folios, Productos,
|
||||||
|
SATAduanas, SATFormaPago, SATImpuestos, SATMonedas, SATRegimenes,
|
||||||
|
SATUnidades, SATUsoCfdi, Socios, Tags, Usuarios,
|
||||||
|
Emisor.regimenes.get_through_model(),
|
||||||
|
Socios.tags.get_through_model(),
|
||||||
|
Productos.impuestos.get_through_model(),
|
||||||
|
Productos.tags.get_through_model(),
|
||||||
|
]
|
||||||
database.create_tables(tablas, True)
|
database.create_tables(tablas, True)
|
||||||
log.info('Tablas creadas correctamente...')
|
log.info('Tablas creadas correctamente...')
|
||||||
return
|
return
|
||||||
|
|
Loading…
Reference in New Issue