forked from elmau/empresa-libre
Importar Clientes
This commit is contained in:
parent
8ff857ec73
commit
d7b880db6c
|
@ -820,6 +820,7 @@ def _totales(doc, cfdi, version):
|
||||||
tn = {
|
tn = {
|
||||||
'001': 'ISR',
|
'001': 'ISR',
|
||||||
'002': 'IVA',
|
'002': 'IVA',
|
||||||
|
'003': 'IEPS',
|
||||||
}
|
}
|
||||||
traslados = []
|
traslados = []
|
||||||
retenciones = []
|
retenciones = []
|
||||||
|
@ -958,3 +959,92 @@ def send_mail(data):
|
||||||
server.close()
|
server.close()
|
||||||
return {'ok': is_connect, 'msg': msg}
|
return {'ok': is_connect, 'msg': msg}
|
||||||
|
|
||||||
|
|
||||||
|
def get_path_info(path):
|
||||||
|
path, filename = os.path.split(path)
|
||||||
|
name, extension = os.path.splitext(filename)
|
||||||
|
return (path, filename, name, extension)
|
||||||
|
|
||||||
|
|
||||||
|
class ImportFacturaLibre(object):
|
||||||
|
|
||||||
|
def __init__(self, path):
|
||||||
|
self._con = None
|
||||||
|
self._cursor = None
|
||||||
|
self._is_connect = self._connect(path)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def is_connect(self):
|
||||||
|
return self._is_connect
|
||||||
|
|
||||||
|
def _connect(self, path):
|
||||||
|
try:
|
||||||
|
self._con = sqlite3.connect(path)
|
||||||
|
self._con.row_factory = sqlite3.Row
|
||||||
|
self._cursor = self._con.cursor()
|
||||||
|
return True
|
||||||
|
except Exception as e:
|
||||||
|
log.error(e)
|
||||||
|
return False
|
||||||
|
|
||||||
|
def close(self):
|
||||||
|
try:
|
||||||
|
self._cursor.close()
|
||||||
|
self._con.close()
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
return
|
||||||
|
|
||||||
|
def import_data(self):
|
||||||
|
data = {}
|
||||||
|
tables = (
|
||||||
|
('receptores', 'Socios'),
|
||||||
|
)
|
||||||
|
for source, target in tables:
|
||||||
|
data[target] = self._get_table(source)
|
||||||
|
return data
|
||||||
|
|
||||||
|
def _get_table(self, table):
|
||||||
|
return getattr(self, '_{}'.format(table))()
|
||||||
|
|
||||||
|
def _receptores(self):
|
||||||
|
sql = "SELECT * FROM receptores"
|
||||||
|
self._cursor.execute(sql)
|
||||||
|
rows = self._cursor.fetchall()
|
||||||
|
#~ names = [d[0] for d in self._cursor.description]
|
||||||
|
fields = (
|
||||||
|
('id', 'id'),
|
||||||
|
('rfc', 'rfc'),
|
||||||
|
('nombre', 'nombre'),
|
||||||
|
('calle', 'calle'),
|
||||||
|
('noExterior', 'no_exterior'),
|
||||||
|
('noInterior', 'no_interior'),
|
||||||
|
('colonia', 'colonia'),
|
||||||
|
('municipio', 'municipio'),
|
||||||
|
('estado', 'estado'),
|
||||||
|
('pais', 'pais'),
|
||||||
|
('codigoPostal', 'codigo_postal'),
|
||||||
|
('extranjero', 'es_extranjero'),
|
||||||
|
('activo', 'es_activo'),
|
||||||
|
('fechaalta', 'fecha_alta'),
|
||||||
|
('notas', 'notas'),
|
||||||
|
('cuentaCliente', 'cuenta_cliente'),
|
||||||
|
('cuentaProveedor', 'cuenta_proveedor'),
|
||||||
|
('saldoCliente', 'saldo_cliente'),
|
||||||
|
('saldoProveedor', 'saldo_proveedor'),
|
||||||
|
('esCliente', 'es_cliente'),
|
||||||
|
('esProveedor', 'es_proveedor'),
|
||||||
|
)
|
||||||
|
data = []
|
||||||
|
|
||||||
|
for row in rows:
|
||||||
|
new = {t: row[s] for s, t in fields}
|
||||||
|
new['slug'] = to_slug(new['nombre'])
|
||||||
|
if new['es_extranjero']:
|
||||||
|
new['tipo_persona'] = 4
|
||||||
|
elif new['rfc'] == 'XAXX010101000':
|
||||||
|
new['tipo_persona'] = 3
|
||||||
|
elif len(new['rfc']) == 12:
|
||||||
|
new['tipo_persona'] = 2
|
||||||
|
data.append(new)
|
||||||
|
return data
|
||||||
|
|
|
@ -631,6 +631,8 @@ class Socios(BaseModel):
|
||||||
es_proveedor = BooleanField(default=False)
|
es_proveedor = BooleanField(default=False)
|
||||||
cuenta_cliente = TextField(default='')
|
cuenta_cliente = TextField(default='')
|
||||||
cuenta_proveedor = TextField(default='')
|
cuenta_proveedor = TextField(default='')
|
||||||
|
saldo_cliente = DecimalField(default=0.0, decimal_places=6, auto_round=True)
|
||||||
|
saldo_proveedor = DecimalField(default=0.0, decimal_places=6, auto_round=True)
|
||||||
web = TextField(default='')
|
web = TextField(default='')
|
||||||
correo_facturas = TextField(default='')
|
correo_facturas = TextField(default='')
|
||||||
forma_pago = ForeignKeyField(SATFormaPago, null=True)
|
forma_pago = ForeignKeyField(SATFormaPago, null=True)
|
||||||
|
@ -1742,6 +1744,40 @@ def _importar_valores(archivo):
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
|
def _importar_factura_libre(archivo):
|
||||||
|
rfc = input('Introduce el RFC: ').strip().upper()
|
||||||
|
if not rfc:
|
||||||
|
msg = 'El RFC es requerido'
|
||||||
|
log.error(msg)
|
||||||
|
return
|
||||||
|
|
||||||
|
args = util.get_con(rfc)
|
||||||
|
if not args:
|
||||||
|
return
|
||||||
|
|
||||||
|
conectar(args)
|
||||||
|
|
||||||
|
log.info('Importando datos...')
|
||||||
|
app = util.ImportFacturaLibre(archivo)
|
||||||
|
if not app.is_connect:
|
||||||
|
log.error('\tNo se pudo conectar a la base de datos')
|
||||||
|
return
|
||||||
|
|
||||||
|
data = app.import_data()
|
||||||
|
for table, rows in data.items():
|
||||||
|
log.info('\tImportando: {}'.format(table))
|
||||||
|
model = globals()[table]
|
||||||
|
for row in rows:
|
||||||
|
try:
|
||||||
|
model.create(**row)
|
||||||
|
except IntegrityError:
|
||||||
|
msg = '\t{}'.format(str(row))
|
||||||
|
log.error(msg)
|
||||||
|
|
||||||
|
log.info('Importación terminada...')
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
CONTEXT_SETTINGS = dict(help_option_names=['-h', '--help'])
|
CONTEXT_SETTINGS = dict(help_option_names=['-h', '--help'])
|
||||||
help_create_tables = 'Crea las tablas en la base de datos'
|
help_create_tables = 'Crea las tablas en la base de datos'
|
||||||
help_migrate_db = 'Migra las tablas en la base de datos'
|
help_migrate_db = 'Migra las tablas en la base de datos'
|
||||||
|
@ -1763,10 +1799,11 @@ help_lr = 'Listar RFCs'
|
||||||
@click.option('-rfc', '--rfc', help=help_rfc, is_flag=True, default=False)
|
@click.option('-rfc', '--rfc', help=help_rfc, is_flag=True, default=False)
|
||||||
@click.option('-br', '--borrar-rfc', help=help_br, is_flag=True, default=False)
|
@click.option('-br', '--borrar-rfc', help=help_br, is_flag=True, default=False)
|
||||||
@click.option('-lr', '--listar-rfc', help=help_lr, is_flag=True, default=False)
|
@click.option('-lr', '--listar-rfc', help=help_lr, is_flag=True, default=False)
|
||||||
@click.option('-i', '--importar_valores', is_flag=True, default=False)
|
@click.option('-i', '--importar-valores', is_flag=True, default=False)
|
||||||
@click.option('-a', '--archivo')
|
@click.option('-a', '--archivo')
|
||||||
|
@click.option('-fl', '--factura-libre', is_flag=True, default=False)
|
||||||
def main(iniciar_bd, migrar_bd, nuevo_superusuario, cambiar_contraseña, rfc,
|
def main(iniciar_bd, migrar_bd, nuevo_superusuario, cambiar_contraseña, rfc,
|
||||||
borrar_rfc, listar_rfc, importar_valores, archivo):
|
borrar_rfc, listar_rfc, importar_valores, archivo, factura_libre):
|
||||||
opt = locals()
|
opt = locals()
|
||||||
|
|
||||||
if opt['iniciar_bd']:
|
if opt['iniciar_bd']:
|
||||||
|
@ -1808,6 +1845,21 @@ def main(iniciar_bd, migrar_bd, nuevo_superusuario, cambiar_contraseña, rfc,
|
||||||
_importar_valores(opt['archivo'])
|
_importar_valores(opt['archivo'])
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
|
||||||
|
if opt['factura_libre']:
|
||||||
|
if not opt['archivo']:
|
||||||
|
msg = 'Falta la ruta de la base de datos'
|
||||||
|
raise click.ClickException(msg)
|
||||||
|
if not util.is_file(opt['archivo']):
|
||||||
|
msg = 'No es un archivo'
|
||||||
|
raise click.ClickException(msg)
|
||||||
|
_, _, _, ext = util.get_path_info(opt['archivo'])
|
||||||
|
if ext != '.sqlite':
|
||||||
|
msg = 'No es una base de datos'
|
||||||
|
raise click.ClickException(msg)
|
||||||
|
|
||||||
|
_importar_factura_libre(opt['archivo'])
|
||||||
|
sys.exit(0)
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue