# -*- coding: utf-8 -*-
from django.db import models 
from datetime import datetime
from time import time

#generador de nombres para archivos media
def get_upload_file_name(instance,filename):
    instante=str(datetime.now()).replace(' ','').replace('-','_').replace(':','_').replace('.','_')
    return "%s_%s"%((instante+str(time())).replace('.','_'),filename)


class Cliente(models.Model):
    """docsrting for Cliente"""
    id = models.AutoField("Id", primary_key=True)
    dni = models.CharField("DNI:", max_length=11,blank= True, null=True)#dni o ruc
    nombre = models.CharField("Nombres:", max_length=100,blank= True, null=True)#nombre o razon social
    Apellido_paterno = models.CharField("   Apellido Paterno:", max_length=200,blank= True, null=True)
    Apellido_materno = models.CharField("Apellido Materno:", max_length=200,blank= True, null=True)
    telefono = models.CharField("Teléfono:", max_length=15,blank= True, null=True)
    direccion = models.CharField("Dirección:", max_length=100,blank= True, null=True)
    fecha_nacimiento = models.DateField("Cumpleaños:",blank= True, null=True)
    email = models.CharField("e-mail:",max_length=250,null=True)
    drem = models.CharField("DREM:",max_length=100,blank=True,null=True)
    estado = models.BooleanField(verbose_name="Estado:",default=True)
    tipo_persona=models.CharField("Tipo Persona:",max_length=10,blank=True,null=True)
    tablaRelacional=models.CharField("Tabla Relacional:",max_length=30,blank=True,null=True)
    transferencias=models.CharField("Transferencia:",max_length=2,blank=True,null=True)#si o no
    cuentas=models.CharField("Cuentas:",max_length=2,blank=True,null=True)#si o no
    dolar=models.CharField("Dolar:",max_length=2,blank=True,null=True)#si o no
    otros=models.CharField("Otros:",max_length=2,blank=True,null=True)#si o no # otras operaciones
    tablaRelacional=models.CharField("Tabla Relacional:",max_length=30,blank=True,null=True)
    verificado=models.BooleanField(verbose_name="Verificado:",default=False)
    idCaja = models.IntegerField("id Caja:",default=0)
    operaciones_caja = models.CharField("operaciones caja:",max_length=100,blank=True,null=True)#ids de cajas donde se realiza las operaciones
    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Clientes"
        verbose_name = "Cliente"

    def __str__(self):
        return str(self.id)

class Personal(models.Model):
    id= models.AutoField("Id:",primary_key=True)
    dni = models.CharField("DNI:", max_length=8,blank= True, null=True)
    nombre = models.CharField("Nombres:", max_length=100,blank= True, null=True)
    Apellido_paterno = models.CharField("Apellido Paterno:", max_length=200,blank= True, null=True)
    Apellido_materno = models.CharField("Apellido Materno:", max_length=200,blank= True, null=True)
    telefono = models.CharField("Teléfono:", max_length=15,blank= True, null=True)
    direccion = models.CharField("Dirección:", max_length=100,blank= True, null=True)
    fecha_nacimiento = models.DateField("Cumpleaños:",null=True)
    email = models.CharField("e-mail:",max_length=250,null=True)
    cargo = models.CharField("Cargo:",max_length=20,null=True)
    sueldo =  models.DecimalField("sueldo:",max_digits=15,decimal_places=2,default=0)
    fecha_contratacion = models.DateField("Contratacion:",null=True)
    observacion = models.CharField("Observacion:",max_length=100,null=True)
    estado = models.BooleanField(verbose_name="Estado:",default=True)
    usuario = models.CharField("Usuario:",max_length=50,null=True)
    password=models.CharField("Password:",max_length=50,null=True)

    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Personales"
        verbose_name = "Personal"

    def __str__(self):
        return str(self.id)


class SesionesAbiertas(models.Model):
    id= models.AutoField("Id:",primary_key=True)
    id_usuario = models.ForeignKey(Personal,verbose_name='Id:', on_delete=models.CASCADE)
    dispositivo = models.CharField("Dispositivo:", max_length=150,blank= True, null=True)
    navegador = models.CharField("Navegador:", max_length=150,blank= True, null=True)
    so = models.CharField("Sistema Operativo:", max_length=100,blank= True, null=True)
    ipLocal = models.CharField("IP:", max_length=20,blank= True, null=True)
    locacion = models.CharField("Locación:", max_length=250,blank= True, null=True)
    fecha_sesion = models.DateTimeField("Fecha Sesión:",auto_now=True) 

    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Sesiones Abiertas"
        verbose_name = "Sesión Abierta"

    def __str__(self):
        return self.id


class Foto(models.Model):
    """fotos del usuario"""
    id= models.AutoField("Id:",primary_key=True)
    id_usuario = models.ForeignKey(Personal,verbose_name='Id:', on_delete=models.CASCADE)
    fecha = models.DateTimeField("Fecha:",auto_now=True)
    estado = models.BooleanField(verbose_name="Estado:",default=False)
    descripcion = models.CharField("Descripcion:",max_length=50,null=True)
    titulo=models.CharField("Titulo:",max_length=50,null=True)
    foto = models.FileField(upload_to=get_upload_file_name)

    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Fotos"
        verbose_name = "Foto"

    def __str__(self):
        return self.id


class Oficina(models.Model):
    """docsrting for Oficina"""
    id = models.AutoField("Id:", primary_key=True)
    nombre_oficina = models.CharField("Nombre Oficina:",max_length=250)
    ciudad = models.CharField("Ciudad:", max_length=20)
    provincia = models.CharField("Provincia:", max_length=25,null=True)
    distrito = models.CharField("Distrito:", max_length=25,null=True)
    direccion = models.CharField("Dirección:", max_length=250,null=True)
    descripcion = models.CharField("Descripción:", max_length=250, null=True)
    observaciones= models.CharField("Observacion:", max_length=200,null=True)
    estado_oficina = models.BooleanField("Estado", default=True)
    categoria_oficina = models.CharField("Categoria", max_length=20, null=True)
    id_usuario = models.ForeignKey(Personal,verbose_name='Id:', on_delete=models.CASCADE)#usuario administrador
    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Oficinas"
        verbose_name = "Oficina"

    def __str__(self):
        return str(self.nombre_oficina)
 


class Cajas(models.Model):#caja transferencia
    """docsrting for Cajas"""
    id = models.AutoField("Id:", primary_key=True)
    nombre = models.CharField("Nombre Caja", max_length=100)
    estado = models.BooleanField(verbose_name="Estado Caja:",default=True)
    id_oficina = models.ForeignKey(Oficina, verbose_name='Id:', on_delete=models.CASCADE)
    id_usuario = models.ForeignKey(Personal,verbose_name='Id:', on_delete=models.CASCADE)
    horaIngreso = models.CharField("hora Ingreso", max_length=20, null=True)
    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Cajas"
        verbose_name = "Caja"

    def __str__(self):
        return str(self.nombre)

class NroReciboCaja(models.Model):#nro recibo transferencia
    """docsrting for Numero Recibo Caja"""
    id = models.AutoField("Id", primary_key=True)
    id_oficina = models.ForeignKey(Oficina,verbose_name='Id Oficina:', on_delete=models.CASCADE)
    id_caja = models.ForeignKey(Cajas,verbose_name='Id Caja:', on_delete=models.CASCADE)
    nroRE = models.IntegerField("Nro Recibo Egreso:")
    nroRI = models.IntegerField("Nro Recibo Ingreso:")
    nroST = models.IntegerField("Nro Recibo Transferencia:")
    nroPT = models.IntegerField("Nro Recibo Pago Transferencia:")
    nroSI = models.IntegerField("Nro Recibo Intercambio:")
    nroPI = models.IntegerField("Nro Recibo Pago Intercambio:")

    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Números de Recibos Cajas"
        verbose_name = "Número de Recibo Caja"

    def __str__(self):
        return str(self.id) 

#******************** CONFIGURACION DEL SISTEMA ***********************

class TConfiguracionSistema(models.Model):
    """docsrting configuraciones de sistema """
    id = models.AutoField("Id", primary_key=True)
    id_oficina = models.ForeignKey(Oficina,verbose_name='Id Oficina:', on_delete=models.CASCADE)
    id_caja = models.ForeignKey(Cajas,verbose_name='Id Caja:', on_delete=models.CASCADE)
    tipoSistema = models.CharField("Tipo:", max_length=20,blank= True, null=True)#(trasnferencia,hibrido)
    cajaDolar = models.CharField("CajaDolar:", max_length=10,blank= True, null=True)#(si,no)
    nroDecimales = models.IntegerField("Nro Decimales:",blank= True, null=True)
    conf1=models.CharField("conf1:",max_length=60)
    conf2=models.CharField("conf2:",max_length=15)#'externa'
    conf3=models.CharField("conf3:",max_length=3,blank= True, null=True)#configuracion bobeda y bancos('si','no','')
    compra_tactil=models.CharField("compra tactil:",max_length=3,blank= True, null=True)#configuracion compra en monitores tactil('si','no','')
    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Configuraciones de sistema"
        verbose_name = "Configuracion de sistema"

    def __str__(self):
        return str(self.id) 
#------ configuracion bases externas --------
class Base_Ext(models.Model):
    """bases externas"""
    id = models.AutoField("Id:", primary_key=True)
    fecha = models.DateTimeField("Creacion:",auto_now=True)
    id_confSis = models.ForeignKey(TConfiguracionSistema,verbose_name='Id:', on_delete=models.CASCADE)
    nombre_base = models.CharField("Nombre Base:",max_length=250)
    ciudad = models.CharField("Ciudad:", max_length=20,null=True)
    direccion = models.CharField("Dirección:", max_length=250,null=True)
    descripcion = models.CharField("Descripción:", max_length=250, null=True)
    observaciones= models.CharField("Observacion:", max_length=200,null=True)
    estado_base = models.BooleanField("Estado", default=True)
    aux1=models.CharField("axu1:",max_length=60,null=True)
    aux2=models.CharField("aux2:",max_length=15,null=True)
    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Bases"
        verbose_name = "Base"

    def __str__(self):
        return self.id

#*******************************************************************
class Gerente(models.Model):
    id= models.AutoField("Id:",primary_key=True)
    dni = models.CharField("DNI:", max_length=8,blank= True, null=True)
    nombre = models.CharField("Nombres:", max_length=100,blank= True, null=True)
    Apellido_paterno = models.CharField("Apellido Paterno:", max_length=200,blank= True, null=True)
    Apellido_materno = models.CharField("Apellido Materno:", max_length=200,blank= True, null=True)
    telefono = models.CharField("Teléfono:", max_length=15,blank= True, null=True)
    direccion = models.CharField("Dirección:", max_length=100,blank= True, null=True)
    fecha_nacimiento = models.DateField("Cumpleaños:",null=True)
    email = models.CharField("e-mail:",max_length=250,null=True)
    fecha_creacion = models.DateTimeField("Creacion:",auto_now=True)
    observacion = models.CharField("Observacion:",max_length=100,null=True)
    estado = models.CharField("Estado:",max_length=12)
    usuario = models.CharField("Usuario:",max_length=50)
    password=models.CharField("Password:",max_length=50 )
    id_usuario = models.ForeignKey(Personal,verbose_name='Id:', on_delete=models.CASCADE)

    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Gerentes"
        verbose_name = "Gerente"

    def __str__(self):
        return self.id


class Gerente_conf(models.Model):
    id= models.AutoField("Id:",primary_key=True)
    id_gerente = models.ForeignKey(Gerente,verbose_name='Id:', on_delete=models.CASCADE)
    fecha = models.DateTimeField("Creacion:",auto_now=True)
    subGerente= models.CharField("SubGerente", max_length=10,null=True, blank=True)
    observacion = models.CharField("Observacion:",max_length=100,null=True)
    estado = models.CharField("Estado:",max_length=12)
    telefono = models.CharField("Teléfono:", max_length=15,blank= True, null=True)
    sueldo =  models.DecimalField("sueldo:",max_digits=15,decimal_places=2,default=0)
    aux1= models.CharField("aux1", max_length=25,null=True, blank=True)
    aux2= models.CharField("aux2", max_length=25,null=True, blank=True)
    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Gerentes configuraciones"
        verbose_name = "Gerente configuracion"

    def __str__(self):
        return self.id


class ConfiguracionExtra_caja(models.Model):
    """configuraciones"""
    id = models.AutoField("Id:", primary_key=True)
    id_oficina = models.ForeignKey(Oficina, verbose_name='Id:', on_delete=models.CASCADE)
    id_caja = models.ForeignKey(Cajas, verbose_name='Id:', on_delete=models.CASCADE)
    Prj_comicion_queda =  models.DecimalField("porcentaje:",max_digits=15,decimal_places=2,null=True)
    cierreObligatorio = models.CharField("Cierre Obligatorio", max_length=25,null=True, blank=True)
    monto_tope =  models.DecimalField("Monto Tope:",max_digits=15,decimal_places=2)
    comision_minima =  models.DecimalField("Monto Pagado:",max_digits=15,decimal_places=2,null=True)
    otros_conceptos_minimo =  models.DecimalField("Monto Pagado:",max_digits=15,decimal_places=2,null=True)
    extorno_total= models.CharField("Extorno Total", max_length=25,null=True, blank=True)
    ver_saldo= models.CharField("Ver Saldo", max_length=25,null=True, blank=True)
    aux1= models.CharField("ver saldo de oficinas", max_length=25,null=True, blank=True)#ver saldo de oficinas
    aux2= models.CharField("regiro en pt", max_length=25,null=True, blank=True)#sregiro en pt ('si','no')
    aux3= models.CharField("egresar", max_length=25,null=True, blank=True)#egresar('si','no')
    aux4= models.CharField("autorizacion sobregiro", max_length=25,null=True, blank=True)#autorizacion sobregiro
    aux5= models.CharField("globales", max_length=2,null=True, blank=True)#globales
    aux6= models.CharField("autorizacion versaldos alternas", max_length=2,null=True, blank=True)#autorizacion versaldos alternas ('si','no')
    aux7= models.CharField("egreso subgerencia", max_length=2,null=True, blank=True)#egreso subgerencia('si','no')
    aux8= models.CharField("pt sin validar dni", max_length=2,null=True, blank=True)#pt sin validar dni('si','no')
    cambioO= models.DecimalField(max_digits=15,decimal_places=2,null=False,default=1)
    aux9= models.CharField("filtarar todo desde reinicio de recibos", max_length=2,null=True, blank=True)#filtarar todo desde reinicio de recibos('si','no')
    aux10= models.CharField("egreso en pt", max_length=2,null=True, blank=True)#egreso en pt('si','no')
    aux11= models.CharField("ver intercambios recibidos", max_length=2,null=True, blank=True)#ver intercambios recibidos
    monto_tope_st=models.DecimalField(max_digits=15,decimal_places=2,default=0)#montotope st
    egreso_hab= models.CharField("Egreso Habilitaciones", max_length=2,null=True, blank=True)#egreso habilitaciones
    procesa_st= models.CharField("Procesa", max_length=2,null=True, blank=True)#procesa transferencias bancos
    procesa_agente= models.CharField("Procesa agente", max_length=2,null=True, blank=True)#procesa transferencias bancos
    st_banco= models.CharField("ST Banco", max_length=2,null=True, blank=True)#transferencias bancos
    retiro_st_banco= models.CharField("ST Retiro Banco", max_length=2,null=True, blank=True)#retiro st bancos
    st_expiracion = models.IntegerField("Dias de expiracion ST",default=5,null=False) #nro de dias para bloqueo de sts para extorno y pagos
    
    class Meta:
        ordering = ["id"]
        verbose_name_plural = "config Caja"
        verbose_name = "config Caja"

    def __str__(self):
        return self.id_oficina.nombre_oficina + " - "+ self.id_caja.nombre

#Configuracion de comisiones
class Configuracion_comision(models.Model):
    id = models.AutoField("Id:", primary_key=True)
    id_config=models.ForeignKey(ConfiguracionExtra_caja, verbose_name='Id:', on_delete=models.CASCADE)
    id_oficina=models.ForeignKey(Oficina, verbose_name='Id:', on_delete=models.CASCADE)
    fecha = models.DateTimeField("Fecha:",auto_now=True)
    montomin= models.DecimalField(max_digits=15,decimal_places=2,null=False)
    montomax=models.DecimalField(max_digits=15,decimal_places=2,null=False)
    comision=models.DecimalField(max_digits=15,decimal_places=6,null=False)
    obs= models.CharField("Observaciones",max_length=100,null=True,blank=True)
    auz1= models.CharField("Aux1",max_length=20,null=True,blank=True)
    tipo= models.CharField("tipo Config",max_length=20,null=True,blank=True)#('subbase','')
    base_ori= models.CharField("Base Origen",max_length=10,null=True,blank=True)#id subbase origen
    base_des= models.CharField("Base Destino",max_length=10,null=True,blank=True)#id subbase destino
    id_caja=models.IntegerField(default=0,null=False)#caja destino
    banco_nacion=models.DecimalField(max_digits=15,decimal_places=6,default=0,null=False)#banco de la nacion giros
    otros_bancos=models.DecimalField(max_digits=15,decimal_places=6,default=0,null=False)
    continental=models.DecimalField(max_digits=15,decimal_places=6,default=0,null=False)#continental giros
    bcp=models.DecimalField(max_digits=15,decimal_places=6,default=0,null=False)#giros
    banco_nacion_de=models.DecimalField(max_digits=15,decimal_places=6,default=0,null=False)#banco de la nacion deposito -add
    continental_de=models.DecimalField(max_digits=15,decimal_places=6,default=0,null=False)#depositos cta
    bcp_de=models.DecimalField(max_digits=15,decimal_places=6,default=0,null=False)#depositos cta
    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Configuraciones Comisiones"
        verbose_name = "Configuracion Comisiones"

    def __str__(self):
        return self.id

#configuracion comisiones intercambio
class Configuracion_comision_intercambio(models.Model):
    id = models.AutoField("Id:", primary_key=True)
    id_config=models.ForeignKey(ConfiguracionExtra_caja, verbose_name='Id:', on_delete=models.CASCADE)
    id_oficina=models.ForeignKey(Oficina, verbose_name='Id:', on_delete=models.CASCADE)
    fecha = models.DateTimeField("Fecha:",auto_now=True)
    montomin= models.DecimalField(max_digits=15,decimal_places=2,null=False)
    montomax=models.DecimalField(max_digits=15,decimal_places=2,null=False)
    comision=models.DecimalField(max_digits=15,decimal_places=6,null=False)
    obs= models.CharField("Observaciones",max_length=100,null=True,blank=True)
    auz1= models.CharField("Aux1",max_length=20,null=True,blank=True)
    tipo= models.CharField("tipo Config",max_length=20,null=True,blank=True)#('subbase','')
    base_ori= models.CharField("Base Origen",max_length=10,null=True,blank=True)#id subbase origen
    base_des= models.CharField("Base Destino",max_length=10,null=True,blank=True)#id subbase destino
    id_caja=models.IntegerField(default=0,null=False)#caja destino
    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Configuraciones Comisiones Intercambio"
        verbose_name = "Configuracion Comisiones Intercambio"

    def __str__(self):
        return self.id

#Configuracion de monto de comiciones para bancos, comisiones reales
#estas comisiones se egresaran al momento de pagar las STs
class Configuracion_monto_bancos(models.Model):
    id = models.AutoField("Id:", primary_key=True)
    fecha = models.DateTimeField("Fecha:",auto_now=True)
    montomin= models.DecimalField(max_digits=15,decimal_places=2,null=False)
    montomax=models.DecimalField(max_digits=15,decimal_places=2,null=False)
    banco_nacion=models.DecimalField(max_digits=15,decimal_places=6,default=0,null=False)
    otros_bancos=models.DecimalField(max_digits=15,decimal_places=6,default=0,null=False)
    continental=models.DecimalField(max_digits=15,decimal_places=6,default=0,null=False)#add
    bcp=models.DecimalField(max_digits=15,decimal_places=6,default=0,null=False)#add
    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Configuraciones Montos Banco"
        verbose_name = "Configuracion Monto Banco"

    def __str__(self):
        return self.id

"""
class Solicitud_aut_sobregiros(models.Model):
    id = models.AutoField("ID", primary_key=True)
    fecha = models.DateTimeField("Fecha:",auto_now=True)
    id_cta = models.CharField("Id Cta",max_length=20,null=True)
    tipoCta=models.CharField("Tipo",max_length=20,null=True)
    codigo_aut=models.CharField("Codigo:", max_length=10, null=True)
    estado=models.CharField("Estado",max_length=20)#pendiente,autorizado,utilizado
    id_user_solicitante=models.ForeignKey(Personal,verbose_name="ID Personal")
    id_caja_solicitante= models.ForeignKey(Cajas, verbose_name='Id Caja:')
    usuario_autorizador=models.CharField("Autorizacor",max_length=20,null=True)#tabla relacional del autorizador
    id_usuario_aut=models.IntegerField("Id User Aut:",null=True)
    fecha_aut = models.DateTimeField("Fecha Aut:",null=True)
    fecha_desbloqueo = models.DateTimeField("Fecha Desbloqueo:",null=True)
    fecha_creacion_cta = models.DateTimeField("Fecha Creacion Cta:",null=True)
    id_oficina_apertura= models.CharField("Id Oficina Apertura:", max_length=10, null=True)
    obs = models.CharField("Obs:", max_length=100, null=True)
    aux1=models.DecimalField(max_digits=15,decimal_places=2,null=False)
    aux2=models.CharField("aux2:",max_length=20)
    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Solicitudes de Autrizacion Sobregiros Ctas"
        verbose_name = "Solicitud de Autorizacion Sobregiro Cta"

    def __str__(self):
        return str(self.id)
"""


class Solicitud_aut_comision(models.Model):
    """ solicitud  de Autorizacion de comision de transferncia"""
    id = models.AutoField("ID", primary_key=True)
    fecha = models.DateTimeField("Fecha:",auto_now=True)
    id_st = models.CharField("Id ST",max_length=20,null=True)
    codigo_aut=models.CharField("Codigo:", max_length=10, null=True)
    estado=models.CharField("Estado",max_length=20)#pendiente,autorizado,utilizado
    id_user_solicitante=models.ForeignKey(Personal,verbose_name="ID Personal", on_delete=models.CASCADE)
    id_caja_solicitante= models.ForeignKey(Cajas, verbose_name='Id Caja:', on_delete=models.CASCADE)
    usuario_autorizador=models.CharField("Autorizacor",max_length=20,null=True)#tabla relacional del autorizador
    id_usuario_aut=models.IntegerField("Id User Aut:",null=True)
    fecha_aut = models.DateTimeField("Fecha Aut:",null=True)
    fecha_desbloqueo = models.DateTimeField("Fecha Desbloqueo:",null=True)
    fecha_creacion_st = models.DateTimeField("Fecha Creacion ST:",null=True)
    id_oficina_des= models.CharField("Id Oficina Destino:", max_length=10, null=True)
    obs = models.CharField("Obs:", max_length=100, null=True)
    aux1=models.CharField("aux1:",max_length=20)
    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Solicitudes de Autrizacion Comi Trans"
        verbose_name = "Solicitud de Aut Comi Trans"

    def __str__(self):
        return str(self.id)

class Notificacion(models.Model):
    """docsrting for Cajas"""
    id = models.AutoField("Id:", primary_key=True)
    descripcion = models.CharField("Nombre Caja", max_length=100)
    fecha = models.DateTimeField("Fecha actualizacion:",auto_now=True)
    usuario= models.CharField("Usuario", max_length=25)
    permisos= models.CharField("Permisos", max_length=20)
    estado=models.CharField("estado",max_length=20,null=True,blank=True)
    archivo = models.FileField(upload_to = get_upload_file_name)

    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Notificaciones"
        verbose_name = "Notificacion"

    def __str__(self):
        return self.id

#******************* tablas de mensajes de texto ************************

class Mensajeria_sms(models.Model):
    id = models.AutoField("ID:", primary_key=True)
    fecha = models.DateTimeField("Fecha:",auto_now=True)
    id_transaccion = models.CharField("id Transaccion:", max_length=15, null=True)
    nro_envio = models.IntegerField("Nro Envio:", null=True)
    tipo = models.CharField("tipo:", max_length=15, null=True)
    texto = models.CharField("texto:", max_length=300, null=True)
    tabla = models.CharField("tabla:", max_length=50, null=True)
    celular=models.CharField("cel",max_length=15,null=True,blank=True)
    estado=models.CharField("estado",max_length=20,null=True,blank=True)
    fecha_op = models.DateField("Fecha Operacion:",null=True)
    aux1=models.CharField("aux1:",max_length=20,null=True,blank=True)#algunas observaciones
    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Mensajes SMS"
        verbose_name = "Mensaje SMS"

    def __str__(self):
        return str(self.id)
#------------------------------ sms global ------------------------------------
class Mensajeria_sms_global(models.Model):
    id = models.AutoField("ID:", primary_key=True)
    fecha = models.DateTimeField("Fecha:",auto_now=True)
    id_transaccion = models.CharField("id Transaccion:", max_length=15, null=True)
    nro_envio = models.IntegerField("Nro Envio:", null=True)
    tipo = models.CharField("tipo:", max_length=15, null=True)
    texto = models.CharField("texto:", max_length=300, null=True)
    tabla = models.CharField("tabla:", max_length=50, null=True)
    celular=models.CharField("cel",max_length=15,null=True,blank=True)
    estado=models.CharField("estado",max_length=20,null=True,blank=True)
    fecha_op = models.DateField("Fecha Operacion:",null=True)
    aux1=models.CharField("aux1:",max_length=20,null=True,blank=True)
    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Mensajes SMS Global"
        verbose_name = "Mensaje SMS Global"

    def __str__(self):
        return str(self.id)
#-----------------------------------------------------------------------------

class conf_permisos_Cajas(models.Model):
    """configuraciones y permisos de caja"""
    id = models.AutoField("Id:", primary_key=True)
    id_caja = models.ForeignKey(Cajas,verbose_name='Id:', on_delete=models.CASCADE)
    Trans_global = models.CharField("Transferencia Global", max_length=2)#permiso de la caja (si,'',no)
    Nrodias = models.IntegerField("Nro dias:",null=True)#numero de dias que expira para el retiro de transferencias
    aux1= models.CharField("llave de transaccion", max_length=25,null=True, blank=True)#llave de transaccion (0,1)
    aux2= models.CharField("autorizacion retiro trans", max_length=25,null=True, blank=True)#autorizacion retiro trans (si,no)
    aux3= models.CharField("autorizar permiso para autorizar retiro", max_length=25,null=True, blank=True)#autorizar permiso para autorizar retiro trans (si,no)
    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Configuraciones permisos cajas"
        verbose_name = "Configuracion permiso caja"

    def __str__(self):
        return self.id

class conf_oficinas_para_TransGlobal(models.Model):
    """oficinas para transferencias globales"""
    id = models.AutoField("Id:", primary_key=True)
    id_conf = models.ForeignKey(conf_permisos_Cajas,verbose_name='Id:', on_delete=models.CASCADE)
    id_oficina = models.ForeignKey(Oficina, verbose_name='Id:', on_delete=models.CASCADE)
    aux1= models.CharField("aux1", max_length=25,null=True, blank=True)#'si','no'
    aux2= models.CharField("aux2", max_length=25,null=True, blank=True)
    class Meta:
        ordering = ["id"]
        verbose_name_plural = "oficinas Transferecnias Globales"
        verbose_name = "Oficina Transferencia Global"

    def __str__(self):
        return self.id
        
#liquidacion
class conf_liquid_Cajas(models.Model):
    """configuraciones de arqueo de caja"""
    id = models.AutoField("Id:", primary_key=True)
    id_caja = models.ForeignKey(Cajas,verbose_name='Id:', on_delete=models.CASCADE)
    aux1= models.CharField("aux1", max_length=25,null=True, blank=True)
    aux2= models.CharField("aux2", max_length=25,null=True, blank=True)
    
    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Configuraciones de arqueo de cajas"
        verbose_name = "Configuracion arqueo caja"

    def __str__(self):
        return self.id

class conf_prj_arqueo(models.Model):
    """configuraciones de arqueo de caja"""
    id = models.AutoField("Id:", primary_key=True)
    id_conf = models.ForeignKey(conf_liquid_Cajas,verbose_name='Id:', on_delete=models.CASCADE)
    id_caja = models.ForeignKey(Cajas,verbose_name='Id:', on_delete=models.CASCADE)
    tipo_caja = models.CharField("Tipo de caja", max_length=2)#(p,c)
    prj_caja =  models.DecimalField("porcentaje caja:",max_digits=15,decimal_places=2,default=0)#porcentaje comicion para caja (oficina des compartida) (en caso de oficina propia*)
    prj_oficina_central =  models.DecimalField("porcentaje central:",max_digits=15,decimal_places=2,default=0)#porcentaje comicion para oficina central (oficina des compartida)
    prj_otra_oficina =  models.DecimalField("porcentaje otra oficina:",max_digits=15,decimal_places=2,default=0)#porcentaje comicion para la otra oficina (oficina des compartida)(en caso de oficina propia*)
    aux1= models.CharField("aux1", max_length=25,null=True, blank=True)
    aux2= models.CharField("aux2", max_length=25,null=True, blank=True)
    
    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Configuraciones de arqueo de cajas"
        verbose_name = "Configuracion arqueo caja"

    def __str__(self):
        return self.id

#*******************  verificacion estado de caja ************
class EstadoValido_Caja(models.Model):
    id=models.AutoField("ID:", primary_key=True)
    fecha=models.DateTimeField("Fecha:",auto_now=True)
    id_caja=models.ForeignKey(Cajas,verbose_name='Id:', on_delete=models.CASCADE)
    debe_soles=models.DecimalField(max_digits=15,decimal_places=3)#ingreso
    debe_dolares=models.DecimalField(max_digits=15,decimal_places=3)
    haber_soles=models.DecimalField(max_digits=15,decimal_places=3)#egreso
    haber_dolares=models.DecimalField(max_digits=15,decimal_places=3)
    saldoI_soles=models.DecimalField(max_digits=15,decimal_places=3)#saldo inicial
    saldoI_dolares=models.DecimalField(max_digits=15,decimal_places=3)
    saldo_soles=models.DecimalField(max_digits=15,decimal_places=3)#saldo actual
    saldo_dolares=models.DecimalField(max_digits=15,decimal_places=3)
    saldoCierre_soles=models.DecimalField(max_digits=15,decimal_places=3)#ultimo cierre (dia anterior ala validacion)
    saldoCierre_dolares=models.DecimalField(max_digits=15,decimal_places=3)#ultimo cierre (dia anterior ala validacion)
    estado=models.CharField("estado:",max_length=20,null=True,blank=True)
    fechaDesde = models.DateField("Fecha desde:",null=True)
    fechaHasta = models.DateField("Fecha hasta:",null=True)
    aux1=models.CharField("aux1:",max_length=20,null=True,blank=True)
    aux2=models.CharField("aux2:",max_length=30,null=True,blank=True)
    
    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Estados Validos Cierre"
        verbose_name = "Estado Calido Cierre"

    def __str__(self):
        return str(self.id) 

class Log_EstadoCaja(models.Model):
    id = models.AutoField("Id:", primary_key=True)
    fecha=models.DateTimeField("Fecha:",auto_now=True)
    id_caja=models.ForeignKey(Cajas,verbose_name='Id:', on_delete=models.CASCADE)
    descripcion = models.CharField("DescripciÃ³n",max_length=200)
    id_estadoCaja = models.CharField("id Estado Caja",max_length=20,null=True)
    estado = models.CharField("Estado",max_length=30)#('correcto','incorrecto')
    observaciones = models.CharField("Observaciones",max_length=200,null=True)

    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Logs estado de cajas"
        verbose_name = "Log estado de caja"

    def __str__(self):
        return self.id



class HoraIngresoPersonal(models.Model):
    id= models.AutoField("Id:",primary_key=True)
    id_usuario = models.ForeignKey(Personal,verbose_name='Id:', on_delete=models.CASCADE)
    fecha_ingreso = models.CharField("Fecha ingreso", max_length=50,null=False) 
    horaMora=models.CharField("Hora mora", max_length=20)
    bloqueado=models.CharField("Bloqueo", max_length=2)

    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Horas de Ingresos"
        verbose_name = "Hora Ingreso"

    def __str__(self):
        return self.id

class Codigo_desbloqueo_sistema(models.Model): 
    id = models.AutoField("ID", primary_key=True)
    fecha = models.DateTimeField("Fecha:",auto_now=True)
    codigo_aut=models.CharField("Codigo:", max_length=10, null=True)
    estado=models.CharField("Estado",max_length=20)#pendiente,autorizado,utilizado
    id_user_solicitante=models.ForeignKey(Personal,verbose_name="ID Personal", on_delete=models.CASCADE)
    id_caja_solicitante= models.ForeignKey(Cajas, verbose_name='Id Caja:', on_delete=models.CASCADE)
    usuario_autorizador=models.CharField("Autorizacor",max_length=20,null=True)#tabla relacional del autorizador
    id_usuario_aut=models.IntegerField("Id User Aut:",null=True)
    fecha_aut = models.DateTimeField("Fecha Aut:",null=True)
    fecha_desbloqueo = models.DateTimeField("Fecha Desbloqueo:",null=True)
    obs = models.CharField("Obs:", max_length=100, null=True)
    aux1=models.DecimalField(max_digits=15,decimal_places=2,null=True)
    aux2=models.CharField("aux2:",max_length=20)
    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Codigos de Tardanzas"
        verbose_name = "Codigo de Tardanza"

    def __str__(self):
        return str(self.id)

class saldo_sistema(models.Model):
    id=models.AutoField("ID:", primary_key=True)
    fecha=models.DateTimeField("Fecha:",auto_now=True)
    id_caja=models.ForeignKey(Cajas,verbose_name='Id:', on_delete=models.CASCADE)
    saldo_soles=models.DecimalField(max_digits=15,decimal_places=3)#saldo actual
    saldo_dolares=models.DecimalField(max_digits=15,decimal_places=3)
    saldo_material=models.DecimalField(max_digits=15,decimal_places=3)
    fechaActual = models.DateField("Fecha Actual:",null=True)
    aux1=models.CharField("aux1:",max_length=20,null=True,blank=True)
    aux2=models.CharField("aux2:",max_length=30,null=True,blank=True)
    
    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Saldos Sistema"
        verbose_name = "Saldo Sistema"

    def __str__(self):
        return str(self.id) 

class caja_independiente(models.Model):
    id=models.AutoField("ID:", primary_key=True)
    fecha=models.DateTimeField("Fecha:",auto_now=True)
    id_caja=models.ForeignKey(Cajas,verbose_name='Id:', on_delete=models.CASCADE)
    independiente=models.CharField("Independiente",max_length=20)#'',si,no
    aux1=models.CharField("aux1:",max_length=20,null=True,blank=True)
    aux2=models.CharField("aux2:",max_length=30,null=True,blank=True)
    
    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Cajas Independientes"
        verbose_name = "Caja Independiente"

    def __str__(self):
        return str(self.id) 

class ReinicioNroReciboCaja(models.Model):
    """docsrting for Reinicio Numero Recibo Caja"""
    id = models.AutoField("Id", primary_key=True)
    fecha=models.DateTimeField("Fecha:",auto_now=True)
    id_oficina = models.ForeignKey(Oficina,verbose_name='Id Oficina:', on_delete=models.CASCADE)
    id_caja = models.ForeignKey(Cajas,verbose_name='Id Caja:', on_delete=models.CASCADE)
    u_nroRE = models.IntegerField("Nro Recibo Egreso:")
    u_nroRI = models.IntegerField("Nro Recibo Ingreso:")
    u_nroREM = models.IntegerField("Nro Recibo Egreso Material:")
    u_nroRIM = models.IntegerField("Nro Recibo Ingreso Material:")
    u_nroST = models.IntegerField("Nro Recibo Transferencia:")
    u_nroPT = models.IntegerField("Nro Recibo Pago Transferencia:")
    u_nroSI = models.IntegerField("Nro Recibo Intercambio:")
    u_nroPI = models.IntegerField("Nro Recibo Pago Intercambio:")
    aux1=models.CharField("aux1:",max_length=20,null=True,blank=True)
    aux2=models.CharField("aux2:",max_length=30,null=True,blank=True)

    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Reinicio Números de Recibos Cajas"
        verbose_name = "Reinicio Número de Recibo Caja"

    def __str__(self):
        return str(self.id) 

#******** conceptos ************
class ConceptoEgreso(models.Model):#sts
    id = models.AutoField("ID:", primary_key=True)
    concepto = models.CharField("concepto:", max_length=250, null=True)
    estado=models.BooleanField("estado",default=True)
    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Conceptos Egreso"
        verbose_name = "Concepto Egreso"

    def __str__(self):
        return str(self.id)

class ConceptoEgresoM(models.Model):#sts
    id = models.AutoField("ID:", primary_key=True)
    concepto = models.CharField("concepto:", max_length=250, null=True)
    estado=models.BooleanField("estado",default=True)
    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Conceptos Egreso"
        verbose_name = "Concepto Egreso"

    def __str__(self):
        return str(self.id)

#entidad bancaria
class Entidad_Bancaria_caja(models.Model):
    id = models.AutoField("ID:", primary_key=True)
    id_caja=models.ForeignKey(Cajas,verbose_name='Id:', on_delete=models.CASCADE)
    entidad = models.CharField("Entidad:", max_length=100, null=True)
    tipo = models.CharField("Tipo:", max_length=25, null=True)#Caja, financiera, Banco
    cta = models.IntegerField("Cuenta:",default=0)
    cta_comi = models.IntegerField("Cuenta comision:",default=0)
    es_agente=models.BooleanField("es agente",default=False)
    estado=models.BooleanField("estado",default=True)
    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Entidades Bancarias Cajas"
        verbose_name = "Entidad Bancaria Cajas"

    def __str__(self):
        return self.entidad

class Operacion_agente(models.Model):
    id = models.AutoField("ID:", primary_key=True)
    id_caja=models.ForeignKey(Cajas,verbose_name='Id:', on_delete=models.CASCADE)
    operacion = models.CharField("operacion:", max_length=100, null=True)
    es_deposito=models.BooleanField("es deposito",default=False)# en caso de retiro de transrferncia
    estado=models.BooleanField("estado",default=True)
    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Operaciones Agente"
        verbose_name = "Operacion agente"

    def __str__(self):
        return self.operacion

#---- liquidacion
class porcentaje_liquidacion(models.Model):
    id = models.AutoField("ID:", primary_key=True)
    tipo_caja = models.CharField("Tipo de caja", max_length=2)#(p,c)
    prj_caja =  models.DecimalField("porcentaje caja:",max_digits=15,decimal_places=2,default=0)#porcentaje comicion para caja (oficina des compartida) (en caso de oficina propia*)
    prj_oficina_central =  models.DecimalField("porcentaje central:",max_digits=15,decimal_places=2,default=0)#porcentaje comicion para oficina central (oficina des compartida)
    prj_otra_oficina =  models.DecimalField("porcentaje otra oficina:",max_digits=15,decimal_places=2,default=0)#porcentaje comicion para la otra oficina (oficina des compartida)(en caso de oficina propia*)

    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Porcentajes Liquidacion"
        verbose_name = "Porcentaje Liquidacion"

    def __str__(self):
        return str(self.id)

# facturacion
class ConfigFacturacionV1(models.Model):
    """Configuracion de facturacion version 1"""
    id = models.AutoField("Id", primary_key=True)
    #check job
    estado_tareas = models.CharField("Estado envios:", max_length=1, null=True)#'P': procesando, 'L': libre
    #check ws
    status_ws_sunat = models.CharField("Status Ws Sunat:", max_length=20, null=True)#activo, caido
    fecha_status = models.DateTimeField("Fecha Status:",null=True)
    #-----datos adicionales, multi ruc
    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Configuraciones Facturacion"
        verbose_name = "Configuracion Facturacion"

    def __str__(self):
        return str(self.id) 
class EmpresaSunat(models.Model):
    id = models.AutoField("Id", primary_key=True)
    ruc = models.CharField("ruc:", max_length=12, null=True)
    razon = models.CharField("razon:", max_length=200, null=True, blank=True)
    nombre = models.CharField("nombre:", max_length=200, null=True, blank=True)
    ubigeo = models.CharField("ubigeo:", max_length=10, null=True, blank=True)
    codigo_pais = models.CharField("pais:", max_length=3, null=True, blank=True)
    departamento = models.CharField("departamento:", max_length=50, null=True, blank=True)
    provincia = models.CharField("provincia:", max_length=50, null=True, blank=True)
    distrito = models.CharField("distrito:", max_length=50, null=True, blank=True)
    urb = models.CharField("urbanizacion:", max_length=100, null=True, blank=True)
    direccion = models.CharField("direccion:", max_length=200, null=True, blank=True)
    estado = models.BooleanField("estado",default=True)
    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Empresas Sunat"
        verbose_name = "Empresa Sunat"
    def __str__(self):
        return self.ruc


class SerieSunat(models.Model):
    id = models.AutoField("Id", primary_key=True)
    id_empresa = models.ForeignKey(EmpresaSunat,verbose_name='Id Empresa:', on_delete=models.CASCADE)
    serie_b = models.CharField("serie boleta:", max_length=4, null=True)
    serie_f = models.CharField("serie factura:", max_length=4, null=True)
    correlativo_b = models.IntegerField("correlativo boleta:",default=0)
    correlativo_f = models.IntegerField("correlativo factura:",default=0)
    estado = models.BooleanField("estado",default=True)
    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Series Sunat"
        verbose_name = "Serie Sunat"
    def __str__(self):
        return self.id_empresa.ruc

class CajaSunat(models.Model):
    id = models.AutoField("Id", primary_key=True)
    id_caja = models.ForeignKey(Cajas,verbose_name='Id Caja:', on_delete=models.CASCADE)
    id_serie = models.ForeignKey(SerieSunat,verbose_name='Id Serie:', on_delete=models.CASCADE)
    estado = models.BooleanField("estado",default=True)
    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Cajas Sunat"
        verbose_name = "Caja Sunat"
    def __str__(self):
        return self.id_caja.nombre

class ErroresFact(models.Model):
    """Errores"""
    id = models.AutoField("Id", primary_key=True)
    fecha= models.DateTimeField("Fecha:",auto_now=True)
    id_fa=models.CharField("id invoice:", max_length=15, null=True, blank=True)
    codigo = models.CharField("codigo:", max_length=10, null=True, blank=True)
    descripcion = models.CharField("descripcion:", max_length=250, null=True)
    notes = models.CharField("notes:", max_length=500, null=True,blank=True)
    status = models.CharField("status:", max_length=4, null=True, blank=True)
    serie = models.CharField("Serie:", max_length=4, null=False)#B001, F001
    correlativo = models.IntegerField("Correlativo:",default=0)
    ruc = models.CharField("RUC:", max_length=12, null=True, blank=True)
    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Errores Facturacion"
        verbose_name = "Error Facturacion"

    def __str__(self):
        return str(self.id) 