Agregar tablas para facturar

This commit is contained in:
Mauricio Baeza 2017-09-28 22:37:40 -05:00
parent 85c0804ecd
commit e57001db56
1 changed files with 274 additions and 38 deletions

View File

@ -32,7 +32,7 @@ def conectar():
class Configuracion(BaseModel):
clave = TextField()
valor = TextField()
valor = TextField(default='')
class Meta:
order_by = ('clave',)
@ -86,8 +86,25 @@ class SATRegimenes(BaseModel):
class Emisor(BaseModel):
rfc = TextField(index=True)
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='')
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')
def __str__(self):
@ -114,51 +131,263 @@ class Certificado(BaseModel):
return self.serie
class Clients(BaseModel):
person_type = IntegerField(default=0)
rfc = FixedCharField(max_length=13, index=True)
name = CharField(max_length=1000, index=True)
street = FixedCharField(max_length=200, default='')
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)
class Folios(BaseModel):
serie = TextField()
inicio = IntegerField(default=1)
default = BooleanField(default=False)
usar_con = TextField(default='T')
def __str__(self):
t = '{} ({})'
return t.format(self.name, self.rfc)
class Meta:
order_by = ('-default', 'serie', 'inicio')
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:
order_by = ('name',)
indexes = (
(('rfc', 'name'), True),
(('key', 'name'), True),
)
class ClientsTags(BaseModel):
client = ForeignKeyField(Clients)
tag = ForeignKeyField(Tags)
class SATFormaPago(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 = (
(('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():
conectar()
tablas = [Configuracion, Tags, Usuarios,
Certificado, Emisor, Emisor.regimenes.get_through_model()]
tablas = [Addendas, Categorias, Certificado, CondicionesPago, Configuracion,
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)
log.info('Tablas creadas correctamente...')
return