From e57001db56aa6285c33fba384f38c369a3a073bb Mon Sep 17 00:00:00 2001 From: Mauricio Baeza Date: Thu, 28 Sep 2017 22:37:40 -0500 Subject: [PATCH] Agregar tablas para facturar --- source/app/models/main.py | 312 +++++++++++++++++++++++++++++++++----- 1 file changed, 274 insertions(+), 38 deletions(-) diff --git a/source/app/models/main.py b/source/app/models/main.py index 49ba136..3df5117 100644 --- a/source/app/models/main.py +++ b/source/app/models/main.py @@ -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