# -*- coding: utf-8 -*-
from django.db import models
from Main.models import *
from Maintenance.models import * 
# Create your models here.

class SolicitudTransferencia(models.Model):#se quito scucursal,caja origen
    """docsrting for Service"""
    id = models.AutoField("ID:", primary_key=True)# id solicitud
    idCajaDebe=models.ForeignKey(TCajaDebe,verbose_name="ID Caja Debe", on_delete=models.CASCADE)#id de ingreso
    id_cliente = models.ForeignKey(Cliente, verbose_name="ID Cliente:", on_delete=models.CASCADE)#id id_cliente # solicitante
    id_oficina = models.ForeignKey(Oficina,verbose_name='Id:', on_delete=models.CASCADE)#id oficina destino
    comision = models.DecimalField(max_digits=15,decimal_places=2,default=0)#comicion
    nombre_beneficiado = models.CharField("Nombres Beneficiado:", max_length=100,blank= True)
    Apellido_paterno_beneficiado = models.CharField("Apellido Paterno Beneficiado:", max_length=200,blank= True)
    Apellido_materno_beneficiado = models.CharField("Apellido Materno Beneficiado:", max_length=200,blank= True)
    dni_beneficiado = models.CharField("DNI Beneficiado:", max_length=11,null=True)
    id_beneficiario = models.IntegerField("ID beneficiario:",default=0)# id del cliente #obligatorio
    nombre_solicitante = models.CharField("Nombres solicitante:", max_length=100,blank= True)
    Apellido_paterno_solicitante = models.CharField("Apellido Paterno solicitante:", max_length=200,blank= True)
    Apellido_materno_solicitante = models.CharField("Apellido Materno solicitante:", max_length=200,blank= True)
    dni_solicitante = models.CharField("DNI solicitante:", max_length=11,null=True)
    observaciones = models.CharField("Observaciones:", max_length=250, null=True)
    otros_conceptos=models.CharField("Otros Conceptos:", max_length=250,null=True)#comicion bancos
    monto_conceptos=models.DecimalField(max_digits=15,decimal_places=2,default=0)
    aux1= models.CharField("aux1:", max_length=20,blank= True,null=True)
    dniMenor=models.CharField("dniMenor:", max_length=2,blank= True,null=True)#si no
    nroCta=models.CharField("nroCta:", max_length=30,null=True)#nro cuenta
    banco=models.CharField("banco:", max_length=100,null=True)#bancos
    nroLeido= models.CharField("Nro Leido:", max_length=20,null= True)# numero de leido 28/11/2018
    tipo_operacion = models.CharField("Tipo", max_length=10,null= True)#deposito, giro
    cel_referencia = models.CharField("Celular Referencia", max_length=15,null= True)# telefono de referencia
    cel_referencia2 = models.CharField("Celular Referencia 2", max_length=15,null=True)
    nro_operacion = models.CharField("Nro Operacion", max_length=20,null= True)
    nro_giro = models.CharField("Nro Giro", max_length=20,null= True)
    clave = models.CharField("Clave", max_length=15,null= True)
    monto_comi_giro=models.DecimalField(max_digits=15,decimal_places=2,default=0)
    id_liquidacion = models.IntegerField("Id Liquidacion:",default=0)# id liquidacion
    id_banco_proceso = models.IntegerField("Id Banco Proceso:",default=0)# permite registrar el banco en caso que se desee procesar la transferencia
    verificado = models.CharField("Verificado", max_length=10,null= True)#trans verificado #si-id_user
    leido_banco = models.CharField("Leido Banco", max_length=10,null= True)#si-id_user
    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Solicitudes de Transferencias"
        verbose_name = "Solicitud de Transferencia"

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

class SolicitudDesbloqueoST(models.Model):#se quito scucursal,caja origen
    """docsrting for Service"""
    id = models.AutoField("ID:", primary_key=True)# id solicitud
    id_solicitud =models.ForeignKey(SolicitudTransferencia,verbose_name="ID Solicitud ST", on_delete=models.CASCADE)#id de solicitud transferencia
    id_oficina = models.ForeignKey(Oficina,verbose_name='Id:', on_delete=models.CASCADE)#id oficina q realiza la solicitud
    id_caja = models.ForeignKey(Cajas,verbose_name='Id:', on_delete=models.CASCADE)#id caja que realiza la solicitud
    id_personal=models.ForeignKey(Personal,verbose_name="ID Personal", on_delete=models.CASCADE)
    fecha = models.DateTimeField("Fecha sol desbloqueo:",auto_now=True)
    tabla = models.CharField("Tabla operacion:", max_length=30,null=True)
    autorizado_por = models.CharField("Autorizado por", max_length=30,null=True) #oficina y personal
    estadoAutorizacion=models.CharField("Estado Autorizacion",max_length=20) #pendiente, autorizado, utilizado
    fecha_aut = models.DateTimeField("Fecha Aut:",null=True)#autorizado
    fecha_op = models.DateTimeField("Fecha Ret:",null=True)#utilizacion
    activo = models.BooleanField(verbose_name="Estado Activo:",default=True)

    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Solicitudes de Desbloqueo ST"
        verbose_name = "Solicitud de Desbloqueo ST"

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

class SaldoDisponibleCajas(models.Model):# transferencias
    """docsrting for Service"""
    id = models.AutoField("ID:", primary_key=True)
    fecha = models.DateTimeField("Fecha actualizacion:",auto_now=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)
    saldo_soles = models.DecimalField(max_digits=15,decimal_places=2,default=0)
    saldo_dolares=models.DecimalField(max_digits=15,decimal_places=2,default=0)

    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Saldo de Cajas"
        verbose_name = "Saldo de Caja"

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

class SaldoInicialCaja(models.Model):
    """docsrting for Saldo inicial"""
    id = models.AutoField("ID:", primary_key=True)
    fecha = models.DateTimeField("Fecha actualizacion:",auto_now=True)
    id_caja = models.ForeignKey(Cajas,verbose_name='Id:', on_delete=models.CASCADE)
    saldo_soles = models.DecimalField(max_digits=15,decimal_places=2,default=0)
    saldo_dolares=models.DecimalField(max_digits=15,decimal_places=2,default=0)

    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Saldo Inicial de Cajas"
        verbose_name = "Saldo Inicial de Cajas"

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

class PagoTransferencia(models.Model):
    """docsrting for Service"""
    id = models.AutoField("ID", primary_key=True)
    idCajaHaber = models.ForeignKey(TCajaHaber, verbose_name="ID Caja Haber:", on_delete=models.CASCADE)
    id_solicitud_transferencia = models.ForeignKey(SolicitudTransferencia, verbose_name="ID Solicitud Transferencia:", on_delete=models.CASCADE)
    observaciones = models.CharField("Observaciones:", max_length=250, null=True)

    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Pagos de Transferencias"
        verbose_name = "Pago de Transferencia"

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


class ExtornoTransferencia(models.Model):
    """docsrting"""
    id = models.AutoField("ID", primary_key=True)
    idCajaHaber = models.ForeignKey(TCajaHaber, verbose_name="ID Caja Haber:", on_delete=models.CASCADE)
    id_solicitud_transferencia = models.ForeignKey(SolicitudTransferencia, verbose_name="ID Solicitud Transferencia:", on_delete=models.CASCADE)
    observaciones = models.CharField("Observaciones:", max_length=100, null=True)

    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Extornos de Transferencias"
        verbose_name = "Extorno de Transferencia"

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


class EgresoExtraTransferencia(models.Model):
    """docsrting """
    id = models.AutoField("ID", primary_key=True)
    idCajaHaber = models.ForeignKey(TCajaHaber, verbose_name="ID Caja Haber:", on_delete=models.CASCADE)
    id_pago_transferencia = models.ForeignKey(PagoTransferencia, verbose_name="ID Pago Solicitud Transferencia:", on_delete=models.CASCADE)
    monto = models.DecimalField(max_digits=15,decimal_places=2,default=0)

    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Egresos extras de Pagos de Transferencias"
        verbose_name = "Egreso extra de Pago de Transferencia"

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


#******************* soles y dolares*******************
 

class DepositoCaja(models.Model):
    """docsrting for Deposito"""
    id = models.AutoField("ID:", primary_key=True)
    fecha = models.DateTimeField("Fecha Deposito:",auto_now=True)
    id_caja = models.ForeignKey(Cajas,verbose_name='Id:', on_delete=models.CASCADE)#a favor de
    id_usuario = models.ForeignKey(Personal,verbose_name='Id:', on_delete=models.CASCADE)# a favor de
    id_gerente = models.ForeignKey(Gerente,verbose_name='Id:', on_delete=models.CASCADE)# a gerente
    moneda = models.CharField("Moneda:",max_length=20)
    monto = models.DecimalField(max_digits=15,decimal_places=2,default=0)
    conceptoDetalle=models.CharField("Detalle:",max_length=250,null=True)
    observaciones = models.CharField("Observaciones:", max_length=100, null=True)
    idCajaHaber = models.ForeignKey(TCajaHaber, verbose_name="ID Caja Haber:", on_delete=models.CASCADE)
    estado=models.CharField("Estado",max_length=20)
    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Depositos Cajas"
        verbose_name = "Deposito Caja"

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



class RecepcionDepositoCaja(models.Model):
    """ recepcion deposito """
    id = models.AutoField("ID:", primary_key=True)
    fecha = models.DateTimeField("Fecha:",auto_now=True)
    idCajaDebe=models.ForeignKey(TCajaDebe,verbose_name="ID Caja Debe", on_delete=models.CASCADE)#id de ingreso
    idDepositoCaja = models.ForeignKey(DepositoCaja,verbose_name='Id:', on_delete=models.CASCADE)
    monto = models.DecimalField(max_digits=15,decimal_places=2,default=0)
    moneda = models.CharField("Moneda:",max_length=20)
    conceptoDetalle=models.CharField("Detalle:",max_length=250,null=True)
    observaciones = models.CharField("Observaciones:", max_length=100, null=True)
    estado=models.CharField("Estado",max_length=20)

    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Recepciones Depositos"
        verbose_name = "Recepcion Deposito"

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



class DepositoCajaAnulacion(models.Model):
    id = models.AutoField("ID:", primary_key=True)
    fecha = models.DateTimeField("Fecha:",auto_now=True)
    idDepositoCaja = models.ForeignKey(DepositoCaja,verbose_name='ID Envio:', on_delete=models.CASCADE)
    idCajaDebe=models.ForeignKey(TCajaDebe,verbose_name="ID Caja Debe", on_delete=models.CASCADE)#id de ingreso
    anulado=models.CharField("anulado:",max_length=5,null=True)
    aux1=models.CharField("aux1:",max_length=20,null=True)
    aux2=models.CharField("aux2:",max_length=30,null=True)

    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Sol Anulaciones Depositos"
        verbose_name = "Sol Anulacion Deposito"

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


class CajaCierre(models.Model):#transferencias
    """ cierre de  cajas """
    id = models.AutoField("ID:", primary_key=True)
    fecha = models.DateTimeField("Fecha Cierre:",auto_now=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)
    totalDebeSoles = models.DecimalField(max_digits=15,decimal_places=2,default=0)
    totalDebeDolares= models.DecimalField(max_digits=15,decimal_places=2,default=0)
    totalDebeDolarizado = models.DecimalField(max_digits=15,decimal_places=2,default=0)
    totalHaberSoles = models.DecimalField(max_digits=15,decimal_places=2,default=0)
    totalHaberDolares = models.DecimalField(max_digits=15,decimal_places=2,default=0)
    totalHaberDolarizado = models.DecimalField(max_digits=15,decimal_places=2,default=0)
    observaciones = models.CharField("Observaciones:", max_length=100, null=True)
    saldo_soles = models.DecimalField(max_digits=15,decimal_places=2,default=0)
    saldo_dolares=models.DecimalField(max_digits=15,decimal_places=2,default=0)
    fechaDesde = models.DateField("Fecha desde:")
    fechaHasta = models.DateField("Fecha hasta:")
    estado=models.CharField("Estado",max_length=20,null=True)#estado
    saldoInicial_soles = models.DecimalField(max_digits=15,decimal_places=2,default=0)
    saldoInicial_dolares=models.DecimalField(max_digits=15,decimal_places=2,default=0)
    soles_sistema=models.DecimalField(max_digits=15,decimal_places=3,default=0)#saldo actual
    dolares_sistema=models.DecimalField(max_digits=15,decimal_places=3,default=0)
    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Cierres Cajas"
        verbose_name = "Cierre Caja"

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

class EnvioCajaCaja(models.Model):
    """ envio de caja a caja """
    id = models.AutoField("ID:", primary_key=True)
    fecha = models.DateTimeField("Fecha:",auto_now=True)
    idCajaHaber=models.ForeignKey(TCajaHaber,verbose_name="ID Caja Haber", on_delete=models.CASCADE)
    id_CajaDestino = models.ForeignKey(Cajas,verbose_name='Id:', on_delete=models.CASCADE)
    monto = models.DecimalField(max_digits=15,decimal_places=2,default=0)
    moneda = models.CharField("Moneda:",max_length=20)
    conceptoDetalle=models.CharField("Detalle:",max_length=250,null=True)
    observaciones = models.CharField("Observaciones:", max_length=100, null=True)
    estado=models.CharField("Estado",max_length=20)

    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Envios Cajas"
        verbose_name = "Envio Caja"

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

class RecepcionEnvioCajaCaja(models.Model):
    """ envio oficina a oficina """
    id = models.AutoField("ID:", primary_key=True)
    fecha = models.DateTimeField("Fecha:",auto_now=True)
    idCajaDebe=models.ForeignKey(TCajaDebe,verbose_name="ID Caja Debe", on_delete=models.CASCADE)#id de ingreso
    idEnvioCajaCaja = models.ForeignKey(EnvioCajaCaja,verbose_name='Id:', on_delete=models.CASCADE)
    monto = models.DecimalField(max_digits=15,decimal_places=2,default=0)
    moneda = models.CharField("Moneda:",max_length=20)
    conceptoDetalle=models.CharField("Detalle:",max_length=250,null=True)
    observaciones = models.CharField("Observaciones:", max_length=100, null=True)
    estado=models.CharField("Estado",max_length=20)

    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Recepciones Cajas"
        verbose_name = "Recepcion Caja"

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


class EnvioCajaCajaAnulacion(models.Model):
    id = models.AutoField("ID:", primary_key=True)
    fecha = models.DateTimeField("Fecha:",auto_now=True)
    id_EnvioCaja = models.ForeignKey(EnvioCajaCaja,verbose_name='Id:', on_delete=models.CASCADE)
    idCajaDebe=models.ForeignKey(TCajaDebe,verbose_name="ID Caja Debe", on_delete=models.CASCADE)#id de ingreso
    anulado=models.CharField("anulado:",max_length=5,null=True)
    aux1=models.CharField("aux1:",max_length=20,null=True)
    aux2=models.CharField("aux2:",max_length=30,null=True)

    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Sol Anulacion Envios Cajas"
        verbose_name = "Sol Anulacion Envio Caja"

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


#comision envio  dinero
class ComisionEnvio(models.Model):
    id = models.AutoField("ID:", primary_key=True)
    fecha = models.DateTimeField("Fecha:",auto_now=True)
    idCajaHaber=models.ForeignKey(TCajaHaber,verbose_name="ID Caja Haber", on_delete=models.CASCADE)
    id_envio=models.CharField("ID Envio:",max_length=10,null=True)
    tabla=models.CharField("Tabla Relacional:",max_length=50,null=True)
    aux1=models.CharField("aux1:",max_length=20,null=True)
    aux2=models.CharField("aux2:",max_length=30,null=True)

    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Comisiones de envio de dinero"
        verbose_name = "Comision de envio de dinero"

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

#********************* base externa ********************
class ST_BaseExterna(models.Model):
    """docsrting for Transferencias money"""
    id = models.AutoField("ID:", primary_key=True)# id solicitud
    id_transferencia = models.ForeignKey(SolicitudTransferencia,verbose_name='Id:', on_delete=models.CASCADE)
    id_base_ori=models.CharField("Id Base Origen:",max_length=12,null=True)#id base origen
    id_base_des=models.CharField("Id Base Destino:",max_length=12,null=True)#id base destino
    aux1=models.CharField("aux1:",max_length=20,null=True)
    aux2=models.CharField("aux2:",max_length=15,null=True)
    class Meta:
        ordering = ["id"]
        verbose_name_plural = "STs Basees Externas"
        verbose_name = "ST Base Externa"

    def __str__(self):
        return str(self.id)
#*******************************************************
class Sol_Aut_Ret_Transferencias(models.Model):
    """ solicitud  de Autorizacion de retiro de transferncia"""
    id = models.AutoField("ID", primary_key=True)
    fecha = models.DateTimeField("Fecha:",auto_now=True)
    id_st = models.ForeignKey(SolicitudTransferencia, verbose_name="ID ST:", on_delete=models.CASCADE)
    codigo_aut=models.CharField("Codigo:", max_length=10, null=True)
    estado=models.CharField("Estado",max_length=20)#pendiente,autorizado
    id_user_solicitante=models.ForeignKey(Personal,verbose_name="ID Personal", 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_ret = models.DateTimeField("Fecha Ret:",null=True)
    observaciones = models.CharField("Obs:", max_length=100, null=True)
    aux1=models.CharField("aux1:",max_length=20)
    aux2=models.CharField("aux2:",max_length=15)
    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Solicitudes de Autrizacion Retiro Trans"
        verbose_name = "Solicitud de Aut Retiro Trans"

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


#******* INTERCAMBIO****************
class Intercambio(models.Model):#se quito scucursal,caja origen
    """docsrting for Service"""
    id = models.AutoField("ID:", primary_key=True)# id solicitud
    idCajaDebe=models.ForeignKey(TCajaDebe,verbose_name="ID Caja Debe", on_delete=models.CASCADE)#id de ingreso
    id_cliente = models.ForeignKey(Cliente, verbose_name="ID Cliente:", on_delete=models.CASCADE)#id id_cliente # solicitante
    id_oficina = models.ForeignKey(Oficina,verbose_name='Id:', on_delete=models.CASCADE)#id oficina destino
    comision = models.DecimalField(max_digits=15,decimal_places=2,default=0)#comicion
    nombre_beneficiado = models.CharField("Nombres Beneficiado:", max_length=100,blank= True)
    Apellido_paterno_beneficiado = models.CharField("Apellido Paterno Beneficiado:", max_length=200,blank= True)
    Apellido_materno_beneficiado = models.CharField("Apellido Materno Beneficiado:", max_length=200,blank= True)
    dni_beneficiado = models.CharField("DNI Beneficiado:", max_length=11,null=True)
    id_beneficiario = models.IntegerField("ID beneficiario:",default=0)# id del cliente #obligatorio
    observaciones = models.CharField("Observaciones:", max_length=250, null=True)
    otros_conceptos=models.CharField("Otros Conceptos:", max_length=250,null=True)
    monto_conceptos=models.DecimalField(max_digits=15,decimal_places=2,default=0)
    aux1= models.CharField("aux1:", max_length=20,blank= True,null=True)
    codigo= models.CharField("codigo:", max_length=6,null=True)
    aux2= models.CharField("aux2:", max_length=10,null=True)
    pago_adelanto = models.BooleanField(verbose_name="Pago Adelanto:",default=False)
    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Intercambios"
        verbose_name = "Intercambio"

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


class BeneficiadoSI(models.Model):
    """docsrting for Service"""
    id = models.AutoField("ID:", primary_key=True)
    idSI=models.ForeignKey(Intercambio,verbose_name="ID SI", on_delete=models.CASCADE)
    id_personal=models.ForeignKey(Personal,verbose_name="ID Personal", on_delete=models.CASCADE)
    fecha = models.DateTimeField("Fecha:",auto_now=True)
    id_cliente = models.ForeignKey(Cliente, verbose_name="ID Cliente:", on_delete=models.CASCADE)
    aux1= models.CharField("aux1:", max_length=20,blank= True,null=True)

    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Beneficiados"
        verbose_name = "Beneficiado"

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


class PagoIntercambio(models.Model):
    """docsrting for Service"""
    id = models.AutoField("ID", primary_key=True)
    idCajaHaber = models.ForeignKey(TCajaHaber, verbose_name="ID Caja Haber:", on_delete=models.CASCADE)
    id_intercambio = models.ForeignKey(Intercambio, verbose_name="ID Solicitud Transferencia:", on_delete=models.CASCADE)
    observaciones = models.CharField("Observaciones:", max_length=250, null=True)

    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Pagos de Intercambios"
        verbose_name = "Pago de Intercambio"

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


class ExtornoIntercambio(models.Model):
    """docsrting"""
    id = models.AutoField("ID", primary_key=True)
    idCajaHaber = models.ForeignKey(TCajaHaber, verbose_name="ID Caja Haber:", on_delete=models.CASCADE)
    id_intercambio = models.ForeignKey(Intercambio, verbose_name="ID Solicitud Transferencia:", on_delete=models.CASCADE)
    observaciones = models.CharField("Observaciones:", max_length=100, null=True)

    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Extornos de Intercambios"
        verbose_name = "Extorno de Intercambio"

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


class EgresoExtraIntercambio(models.Model):
    """docsrting """
    id = models.AutoField("ID", primary_key=True)
    idCajaHaber = models.ForeignKey(TCajaHaber, verbose_name="ID Caja Haber:", on_delete=models.CASCADE)
    id_pago_intercambio= models.ForeignKey(PagoIntercambio, verbose_name="ID Pago Solicitud Transferencia:", on_delete=models.CASCADE)
    monto = models.DecimalField(max_digits=15,decimal_places=2,default=0)

    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Egresos extras de Pagos de Intercambios"
        verbose_name = "Egreso extra de Pago de Intercambio"

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

class IngresoExtraTransferencia(models.Model):
    """docsrting """
    id = models.AutoField("ID", primary_key=True)
    idCajaDebe = models.ForeignKey(TCajaDebe, verbose_name="ID Caja Debe:", on_delete=models.CASCADE)
    id_pago_transferencia = models.ForeignKey(PagoTransferencia, verbose_name="ID Pago Solicitud Transferencia:", on_delete=models.CASCADE)
    monto = models.DecimalField(max_digits=15,decimal_places=2,default=0)

    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Ingreso extras de Pagos de Transferencias"
        verbose_name = "Ingreso extra de Pago de Transferencia"

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



#*********** INTERCAMBIOS DIRIGIDOS *********
class Intercambios_dirigido(models.Model):
    """ solicitud  de Autorizacion de retiro de transferncia"""
    id = models.AutoField("ID", primary_key=True)
    id_intercambio = models.ForeignKey(Intercambio, verbose_name="ID ST:", on_delete=models.CASCADE)
    id_caja_destino=models.ForeignKey(Cajas,verbose_name="ID Caja", on_delete=models.CASCADE)
    aux1=models.CharField("aux1:",max_length=20,null=True)
    aux2=models.CharField("aux2:",max_length=15,null=True)
    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Intercambios Dirigidos"
        verbose_name = "Intercambio Dirigido"

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


class soli_ret_intercambios_dir(models.Model):
    """ solicitud  de Autorizacion de retiro de transferncia"""
    id = models.AutoField("ID", primary_key=True)
    fecha = models.DateTimeField("Fecha:",auto_now=True)
    id_intercambio_dir = models.ForeignKey(Intercambios_dirigido, verbose_name="ID ST:", on_delete=models.CASCADE)
    codigo_aut=models.CharField("Codigo:", max_length=10, null=True)
    estado=models.CharField("Estado",max_length=20)#pendiente,autorizado
    id_user_solicit=models.ForeignKey(Personal,verbose_name="ID Personal", on_delete=models.CASCADE)
    id_caja_solicit=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_ret = models.DateTimeField("Fecha Ret:",null=True)
    observaciones = models.CharField("Obs:", max_length=100, null=True)
    aux1=models.CharField("aux1:",max_length=20,null=True)
    aux2=models.CharField("aux2:",max_length=15,null=True)
    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Solicitudes de retiro de intercdir"
        verbose_name = "Solicitud de retiro de interc dir"

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

#**********************************************************
class PagoAdelantoIntercambio(models.Model):
    """pagar  por partes intercambio"""
    id = models.AutoField("ID", primary_key=True)
    fecha = models.DateTimeField("Fecha:",auto_now=True)
    idCajaHaber = models.ForeignKey(TCajaHaber, verbose_name="ID Caja Haber:", on_delete=models.CASCADE)
    id_intercambio = models.ForeignKey(Intercambio, verbose_name="ID Solicitud Intercambio:", on_delete=models.CASCADE)
    nroAdelanto = models.IntegerField("Nro de Adelanto",default=0)
    nroReciboPI=models.CharField("Nro. recibo:",max_length=30)
    observaciones = models.CharField("Observaciones:", max_length=100, null=True)
    saldo = models.DecimalField(max_digits=15,decimal_places=2)
    aux1=models.CharField("aux1:",max_length=60,null=True)
    aux2=models.CharField("aux2:",max_length=15,null=True)

    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Pagos Adelanto de Intercambios"
        verbose_name = "Pago Adelanto de Intercambio"

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

class EgresoExtraIntercambioAdelanto(models.Model):
    """docsrting """
    id = models.AutoField("ID", primary_key=True)
    idCajaHaber = models.ForeignKey(TCajaHaber, verbose_name="ID Caja Haber:", on_delete=models.CASCADE)
    id_pago_intercambio_a= models.ForeignKey(PagoAdelantoIntercambio, verbose_name="ID Pago Intercambio adelanto:", on_delete=models.CASCADE)
    monto = models.DecimalField(max_digits=15,decimal_places=2,default=0)

    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Egresos extras de Pagos de Intercambios A."
        verbose_name = "Egreso extra de Pago de Intercambio A."

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

#************ END INTERCAMBIOS ************


class liquidacionCaja(models.Model):
    """ liquidacion de  cajas """
    id = models.AutoField("ID:", primary_key=True)
    fecha = models.DateTimeField("Fecha Cierre:",auto_now=True)
    id_caja = models.ForeignKey(Cajas,verbose_name='Id:', on_delete=models.CASCADE)
    observaciones = models.CharField("Observaciones:", max_length=100, null=True)
    fechaDesde = models.DateField("Fecha desde:")
    fechaHasta = models.DateField("Fecha hasta:")
    estado=models.CharField("Estado",max_length=20,null=True)#estado
    aux1=models.CharField("aux1:",max_length=60,null=True)
    aux2=models.CharField("aux2:",max_length=15,null=True)
    tipo_caja = models.CharField("Tipo de caja", max_length=2,null=True)#(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 = "Liquidaciones Cajas"
        verbose_name = "Liquidacion Caja"

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

#***********************************************************
class asociado(models.Model):
    """docsrting for Asociado"""
    id = models.AutoField("Id", primary_key=True)
    fecha = models.DateTimeField("Fecha:",auto_now=True)#fecha de registro
    nombre = models.CharField("Nombre Asociado:", max_length=50)
    id_oficina = models.ForeignKey(Oficina,verbose_name='Id:', on_delete=models.CASCADE)#central del asociado
    id_caja = models.ForeignKey(Cajas,verbose_name='Id:', on_delete=models.CASCADE)#central del asociado
    observaciones = models.CharField("Observaciones:", max_length=100, null=True)
    aux1=models.CharField("aux1:",max_length=60,null=True)
    aux2=models.CharField("aux2:",max_length=15,null=True)

    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Oficinas Asociados"
        verbose_name = "Oficina Asociado"

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

class oficinas_por_asociado(models.Model):
    """docsrting for Asociado"""
    id = models.AutoField("Id", primary_key=True)
    fecha = models.DateTimeField("Fecha:",auto_now=True)#fecha de registro
    id_asociado = models.ForeignKey(asociado,verbose_name='Id:', on_delete=models.CASCADE)#asociado
    id_caja = models.ForeignKey(Cajas,verbose_name='Id:', on_delete=models.CASCADE)#cajas que maneja el asociado
    estado=models.CharField("Estado",max_length=20,null=True)#estado ('activo,'desactivo')
    observaciones = models.CharField("Observaciones:", max_length=100, null=True)
    aux1=models.CharField("aux1:",max_length=60,null=True)
    aux2=models.CharField("aux2:",max_length=15,null=True)
    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Oficinas Asociados"
        verbose_name = "Oficina Asociado"

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

#********************************************************************
#***************** SOBREGIRO ****************************************

class SobregiroHaber(models.Model):
    id = models.AutoField("ID", primary_key=True)
    fecha = models.DateTimeField("Fecha:",auto_now=True)#fecha de registro
    idCajaHaber = models.ForeignKey(TCajaHaber, verbose_name="ID Caja Haber:", on_delete=models.CASCADE)
    tabla = models.CharField("Tabla:", max_length=100, null=True)
    id_transaccion = models.CharField("Id Transaccion:", max_length=10, null=True)
    monto_sobregiro = models.DecimalField(max_digits=15,decimal_places=2)
    aux1=models.CharField("aux1:",max_length=20,null=True)
    aux2=models.CharField("aux2:",max_length=15,null=True)

    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Sobregiros Egresos"
        verbose_name = "Sobregiro Egreso"

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

# solicitud autorizacion de extrono-------------
class SolicitudAutExtornoST(models.Model):
    """solicitud de autorizacion para extorno de transferencias"""
    id = models.AutoField("ID", primary_key=True)
    fecha = models.DateTimeField("Fecha:",auto_now=True)
    id_st = models.ForeignKey(SolicitudTransferencia, verbose_name="ID ST:", on_delete=models.CASCADE)
    codigo_aut=models.CharField("Codigo:", max_length=10, null=True)
    estado=models.CharField("Estado",max_length=20)#pendiente,autorizado,utlizado
    id_user_solicitante=models.ForeignKey(Personal,verbose_name="ID Personal", on_delete=models.CASCADE)
    id_caja_solicitante=models.ForeignKey(Cajas,verbose_name='Id:', 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_extorno = models.DateTimeField("Fecha Ret:",null=True)
    observaciones = models.CharField("Obs:", max_length=100, null=True)
    aux1=models.CharField("aux1:",max_length=20)
    aux2=models.CharField("aux2:",max_length=15)
    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Solicitudes de Autorizaciones Ext STs"
        verbose_name = "Solicitud de Autorizacion Ext ST"
    def __str__(self):
        return str(self.id)

class cambio_destino(models.Model):
    """CAmbio de oficina destino en sts"""
    id = models.AutoField("ID", primary_key=True)
    fecha = models.DateTimeField("Fecha:",auto_now=True)
    id_st = models.ForeignKey(SolicitudTransferencia, verbose_name="ID ST:", on_delete=models.CASCADE)
    id_debe= models.CharField("Debe",max_length=10, null=True)#si se cobra comision
    ofi_destino_ini= models.ForeignKey(Oficina, verbose_name='Id:', on_delete=models.CASCADE)
    ofi_destino_fin= models.CharField("Destino",max_length=5, null=True)
    base_destino_ini= models.CharField("Base Destino Ini",max_length=5, null=True)
    base_destino_fin= models.CharField("Base Destino Fin",max_length=5, null=True)
    comision= models.DecimalField(max_digits=15,decimal_places=2,default=0)
    derecho_cambio= models.DecimalField(max_digits=15,decimal_places=2,default=0)
    id_personal_operacion=models.ForeignKey(Personal,verbose_name="ID Personal", on_delete=models.CASCADE)
    id_caja_operacion=models.ForeignKey(Cajas,verbose_name='Id:', on_delete=models.CASCADE)
    observaciones = models.CharField("Obs:", max_length=200, null=True)
    aux1=models.CharField("aux1:",max_length=20)
    aux2=models.CharField("aux2:",max_length=15)
    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Cambios de Destino de Sts"
        verbose_name = "Cambio de estino de St"
    def __str__(self):
        return str(self.id)

#*******************************************************************
class Ingreso(models.Model):
    id = models.AutoField("ID:", primary_key=True)
    id_debe = models.ForeignKey(TCajaDebe,verbose_name='Id:', on_delete=models.CASCADE)
    id_cliente = models.IntegerField(default=0,null=False)
    estado = models.CharField("Estado:",max_length=20,null=False)
    observaciones = models.CharField("Observaciones:",max_length=250,null=True)
    concepto = models.CharField("concepto:",max_length=150,null=True)
    afavor = models.CharField("afavor:",max_length=150,null=True)
    dni_afavor = models.CharField("dni afavor:",max_length=12,null=True)
    aux1=models.CharField("Aux1:",max_length=10,blank=True,null=True)
    aux2=models.CharField("Aux2:",max_length=10,blank=True,null=True)
    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Ingresos"
        verbose_name = "Ingreso"

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

class Egreso(models.Model):
    id = models.AutoField("ID:", primary_key=True)
    id_haber = models.ForeignKey(TCajaHaber,verbose_name='Id:', on_delete=models.CASCADE)
    id_cliente = models.IntegerField(default=0,null=False)
    estado = models.CharField("Estado:",max_length=20,null=False)
    observaciones = models.CharField("Observaciones:",max_length=250,null=True)
    concepto = models.CharField("concepto:",max_length=150,null=True)
    afavor = models.CharField("afavor:",max_length=150,null=True)
    dni_afavor = models.CharField("dni afavor:",max_length=12,null=True)
    aux1=models.CharField("Aux1:",max_length=10,blank=True,null=True)
    aux2=models.CharField("Aux2:",max_length=10,blank=True,null=True)
    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Egresos"
        verbose_name = "Egreso"

    def __str__(self):
        return str(self.id)
#********************* cuentas main *****************************
class CtaAhorros_main(models.Model):#PLAZO FIJO
    id = models.AutoField("ID:", primary_key=True)
    id_cliente = models.ForeignKey(Cliente,verbose_name='Id Cliente:', on_delete=models.CASCADE)
    id_oficina = models.ForeignKey(Oficina,verbose_name='Id:', on_delete=models.CASCADE)
    id_caja = models.ForeignKey(Cajas,verbose_name='Id:', on_delete=models.CASCADE)
    id_usuario = models.ForeignKey(Personal,verbose_name='Id:', on_delete=models.CASCADE)
    saldo = models.DecimalField("Saldo:",max_digits=15,decimal_places=2)
    interes = models.DecimalField("Interes:",max_digits=15,decimal_places=2,null=True)#anual #plazo fijo
    plazo=models.CharField("Plazo:",max_length=10,null=True)
    tipo_plazo=models.CharField("Tipo Plazo:",max_length=10,null=True)#anual, meses,#dias,(a,m,d)
    fechaApertura= models.DateTimeField("Fecha apertura:",auto_now=True)
    fechaCierre = models.DateTimeField("Fecha cierre:",null =True)
    estado = models.CharField("Estado:",max_length=20,null=False)
    observaciones = models.CharField("Observaciones:",max_length=250,null=True)
    privadoOficina = models.CharField("Privado Oficina:", max_length=30, null=True)
    tipoCuenta = models.CharField("Tipo Cuenta:", max_length=30, null=True)
    claveAcceso= models.CharField("Clave Acceso:", max_length=30, null=True)
    nro_cta= models.CharField("Nro cuenta:", max_length=15, null=True)
    moneda= models.CharField("Moneda:", max_length=15, null=True)
    interesGanado =models.DecimalField("Interes Ganado:",max_digits=15,decimal_places=2,default=0)
    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Cuentas Ahorros"
        verbose_name = "Cuenta Ahorro"

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

class CtaAhorrosMovimientos_main(models.Model):#PLAZO FIJO MOVIMIENTO
    id = models.AutoField("ID:", primary_key=True)
    id_ctaahorros = models.ForeignKey(CtaAhorros_main,verbose_name='Id Cuenta Ahorros:', on_delete=models.CASCADE)
    idDebeHaber= models.CharField("Debe Haber:", max_length=15, null=True)
    tabla=models.CharField("Tabla:", max_length=100, null=True)#debe, #haber
    fecha= models.DateTimeField("Fecha:",auto_now=True)
    montoDeposito = models.DecimalField("Monto Depósito:",max_digits=15,decimal_places=2,default=0)
    montoRetiro = models.DecimalField("Monto Retiro:",max_digits=15,decimal_places=2,default=0)
    saldo = models.DecimalField("Saldo:",max_digits=15,decimal_places=2,null=False)
    moneda = models.CharField("Moneda:",max_length=20)#soles dolares
    tipo_cambio= models.DecimalField(max_digits=15,decimal_places=3,default=0)
    interes = models.DecimalField("Interes:",max_digits=15,decimal_places=2,default=0)
    plazo=models.CharField("Plazo:",max_length=10,null=True)
    tipo_plazo=models.CharField("Tipo Plazo:",max_length=10,null=True)#anual, meses,
    tiempo_interes=models.CharField("Plazo:",max_length=10,null=True)#1,2,3,...
    tipo_plazo_interes=models.CharField("Tipo Plazo:",max_length=10,null=True)#anual, meses,dias
    fechaAux = models.DateTimeField("Fecha Aux:",auto_now=True)
    conceptoDetalle=models.CharField("Detalle:",max_length=250,null=True)
    subMontoDeposito = models.DecimalField("Sub Monto Deposito:",max_digits=15,decimal_places=2,null=True)
    interesGanado =models.DecimalField("Interes Ganado:",max_digits=15,decimal_places=2,null=True)
    observacionesMovimientos = models.CharField("Observaciones Movimientos:", max_length=250, null=True)
    comision=models.DecimalField("Comision:",max_digits=15,decimal_places=2,null=True)
    nro_operacion=  models.IntegerField("Nro Operacion", default=1)#numero de operacion
    penalidad =models.DecimalField("Penalidad:",max_digits=15,decimal_places=2,default=0)
    idDepositoAhorro= models.CharField("Deposito:", max_length=15, null=True)#deposito afectado, retiro de capital o retiro de interes, #CtaAhorrosMovimientos
    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Cuentas Ahorros Movimientos"
        verbose_name = "Cuenta Ahorro Movimiento"

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

class CtaCte_main(models.Model):# caja transferencias
    """ cuentas corrientes o cuentas movibles """
    id = models.AutoField("ID:", primary_key=True)
    id_cliente = models.ForeignKey(Cliente,verbose_name='Id Cliente:', on_delete=models.CASCADE)  
    id_oficina = models.ForeignKey(Oficina,verbose_name='Id:', on_delete=models.CASCADE)
    id_caja = models.ForeignKey(Cajas,verbose_name='Id:', on_delete=models.CASCADE)
    id_usuario = models.ForeignKey(Personal,verbose_name='Id:', on_delete=models.CASCADE)
    saldo = models.DecimalField("Saldo:",max_digits=15,decimal_places=2)
    fechaApertura= models.DateTimeField("Fecha apertura:",auto_now=True)
    fechaCierre = models.DateTimeField("Fecha cierre:",null=True)
    estado = models.CharField("Estado:",max_length=20,null=False)#activo,sobregirado
    observaciones = models.CharField("Observaciones:",max_length=250,null=True)
    privadoOficina = models.CharField("Privado Oficina:", max_length=30, null=True)
    tipoCuenta = models.CharField("Tipo Cuenta:", max_length=30, null=True)
    claveAcceso= models.CharField("Clave Acceso:", max_length=30, null=True)
    nro_cta= models.CharField("Nro cuenta:", max_length=15, null=True)
    moneda= models.CharField("Moneda:", max_length=15, null=True)

    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Cuentas Corrientes"
        verbose_name = "Cuenta Corriente"

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

class CtaCteMovimientos_main(models.Model):# caja transferencias
    id = models.AutoField("ID:", primary_key=True)
    id_ctacte = models.ForeignKey(CtaCte_main,verbose_name='Id Cuenta Corriente:', on_delete=models.CASCADE)
    idDebeHaber= models.CharField("Debe Haber:", max_length=15, null=True)
    tabla=models.CharField("Tabla:", max_length=100, null=True)#debe, #haber
    fecha= models.DateTimeField("Fecha:",auto_now=True)
    montoDeposito = models.DecimalField("Monto Depósito:",max_digits=15,decimal_places=2,default=0)
    montoRetiro = models.DecimalField("Monto Retiro:",max_digits=15,decimal_places=2,default=0)
    saldo = models.DecimalField("Saldo:",max_digits=15,decimal_places=2,null=False)
    observacionesMovimientos = models.CharField("Observaciones Movimientos:", max_length=250, null=True)
    tipoDocumento= models.CharField("Tipo Documento:", max_length=6, null=True)
    nroRecibo=models.IntegerField("Nro Recibo:",null=True)
    conceptoDetalle=models.CharField("Detalle:",max_length=250,null=True)
    comision=models.DecimalField("Comision:",max_digits=15,decimal_places=2,default=0)
    tipoCambio=models.DecimalField("Tipo Cambio:",max_digits=15,decimal_places=4,default=0)
    moneda=models.CharField("Moneda:", max_length=15, null=True)
    aux1=models.CharField("Aux1:", max_length=20, null=True)
    aux2=models.CharField("Aux2:", max_length=20, null=True)
    #sobregiro version 1 solo se considerara en periodo de dias
    sobregirado=models.CharField("Sobregirado:", max_length=2, null=True)#si , no
    monto_sobregiro=models.DecimalField("Monto Sobregiro:",max_digits=15,decimal_places=2,default=0)
    interes = models.DecimalField("Interes:",max_digits=15,decimal_places=2,default=0)
    plazo=models.IntegerField("Plazo:",default=0)
    tipo_plazo=models.CharField("Tipo Plazo:",max_length=10,null=True)#d(dias),a(anos), m(meses)
    fecha_pago = models.DateField("Fecha Pago:",null=True)
    st=models.IntegerField("ST:",default=0)#solicitud de transferencia
    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Cuentas Corrientes Movimientos"
        verbose_name = "Cuenta Corriente Movimiento"

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

class Solicitud_sobregiros_ctacte_main(models.Model):
    id = models.AutoField("ID", primary_key=True)
    fecha = models.DateTimeField("Fecha:",auto_now=True)
    id_ctacte = models.ForeignKey(CtaCte_main,verbose_name='Id Cuenta Corriente:', on_delete=models.CASCADE)
    id_movimiento = models.IntegerField("Movimiento:",default=0)
    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", on_delete=models.CASCADE)
    id_caja_solicitante= models.ForeignKey(Cajas, verbose_name='Id Caja:', on_delete=models.CASCADE)
    usuario_autorizador=models.CharField("Autorizador",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_utilizado = models.DateTimeField("Fecha Utilizado:",null=True)
    obs = models.CharField("Obs:", max_length=100, null=True)
    obs_autorizado = models.CharField("Obs:", max_length=200, null=True)
    monto_saldo=models.DecimalField(max_digits=15,decimal_places=2,default=0)
    monto_retiro=models.DecimalField(max_digits=15,decimal_places=2,default=0)
    monto_sobregiro=models.DecimalField(max_digits=15,decimal_places=2,default=0)
    indefinido = models.CharField("Periodo Indefinido:", max_length=2, null=True)#('si','no')
    nro_dias=models.IntegerField("Numero de dias:",default=0)
    fecha_pago = models.DateField("Fecha Pago:",null=True)
    interes_dia=models.DecimalField(max_digits=15,decimal_places=2,default=0)
    interes_total=models.DecimalField(max_digits=15,decimal_places=2,default=0)
    aux2=models.CharField("aux2:",max_length=20)
    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Solicitudes Sobregiro de ctas Ctes"
        verbose_name = "Solicitudes Sobregiro de cta Cte"
    def __str__(self):
        return str(self.id)

class SolicitudDesbloqueoCtaCteMovimientos_main(models.Model):#se quito scucursal,caja origen
    """docsrting for Service"""
    id = models.AutoField("ID:", primary_key=True)# id solicitud
    id_ctacte =models.ForeignKey(CtaCte_main,verbose_name="ID Solicitud ST", on_delete=models.CASCADE)#id de solicitud transferencia bancos
    id_oficina = models.ForeignKey(Oficina,verbose_name='Id:', on_delete=models.CASCADE)#id oficina q realiza la solicitud
    id_caja = models.ForeignKey(Cajas,verbose_name='Id:', on_delete=models.CASCADE)#id caja que realiza la solicitud
    id_personal=models.ForeignKey(Personal,verbose_name="ID Personal", on_delete=models.CASCADE)
    monto_operacion = models.DecimalField(max_digits=15,decimal_places=2,default=0)
    moneda = models.CharField("Moneda:", max_length=15, null=True)
    fecha = models.DateTimeField("Fecha sol desbloqueo:",auto_now=True)
    tabla = models.CharField("Tabla operacion:", max_length=30,null=True)
    autorizado_por = models.CharField("Autorizado por", max_length=30,null=True) #oficina y personal
    fecha_op = models.DateTimeField("Fecha Ret:",null=True)#utilizacion
    estadoAutorizacion=models.CharField("Estado Autorizacion",max_length=20) #pendiente, autorizado, cancelado
    activo = models.BooleanField(verbose_name="Estado Activo:",default=True)

    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Solicitudes de Desbloqueo Mov"
        verbose_name = "Solicitud de Desbloqueo Mov"

    def __str__(self):
        return str(self.id)
#************************************************************************************
#***************************** CAmbio de moneda ********************************
class NroReciboCajaCambio(models.Model):#nro recibo transferencia
    """nroRecibo Caja de cambio"""
    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:")
    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Números de Recibos Cajas Cambio"
        verbose_name = "Número de Recibo Caja Cambio"
    def __str__(self):
        return str(self.id) 

class SaldoDisponibleCajaCambio(models.Model):# transferencias
    """saldo disponible de caja cambio de moneda"""
    id = models.AutoField("ID:", primary_key=True)
    fecha = models.DateTimeField("Fecha actualizacion:",auto_now=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)
    saldo_soles = models.DecimalField(max_digits=15,decimal_places=2)
    saldo_dolares=models.DecimalField(max_digits=15,decimal_places=2)
    saldo_euro=models.DecimalField(max_digits=15,decimal_places=2)

    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Saldo de Cajas Cambio"
        verbose_name = "Saldo de Caja Cambio"

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

class SaldoInicialCajaCambio(models.Model):
    """Saldo inicial de caja cambio de moneda"""
    id = models.AutoField("ID:", primary_key=True)
    fecha = models.DateTimeField("Fecha actualizacion:",auto_now=True)
    id_caja = models.ForeignKey(Cajas,verbose_name='Id:', on_delete=models.CASCADE)
    saldo_soles = models.DecimalField(max_digits=15,decimal_places=2,default=0)
    saldo_dolares=models.DecimalField(max_digits=15,decimal_places=2,default=0)
    saldo_euro=models.DecimalField(max_digits=15,decimal_places=2,default=0)

    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Saldo Inicial de Cajas Cambio"
        verbose_name = "Saldo Inicial de Cajas Cambio"

    def __str__(self):
        return str(self.id)
#cierre de caja dolares
class CajaCierreDolares(models.Model):#transferencias
    """ cierre de  cajas """
    id = models.AutoField("ID:", primary_key=True)
    fecha = models.DateTimeField("Fecha Cierre:",auto_now=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)
    totalDebeSoles = models.DecimalField(max_digits=15,decimal_places=2,default=0)
    totalDebeDolares= models.DecimalField(max_digits=15,decimal_places=2,default=0)
    totalDebeDolarizado = models.DecimalField(max_digits=15,decimal_places=2,default=0)
    totalHaberSoles = models.DecimalField(max_digits=15,decimal_places=2,default=0)
    totalHaberDolares = models.DecimalField(max_digits=15,decimal_places=2,default=0)
    totalHaberDolarizado = models.DecimalField(max_digits=15,decimal_places=2,default=0)
    observaciones = models.CharField("Observaciones:", max_length=100, null=True)
    saldo_soles = models.DecimalField(max_digits=15,decimal_places=2,default=0)
    saldo_dolares=models.DecimalField(max_digits=15,decimal_places=2,default=0)
    fechaDesde = models.DateField("Fecha desde:")
    fechaHasta = models.DateField("Fecha hasta:")
    estado=models.CharField("Estado",max_length=20,null=True)#estado
    saldoInicial_soles = models.DecimalField(max_digits=15,decimal_places=2,default=0)
    saldoInicial_dolares=models.DecimalField(max_digits=15,decimal_places=2,default=0)
    soles_sistema=models.DecimalField(max_digits=15,decimal_places=3,default=0)#saldo actual
    dolares_sistema=models.DecimalField(max_digits=15,decimal_places=3,default=0)
    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Cierres Cajas"
        verbose_name = "Cierre Caja"

    def __str__(self):
        return str(self.id)
#************* compra dolar ****************
class CompraDolar(models.Model):
    id = models.AutoField("ID:", primary_key=True)
    idCajaDebe=models.ForeignKey(TCajaDebeCambio,verbose_name="ID Caja Debe", on_delete=models.CASCADE)#id de ingreso (dolar)
    idCajaHaber = models.ForeignKey(TCajaHaberCambio, verbose_name="ID Caja Haber:", on_delete=models.CASCADE)#id de egreso (soles)
    fecha = models.DateTimeField("Fecha:",auto_now=True)
    id_cliente = models.IntegerField(default=0,null=False)
    tipo_persona_cliente= models.CharField("Tipo Persona:", max_length=10,blank= True, null=True)
    dni_ruc_cliente = models.CharField("DNI:", max_length=11,blank= True, null=True)
    nombre_razon_cliente = models.CharField("Nombres:", max_length=100,blank= True, null=True)
    Apellido_paterno_cliente = models.CharField("Apellido Paterno:", max_length=200,blank= True, null=True)
    Apellido_materno_cliente = models.CharField("Apellido Materno:", max_length=200,blank= True, null=True)
    observaciones = models.CharField("Observaciones:", max_length=100, null=True)
    tipo_cambio_compra =  models.DecimalField(max_digits=15,decimal_places=2,default=0)
    monto_dolar_comprado = models.DecimalField(max_digits=15,decimal_places=2,default=0)
    monto_soles_pagado = models.DecimalField(max_digits=15,decimal_places=2,default=0)
    aux1=models.CharField("aux1:",max_length=30,null=True)
    aux2=models.CharField("aux2:",max_length=15,null=True)
    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Compra de Dolar"
        verbose_name = "Compras de Dolar"
    def __str__(self):
        return str(self.id)

class VentaDolar(models.Model):
    id = models.AutoField("ID:", primary_key=True)
    idCajaDebe=models.ForeignKey(TCajaDebeCambio,verbose_name="ID Caja Debe", on_delete=models.CASCADE)#id de ingreso (soles)
    idCajaHaber = models.ForeignKey(TCajaHaberCambio, verbose_name="ID Caja Haber:", on_delete=models.CASCADE)#id de egreso (dolares)
    fecha = models.DateTimeField("Fecha:",auto_now=True)
    id_cliente = models.IntegerField(default=0,null=False)
    tipo_persona_cliente= models.CharField("Tipo Persona:", max_length=10,blank= True, null=True)
    dni_ruc_cliente = models.CharField("DNI:", max_length=11,blank= True, null=True)
    nombre_razon_cliente = models.CharField("Nombres:", max_length=100,blank= True, null=True)
    Apellido_paterno_cliente = models.CharField("Apellido Paterno:", max_length=200,blank= True, null=True)
    Apellido_materno_cliente = models.CharField("Apellido Materno:", max_length=200,blank= True, null=True)
    observaciones = models.CharField("Observaciones:", max_length=100, null=True)
    tipo_cambio_venta = models.DecimalField(max_digits=15,decimal_places=2,default=0)
    monto_dolar_vendido = models.DecimalField(max_digits=15,decimal_places=2)
    monto_soles_cobrado = models.DecimalField(max_digits=15,decimal_places=2)
    aux1=models.CharField("aux1:",max_length=30,null=True)
    aux2=models.CharField("aux2:",max_length=15,null=True)
    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Venta de Dolar"
        verbose_name = "Ventas de Dolar"
    def __str__(self):
        return str(self.id)

class SolicitudAnulacionDolar(models.Model):
    id = models.AutoField("ID", primary_key=True)
    fecha = models.DateTimeField("Fecha:",auto_now=True)
    id_CompraVenta_dolar = models.CharField("ID Compra Venta:", max_length=10, null=False)
    tablaRelacional = models.CharField("Tabla Relacional:", max_length=25)
    codigo_aut=models.CharField("Codigo:", max_length=10, null=True)
    estado=models.CharField("Estado",max_length=20)#pendiente,autorizado
    id_user_solicitante=models.ForeignKey(Personal,verbose_name="ID Personal", on_delete=models.CASCADE)
    id_caja_solicitante=models.ForeignKey(Cajas,verbose_name='Id:', 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_anu = models.DateTimeField("Fecha Ret:",null=True)
    observaciones = models.CharField("Obs:", max_length=100, null=True)
    aux1=models.CharField("aux1:",max_length=20)#autorizado-idGerente
    aux2=models.CharField("aux2:",max_length=15)
    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Solicitudes de anulacion de dolar"
        verbose_name = "Solicitud de anulacion de dolar"
    def __str__(self):
        return str(self.id)
#********** envio de dinero en caja material ************
class EnvioCajaCajaD(models.Model):
    """ envio de caja """
    id = models.AutoField("ID:", primary_key=True)
    fecha = models.DateTimeField("Fecha:",auto_now=True)
    idCajaHaber=models.ForeignKey(TCajaHaberCambio,verbose_name="ID Caja Haber", on_delete=models.CASCADE)#monto + comision
    id_CajaDestino = models.ForeignKey(Cajas,verbose_name='Id:', on_delete=models.CASCADE)
    monto = models.DecimalField(max_digits=15,decimal_places=2,default=0)
    comision = models.DecimalField(max_digits=15,decimal_places=2,default=0)
    moneda = models.CharField("Moneda:",max_length=20)
    conceptoDetalle=models.CharField("Detalle:",max_length=250,null=True)
    observaciones = models.CharField("Observaciones:", max_length=100, null=True)
    estado=models.CharField("Estado",max_length=20)

    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Envios Caja Dolar"
        verbose_name = "Envio Caja Dolar"

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

class RecepcionEnvioCajaCajaD(models.Model):
    """ envio oficina a oficina """
    id = models.AutoField("ID:", primary_key=True)
    fecha = models.DateTimeField("Fecha:",auto_now=True)
    idCajaDebe=models.ForeignKey(TCajaDebeCambio,verbose_name="ID Caja Debe", on_delete=models.CASCADE)#id de ingreso
    idEnvioCajaCaja = models.ForeignKey(EnvioCajaCajaD,verbose_name='Id:', on_delete=models.CASCADE)
    monto = models.DecimalField(max_digits=15,decimal_places=2,default=0)
    moneda = models.CharField("Moneda:",max_length=20)
    conceptoDetalle=models.CharField("Detalle:",max_length=250,null=True)
    observaciones = models.CharField("Observaciones:", max_length=100, null=True)
    estado=models.CharField("Estado",max_length=20)

    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Recepciones Caja Dolar"
        verbose_name = "Recepcion Caja Dolar"

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


class EnvioCajaCajaAnulacionD(models.Model):
    id = models.AutoField("ID:", primary_key=True)
    fecha = models.DateTimeField("Fecha:",auto_now=True)
    id_EnvioCaja = models.ForeignKey(EnvioCajaCajaD,verbose_name='Id:', on_delete=models.CASCADE)
    idCajaDebe=models.ForeignKey(TCajaDebeCambio,verbose_name="ID Caja Debe", on_delete=models.CASCADE)#id de ingreso
    anulado=models.CharField("anulado:",max_length=5,null=True)
    aux1=models.CharField("aux1:",max_length=20,null=True)
    aux2=models.CharField("aux2:",max_length=30,null=True)

    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Sol Anulacion Envios Caja Dolar"
        verbose_name = "Sol Anulacion Envio Caja Dolar"

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

#**********************************************************
#************** material **************************
class IngresoM(models.Model):
    id = models.AutoField("ID:", primary_key=True)
    id_debe = models.ForeignKey(TCajaDebeM,verbose_name='Id:', on_delete=models.CASCADE)
    id_cliente = models.IntegerField(default=0,null=False)
    estado = models.CharField("Estado:",max_length=20,null=False)
    observaciones = models.CharField("Observaciones:",max_length=250,null=True)
    concepto = models.CharField("concepto:",max_length=150,null=True)
    afavor = models.CharField("afavor:",max_length=150,null=True)
    dni_afavor = models.CharField("dni afavor:",max_length=12,null=True)
    aux1=models.CharField("Aux1:",max_length=10,blank=True,null=True)
    aux2=models.CharField("Aux2:",max_length=10,blank=True,null=True)
    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Ingresos"
        verbose_name = "Ingreso"

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

class EgresoM(models.Model):
    id = models.AutoField("ID:", primary_key=True)
    id_haber = models.ForeignKey(TCajaHaberM,verbose_name='Id:', on_delete=models.CASCADE)
    id_cliente = models.IntegerField(default=0,null=False)
    estado = models.CharField("Estado:",max_length=20,null=False)
    observaciones = models.CharField("Observaciones:",max_length=250,null=True)
    concepto = models.CharField("concepto:",max_length=150,null=True)
    afavor = models.CharField("afavor:",max_length=150,null=True)
    dni_afavor = models.CharField("dni afavor:",max_length=12,null=True)
    aux1=models.CharField("Aux1:",max_length=10,blank=True,null=True)
    aux2=models.CharField("Aux2:",max_length=10,blank=True,null=True)
    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Egresos"
        verbose_name = "Egreso"

    def __str__(self):
        return str(self.id)
        
class NroReciboCajaMaterial(models.Model):
    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)
    nroREM = models.IntegerField("Nro Recibo Egreso:")
    nroRIM = models.IntegerField("Nro Recibo Ingreso:")
    nroRE = models.IntegerField("Nro Recibo Egreso:")
    nroRI = models.IntegerField("Nro Recibo Ingreso:")
    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Números de Recibos Material"
        verbose_name = "Número de Recibo Material"

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

class SaldoDisponibleCajaMaterial(models.Model):
    id = models.AutoField("ID:", primary_key=True)
    fecha = models.DateTimeField("Fecha actualizacion:",auto_now=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)
    saldo_material = models.DecimalField(max_digits=15,decimal_places=3,default=0)
    saldo_soles = models.DecimalField(max_digits=15,decimal_places=2,default=0)
    saldo_dolares=models.DecimalField(max_digits=15,decimal_places=2,default=0)
    aux1=models.CharField("aux1:",max_length=60,blank=True)
    aux2=models.CharField("aux2:",max_length=15,blank=True)

    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Saldos Cajas Material"
        verbose_name = "Saldo Caja Material"

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

class SaldoInicialCajaMaterial(models.Model):
    id = models.AutoField("ID:", primary_key=True)
    fecha = models.DateTimeField("Fecha actualizacion:",auto_now=True)
    id_caja = models.ForeignKey(Cajas,verbose_name='Id:', on_delete=models.CASCADE)
    saldo_material = models.DecimalField(max_digits=15,decimal_places=3,default=0)
    saldo_soles = models.DecimalField(max_digits=15,decimal_places=2,default=0)
    saldo_dolares=models.DecimalField(max_digits=15,decimal_places=2,default=0)
    aux1=models.CharField("aux1:",max_length=60,blank=True)
    aux2=models.CharField("aux2:",max_length=15,blank=True)

    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Saldos Iniciales CajaMaterial"
        verbose_name = "Saldo Inicial CajaMaterial"

    def __str__(self):
        return str(self.id)
#cierre de caja dolares
class CajaCierreMaterial(models.Model):#transferencias
    """ cierre de  cajas """
    id = models.AutoField("ID:", primary_key=True)
    fecha = models.DateTimeField("Fecha Cierre:",auto_now=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)
    totalDebeSoles = models.DecimalField(max_digits=15,decimal_places=2,default=0)
    totalDebeDolares= models.DecimalField(max_digits=15,decimal_places=2,default=0)
    totalDebeMaterial= models.DecimalField(max_digits=15,decimal_places=3,default=0)
    totalDebeDolarizado = models.DecimalField(max_digits=15,decimal_places=2,default=0)
    totalHaberSoles = models.DecimalField(max_digits=15,decimal_places=2,default=0)
    totalHaberDolares = models.DecimalField(max_digits=15,decimal_places=2,default=0)
    totalHaberMaterial = models.DecimalField(max_digits=15,decimal_places=3,default=0)
    totalHaberDolarizado = models.DecimalField(max_digits=15,decimal_places=2,default=0)
    observaciones = models.CharField("Observaciones:", max_length=100, null=True)
    saldo_soles = models.DecimalField(max_digits=15,decimal_places=2,default=0)
    saldo_dolares=models.DecimalField(max_digits=15,decimal_places=2,default=0)
    saldo_material=models.DecimalField(max_digits=15,decimal_places=2,default=0)
    fechaDesde = models.DateField("Fecha desde:")
    fechaHasta = models.DateField("Fecha hasta:")
    estado=models.CharField("Estado",max_length=20,null=True)#estado
    saldoInicial_soles = models.DecimalField(max_digits=15,decimal_places=2,default=0)
    saldoInicial_dolares=models.DecimalField(max_digits=15,decimal_places=2,default=0)
    saldoInicial_material=models.DecimalField(max_digits=15,decimal_places=2,default=0)
    soles_sistema=models.DecimalField(max_digits=15,decimal_places=3,default=0)#saldo actual
    dolares_sistema=models.DecimalField(max_digits=15,decimal_places=3,default=0)
    material_sistema=models.DecimalField(max_digits=15,decimal_places=3,default=0)
    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Cierres Cajas"
        verbose_name = "Cierre Caja"

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

#compras y ventas
class TCompraMaterial(models.Model):
    id = models.AutoField("ID:", primary_key=True)
    idCajaMaterialDebe=models.ForeignKey(TCajaMaterialDebe,verbose_name="ID Caja Debe", on_delete=models.CASCADE)#id de ingreso
    idCajaHaber = models.ForeignKey(TCajaHaberM, verbose_name="ID Caja Haber:", on_delete=models.CASCADE)
    fecha = models.DateTimeField("Fecha:",auto_now=True)
    id_cliente = models.IntegerField(default=0,null=False)
    observaciones = models.CharField("Observaciones:", max_length=100, null=True)
    descuento = models.DecimalField(max_digits=15,decimal_places=2,default=0)#descuento
    moneda = models.CharField("Moneda:",max_length=20)
    Peso_gramos=models.DecimalField(max_digits=15,decimal_places=2,default=0)
    Precio_gramo=models.DecimalField(max_digits=15,decimal_places=2,default=0)
    Total_pagar=models.DecimalField(max_digits=15,decimal_places=2,default=0)
    adelanto=models.DecimalField(max_digits=15,decimal_places=2,default=0)#agregado 25/01/2019
    
    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Compra de Material"
        verbose_name = "Compras de Material"

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

#adelanto compra material
class AdelantoCompraM(models.Model):
    id = models.AutoField("ID:", primary_key=True)
    idCajaHaber = models.ForeignKey(TCajaHaberM, verbose_name="ID Caja Haber:", on_delete=models.CASCADE)
    fecha = models.DateTimeField("Fecha:",auto_now=True)
    id_cliente = models.IntegerField(default=0,null=False)
    detalle = models.CharField("Detalle:", max_length=250, null=True)
    cliente_sobre = models.CharField("Cliente:", max_length=50, null=True)#sobrenombre
    observaciones = models.CharField("Observaciones:", max_length=100, null=True)
    moneda = models.CharField("Moneda:",max_length=20)
    monto=models.DecimalField(max_digits=15,decimal_places=2,default=0)
    estado=models.CharField("Estado",max_length=20)
    id_compra = models.IntegerField(default=0,null=False)
    estado_ade = models.BooleanField(verbose_name="Estado Adelanto:",default=True)
    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Adelantos Compra Material"
        verbose_name = "Adelanto Compra Material"

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

class TVentaMaterial(models.Model):
    id = models.AutoField("ID:", primary_key=True)
    idCajaMaterialHaber=models.ForeignKey(TCajaMaterialHaber,verbose_name="ID Caja Haber", on_delete=models.CASCADE)
    idCajaDebe=models.ForeignKey(TCajaDebeM,verbose_name="ID Caja Debe", on_delete=models.CASCADE)#id de ingreso
    fecha = models.DateTimeField("Fecha:",auto_now=True)
    id_cliente = models.IntegerField(default=0,null=False)
    observaciones = models.CharField("Observaciones:", max_length=100, null=True)
    descuento = models.DecimalField(max_digits=15,decimal_places=2,default=0)
    moneda = models.CharField("Moneda:",max_length=20)
    Peso_gramos=models.DecimalField(max_digits=15,decimal_places=2,default=0)
    Precio_gramo=models.DecimalField(max_digits=15,decimal_places=2,default=0)
    Total_cobrar=models.DecimalField(max_digits=15,decimal_places=2,default=0)

    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Venta de Material"
        verbose_name = "Ventas de Material"

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


class EnvioMaterialCajaCaja(models.Model):
    id = models.AutoField("ID:", primary_key=True)
    fecha = models.DateTimeField("Fecha:",auto_now=True)
    idCajaMaterialHaber=models.ForeignKey(TCajaMaterialHaber,verbose_name="ID Caja Haber", on_delete=models.CASCADE)
    id_CajaDestino = models.ForeignKey(Cajas,verbose_name='Id:', on_delete=models.CASCADE)
    Peso_gramos=models.DecimalField(max_digits=15,decimal_places=2,default=0)
    conceptoDetalle=models.CharField("Detalle:",max_length=250,null=True)
    observaciones = models.CharField("Observaciones:", max_length=100, null=True)
    estado=models.CharField("Estado",max_length=20)

    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Envios Cajas Material"
        verbose_name = "Envio Caja Material"

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

class RecepcionMaterialCajaCaja(models.Model):
    id = models.AutoField("ID:", primary_key=True)
    fecha = models.DateTimeField("Fecha:",auto_now=True)
    idCajaMaterialDebe=models.ForeignKey(TCajaMaterialDebe,verbose_name="ID Caja Debe", on_delete=models.CASCADE)#id de ingreso
    id_CajaOrigen = models.ForeignKey(Cajas,verbose_name='Id:', on_delete=models.CASCADE)
    id_EnvioCaja = models.ForeignKey(EnvioMaterialCajaCaja,verbose_name='Id:', on_delete=models.CASCADE)
    Peso_gramos=models.DecimalField(max_digits=15,decimal_places=2,default=0)
    conceptoDetalle=models.CharField("Detalle:",max_length=250,null=True)
    observaciones = models.CharField("Observaciones:", max_length=100, null=True)
    estado=models.CharField("Estado",max_length=20)

    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Recepciones Cajas Material"
        verbose_name = "Recepcion Caja Material"

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

class EnvioMaterialCajaCajaAnulacion(models.Model):
    id = models.AutoField("ID:", primary_key=True)
    fecha = models.DateTimeField("Fecha:",auto_now=True)
    id_EnvioCaja = models.ForeignKey(EnvioMaterialCajaCaja,verbose_name='Id:', on_delete=models.CASCADE)
    idCajaMaterialDebe=models.ForeignKey(TCajaMaterialDebe,verbose_name="ID Caja Debe", on_delete=models.CASCADE)#id de ingreso
    anulado=models.CharField("anulado:",max_length=5,null=True)
    aux1=models.CharField("aux1:",max_length=20,null=True)
    aux2=models.CharField("aux2:",max_length=30,null=True)

    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Sol Anulacion Envio Oficina"
        verbose_name = "Sol Anulacion Envio Oficinas"

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

#********** envio de dinero en caja material ************
class EnvioCajaCajaM(models.Model):
    """ envio de caja """
    id = models.AutoField("ID:", primary_key=True)
    fecha = models.DateTimeField("Fecha:",auto_now=True)
    idCajaHaber=models.ForeignKey(TCajaHaberM,verbose_name="ID Caja Haber", on_delete=models.CASCADE)#monto + comision
    id_CajaDestino = models.ForeignKey(Cajas,verbose_name='Id:', on_delete=models.CASCADE)
    monto = models.DecimalField(max_digits=15,decimal_places=2,default=0)
    comision = models.DecimalField(max_digits=15,decimal_places=2,default=0)
    moneda = models.CharField("Moneda:",max_length=20)
    conceptoDetalle=models.CharField("Detalle:",max_length=250,null=True)
    observaciones = models.CharField("Observaciones:", max_length=100, null=True)
    estado=models.CharField("Estado",max_length=20)

    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Envios Cajas M"
        verbose_name = "Envio Caja M"

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

class RecepcionEnvioCajaCajaM(models.Model):
    """ envio oficina a oficina """
    id = models.AutoField("ID:", primary_key=True)
    fecha = models.DateTimeField("Fecha:",auto_now=True)
    idCajaDebe=models.ForeignKey(TCajaDebeM,verbose_name="ID Caja Debe", on_delete=models.CASCADE)#id de ingreso
    idEnvioCajaCaja = models.ForeignKey(EnvioCajaCajaM,verbose_name='Id:', on_delete=models.CASCADE)
    monto = models.DecimalField(max_digits=15,decimal_places=2,default=0)
    moneda = models.CharField("Moneda:",max_length=20)
    conceptoDetalle=models.CharField("Detalle:",max_length=250,null=True)
    observaciones = models.CharField("Observaciones:", max_length=100, null=True)
    estado=models.CharField("Estado",max_length=20)

    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Recepciones Cajas M"
        verbose_name = "Recepcion Caja M"

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


class EnvioCajaCajaAnulacionM(models.Model):
    id = models.AutoField("ID:", primary_key=True)
    fecha = models.DateTimeField("Fecha:",auto_now=True)
    id_EnvioCaja = models.ForeignKey(EnvioCajaCajaM,verbose_name='Id:', on_delete=models.CASCADE)
    idCajaDebe=models.ForeignKey(TCajaDebeM,verbose_name="ID Caja Debe", on_delete=models.CASCADE)#id de ingreso
    anulado=models.CharField("anulado:",max_length=5,null=True)
    aux1=models.CharField("aux1:",max_length=20,null=True)
    aux2=models.CharField("aux2:",max_length=30,null=True)

    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Sol Anulacion Envios Cajas M"
        verbose_name = "Sol Anulacion Envio Caja M"

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


#****************** pasar efectivo *********************
class TrasladoEfectivo(models.Model):#entre cajas transferencia dolar material
    """Saldo inicial de caja cambio de moneda"""
    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)
    monto = models.DecimalField(max_digits=15,decimal_places=1,default=0)
    moneda = models.CharField("Moneda:",max_length=20)#soles , dolares
    tipo_cambio= models.DecimalField(max_digits=15,decimal_places=3,default=0)
    origen = models.CharField("Origen:",max_length=20)# transferencia,dolar,material
    id_haber_origen=models.IntegerField(default=0)
    destino = models.CharField("Destino:",max_length=20)# transferencia,dolar,material
    id_debe_destino=models.IntegerField(default=0)
    observaciones=models.CharField("Observaciones:",max_length=100)
    estado=models.CharField("Estado",max_length=20)#enviado
    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Traslado Efectivos"
        verbose_name = "Traslado Efectivo"

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

#********************* cuentas *****************************
class CtaAhorros(models.Model):#PLAZO FIJO
    id = models.AutoField("ID:", primary_key=True)
    id_cliente = models.ForeignKey(Cliente,verbose_name='Id Cliente:', on_delete=models.CASCADE)
    id_oficina = models.ForeignKey(Oficina,verbose_name='Id:', on_delete=models.CASCADE)
    id_caja = models.ForeignKey(Cajas,verbose_name='Id:', on_delete=models.CASCADE)
    id_usuario = models.ForeignKey(Personal,verbose_name='Id:', on_delete=models.CASCADE)
    saldo = models.DecimalField("Saldo:",max_digits=15,decimal_places=2)
    interes = models.DecimalField("Interes:",max_digits=15,decimal_places=2,null=True)#anual #plazo fijo
    plazo=models.CharField("Plazo:",max_length=10,null=True)
    tipo_plazo=models.CharField("Tipo Plazo:",max_length=10,null=True)#anual, meses,#dias,(a,m,d)
    fechaApertura= models.DateTimeField("Fecha apertura:",auto_now=True)
    fechaCierre = models.DateTimeField("Fecha cierre:",null =True)
    estado = models.CharField("Estado:",max_length=20,null=False)
    observaciones = models.CharField("Observaciones:",max_length=250,null=True)
    privadoOficina = models.CharField("Privado Oficina:", max_length=30, null=True)
    tipoCuenta = models.CharField("Tipo Cuenta:", max_length=30, null=True)
    claveAcceso= models.CharField("Clave Acceso:", max_length=30, null=True)
    nro_cta= models.CharField("Nro cuenta:", max_length=15, null=True)
    moneda= models.CharField("Moneda:", max_length=15, null=True)
    interesGanado =models.DecimalField("Interes Ganado:",max_digits=15,decimal_places=2,default=0)
    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Cuentas Ahorros"
        verbose_name = "Cuenta Ahorro"

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

class CtaAhorrosMovimientos(models.Model):#PLAZO FIJO MOVIMIENTO
    id = models.AutoField("ID:", primary_key=True)
    id_ctaahorros = models.ForeignKey(CtaAhorros,verbose_name='Id Cuenta Ahorros:', on_delete=models.CASCADE)
    idDebeHaber= models.CharField("Debe Haber:", max_length=15, null=True)
    tabla=models.CharField("Tabla:", max_length=100, null=True)#debe, #haber
    fecha= models.DateTimeField("Fecha:",auto_now=True)
    montoDeposito = models.DecimalField("Monto Depósito:",max_digits=15,decimal_places=2,default=0)
    montoRetiro = models.DecimalField("Monto Retiro:",max_digits=15,decimal_places=2,default=0)
    saldo = models.DecimalField("Saldo:",max_digits=15,decimal_places=2,null=False)
    moneda = models.CharField("Moneda:",max_length=20)#soles dolares
    tipo_cambio= models.DecimalField(max_digits=15,decimal_places=3,default=0)
    interes = models.DecimalField("Interes:",max_digits=15,decimal_places=2,default=0)
    plazo=models.CharField("Plazo:",max_length=10,null=True)
    tipo_plazo=models.CharField("Tipo Plazo:",max_length=10,null=True)#anual, meses,
    tiempo_interes=models.CharField("Plazo:",max_length=10,null=True)#1,2,3,...
    tipo_plazo_interes=models.CharField("Tipo Plazo:",max_length=10,null=True)#anual, meses,dias
    fechaAux = models.DateTimeField("Fecha Aux:",auto_now=True)
    conceptoDetalle=models.CharField("Detalle:",max_length=250,null=True)
    subMontoDeposito = models.DecimalField("Sub Monto Deposito:",max_digits=15,decimal_places=2,null=True)
    interesGanado =models.DecimalField("Interes Ganado:",max_digits=15,decimal_places=2,null=True)
    observacionesMovimientos = models.CharField("Observaciones Movimientos:", max_length=250, null=True)
    comision=models.DecimalField("Comision:",max_digits=15,decimal_places=2,null=True)
    nro_operacion=  models.IntegerField("Nro Operacion", default=1)#numero de operacion
    penalidad =models.DecimalField("Penalidad:",max_digits=15,decimal_places=2,default=0)
    idDepositoAhorro= models.CharField("Deposito:", max_length=15, null=True)#deposito afectado, retiro de capital o retiro de interes, #CtaAhorrosMovimientos
    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Cuentas Ahorros Movimientos"
        verbose_name = "Cuenta Ahorro Movimiento"

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

class CtaCte(models.Model):
    """ cuentas corrientes o cuentas movibles """
    id = models.AutoField("ID:", primary_key=True)
    id_cliente = models.ForeignKey(Cliente,verbose_name='Id Cliente:', on_delete=models.CASCADE)  
    id_oficina = models.ForeignKey(Oficina,verbose_name='Id:', on_delete=models.CASCADE)
    id_caja = models.ForeignKey(Cajas,verbose_name='Id:', on_delete=models.CASCADE)
    id_usuario = models.ForeignKey(Personal,verbose_name='Id:', on_delete=models.CASCADE)
    saldo = models.DecimalField("Saldo:",max_digits=15,decimal_places=2)
    fechaApertura= models.DateTimeField("Fecha apertura:",auto_now=True)
    fechaCierre = models.DateTimeField("Fecha cierre:",null=True)
    estado = models.CharField("Estado:",max_length=20,null=False)
    observaciones = models.CharField("Observaciones:",max_length=250,null=True)
    privadoOficina = models.CharField("Privado Oficina:", max_length=30, null=True)
    tipoCuenta = models.CharField("Tipo Cuenta:", max_length=30, null=True)
    claveAcceso= models.CharField("Clave Acceso:", max_length=30, null=True)
    nro_cta= models.CharField("Nro cuenta:", max_length=15, null=True)
    moneda= models.CharField("Moneda:", max_length=15, null=True)

    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Cuentas Corrientes"
        verbose_name = "Cuenta Corriente"

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

class CtaCteMovimientos(models.Model):
    id = models.AutoField("ID:", primary_key=True)
    id_ctacte = models.ForeignKey(CtaCte,verbose_name='Id Cuenta Corriente:', on_delete=models.CASCADE)
    idDebeHaber= models.CharField("Debe Haber:", max_length=15, null=True)
    tabla=models.CharField("Tabla:", max_length=100, null=True)#debe, #haber
    fecha= models.DateTimeField("Fecha:",auto_now=True)
    montoDeposito = models.DecimalField("Monto Depósito:",max_digits=15,decimal_places=2,default=0)
    montoRetiro = models.DecimalField("Monto Retiro:",max_digits=15,decimal_places=2,default=0)
    saldo = models.DecimalField("Saldo:",max_digits=15,decimal_places=2,null=False)
    observacionesMovimientos = models.CharField("Observaciones Movimientos:", max_length=250, null=True)
    tipoDocumento= models.CharField("Tipo Documento:", max_length=6, null=True)
    nroRecibo=models.IntegerField("Nro Recibo:",null=True)
    conceptoDetalle=models.CharField("Detalle:",max_length=250,null=True)
    comision=models.DecimalField("Comision:",max_digits=15,decimal_places=2,default=0)
    tipoCambio=models.DecimalField("Tipo Cambio:",max_digits=15,decimal_places=4,default=0)
    moneda=models.CharField("Moneda:", max_length=15, null=True)
    aux1=models.CharField("Aux1:", max_length=20, null=True)
    aux2=models.CharField("Aux2:", max_length=20, null=True)
    ##sobregiro version 1 solo se considerara en periodo de dias
    #sobregirado=models.CharField("Sobregirado:", max_length=2, null=True)#si , no
    #monto_sobregiro=models.DecimalField("Monto Sobregiro:",max_digits=15,decimal_places=2,default=0)
    #interes = models.DecimalField("Interes:",max_digits=15,decimal_places=2,default=0)
    #plazo=models.IntegerField("Plazo:",default=0)
    #tipo_plazo=models.CharField("Tipo Plazo:",max_length=10,null=True)#d(dias),a(anos), m(meses)
    #fecha_pago = models.DateField("Fecha Pago:",null=True)
    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Cuentas Corrientes Movimientos"
        verbose_name = "Cuenta Corriente Movimiento"

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



#----------- cta cte material ----------
class CtaCteMaterial(models.Model):
    """ cuentas corrientes o cuentas movibles """
    id = models.AutoField("ID:", primary_key=True)
    id_cliente = models.ForeignKey(Cliente,verbose_name='Id Cliente:', on_delete=models.CASCADE)  
    id_oficina = models.ForeignKey(Oficina,verbose_name='Id:', on_delete=models.CASCADE)
    id_caja = models.ForeignKey(Cajas,verbose_name='Id:', on_delete=models.CASCADE)
    id_usuario = models.ForeignKey(Personal,verbose_name='Id:', on_delete=models.CASCADE)
    saldo = models.DecimalField("Saldo:",max_digits=15,decimal_places=4)
    fechaApertura= models.DateTimeField("Fecha apertura:",auto_now=True)
    fechaCierre = models.DateTimeField("Fecha cierre:",null=True)
    estado = models.CharField("Estado:",max_length=20,null=False)#activo,sobregirado
    observaciones = models.CharField("Observaciones:",max_length=250,null=True)
    privadoOficina = models.CharField("Privado Oficina:", max_length=30, null=True)
    tipoCuenta = models.CharField("Tipo Cuenta:", max_length=30, null=True)
    claveAcceso= models.CharField("Clave Acceso:", max_length=30, null=True)
    nro_cta= models.CharField("Nro cuenta:", max_length=15, null=True)

    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Cuentas Corrientes Material"
        verbose_name = "Cuenta Corriente Material"

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

class CtaCteMovimientosMaterial(models.Model):
    id = models.AutoField("ID:", primary_key=True)
    id_ctacte = models.ForeignKey(CtaCteMaterial,verbose_name='Id Cuenta Corriente:', on_delete=models.CASCADE)
    idDebeHaber= models.CharField("Debe Haber:", max_length=15, null=True)
    tabla=models.CharField("Tabla:", max_length=100, null=True)#debe, #haber
    fecha= models.DateTimeField("Fecha:",auto_now=True)
    montoDeposito = models.DecimalField("Monto Depósito:",max_digits=15,decimal_places=3,default=0)
    montoRetiro = models.DecimalField("Monto Retiro:",max_digits=15,decimal_places=3,default=0)
    saldo = models.DecimalField("Saldo:",max_digits=15,decimal_places=2,null=False)
    observacionesMovimientos = models.CharField("Observaciones Movimientos:", max_length=250, null=True)
    tipoDocumento= models.CharField("Tipo Documento:", max_length=6, null=True)
    nroRecibo=models.IntegerField("Nro Recibo:",null=True)
    conceptoDetalle=models.CharField("Detalle:",max_length=250,null=True)
    comision=models.DecimalField("Comision:",max_digits=15,decimal_places=2,default=0)
    precio=models.DecimalField("Precio:",max_digits=15,decimal_places=4,default=0)
    #moneda=models.CharField("Moneda:", max_length=15, null=True)
    aux1=models.CharField("Aux1:", max_length=20, null=True)
    aux2=models.CharField("Aux2:", max_length=20, null=True)
    #sobregiro version 1 solo se considerara en periodo de dias
    sobregirado=models.CharField("Sobregirado:", max_length=2, null=True)#si , no
    monto_sobregiro=models.DecimalField("Monto Sobregiro:",max_digits=15,decimal_places=2,default=0)
    interes = models.DecimalField("Interes:",max_digits=15,decimal_places=2,default=0)
    plazo=models.IntegerField("Plazo:",default=0)
    tipo_plazo=models.CharField("Tipo Plazo:",max_length=10,null=True)#d(dias),a(anos), m(meses)
    fecha_pago = models.DateField("Fecha Pago:",null=True)
    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Cuentas Corrientes Movimientos Material"
        verbose_name = "Cuenta Corriente Movimiento Material"

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

#nro de cuenta
class cta_bancos(models.Model):
    id = models.AutoField("ID:", primary_key=True)
    id_cliente = models.ForeignKey(Cliente,verbose_name='Id:', on_delete=models.CASCADE)
    banco = models.CharField("Banco", max_length=25,blank= True)#banco de nacion, interbank,...
    tipo_operacion = models.CharField("Tipo", max_length=10,blank= True)#deposito, giro
    cel_referencia = models.CharField("Celular Referencia", max_length=15,blank= True)# telefono de referencia
    cel_referencia2 = models.CharField("Celular Referencia 2", max_length=15,null=True)
    cta_dni = models.CharField("Cuenta / DNI", max_length=25, null=True)#cuenta o dni de beneficiario
    nro_operacion = models.CharField("Nro Operacion", max_length=20,blank= True,null=True)
    nro_giro = models.CharField("Nro Giro", max_length=20,blank= True,null=True)
    clave = models.CharField("Clave", max_length=15,blank= True,null=True)
    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Cuenta Bancos"
        verbose_name = "Cuenta Bancos"

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

class SolicitudTransferenciaBancoa(models.Model):
    id = models.AutoField("ID:", primary_key=True)# id solicitud
    idCajaDebe = models.ForeignKey(TCajaDebe,verbose_name="ID Caja Debe", on_delete=models.CASCADE)#id de ingreso
    id_cliente = models.ForeignKey(Cliente, verbose_name="ID Cliente:", on_delete=models.CASCADE)#id id_cliente # solicitante
    #id_oficina = models.ForeignKey(Oficina,verbose_name='Id:', on_delete=models.CASCADE)#id oficina destino
    comision = models.DecimalField(max_digits=15,decimal_places=2,default=0)#comicion
    monto = models.DecimalField(max_digits=15,decimal_places=2)#monto de transferencia
    nombre_beneficiado = models.CharField("Nombres Beneficiado:", max_length=100,blank= True)
    paterno_beneficiado = models.CharField("Apellido Paterno Beneficiado:", max_length=200,blank= True)
    materno_beneficiado = models.CharField("Apellido Materno Beneficiado:", max_length=200,blank= True)
    dni_beneficiado = models.CharField("DNI Beneficiado:", max_length=11,null=True)
    id_beneficiario = models.IntegerField("ID beneficiario:",default=0)# id del cliente #obligatorio
    observaciones = models.CharField("Observaciones:", max_length=250, null=True)
    otros_conceptos=models.CharField("Otros Conceptos:", max_length=250,null=True)
    monto_conceptos=models.DecimalField(max_digits=15,decimal_places=2,default=0)#comicion bancos
    aux1= models.CharField("aux1:", max_length=20,blank= True,null=True)
    #dniMenor=models.CharField("dniMenor:", max_length=2,blank= True,null=True)#si no
    #datos de banco
    nroCta = models.CharField("nroCta:", max_length=25,blank= True,null=True)#nro cuenta, cuenta o dni de beneficiario
    banco = models.CharField("Banco", max_length=25,blank= True)#banco de nacion, interbank,... BCP, BANCO DE LA NACION
    tipo_operacion = models.CharField("Tipo", max_length=10,blank= True)#deposito, giro
    cel_referencia = models.CharField("Celular Referencia", max_length=15,blank= True)# telefono de referencia
    cel_referencia2 = models.CharField("Celular Referencia 2", max_length=15,null=True)
    nro_operacion = models.CharField("Nro Operacion", max_length=20,blank= True)
    nro_giro = models.CharField("Nro Giro", max_length=20,blank= True)
    clave = models.CharField("Clave", max_length=15,blank= True)
    es_privado= models.BooleanField(verbose_name="Es Privado:",default=False)
    estado_transferencia=models.CharField("Estado", max_length=15,blank= True)#activo, procesado
    id_banco = models.IntegerField("Id Banco:",default=0)# permite registrar el banco en caso que se desee procesar la transferencia
    id_operacion = models.IntegerField("Id Operacion:",default=0) # id operacion agente, en caso de operaciones agente
    es_agente = models.BooleanField("Es agente:",default=False)
    #/datos de banco
    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Solicitudes de Transferencias Bancos"
        verbose_name = "Solicitud de Transferencia Banco"

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

class SolicitudDesbloqueoSTBancos(models.Model):#se quito scucursal,caja origen
    """docsrting for Service"""
    id = models.AutoField("ID:", primary_key=True)# id solicitud
    id_solicitud =models.ForeignKey(SolicitudTransferenciaBancoa,verbose_name="ID Solicitud ST", on_delete=models.CASCADE)#id de solicitud transferencia bancos
    id_oficina = models.ForeignKey(Oficina,verbose_name='Id:', on_delete=models.CASCADE)#id oficina q realiza la solicitud
    id_caja = models.ForeignKey(Cajas,verbose_name='Id:', on_delete=models.CASCADE)#id caja que realiza la solicitud
    id_personal=models.ForeignKey(Personal,verbose_name="ID Personal", on_delete=models.CASCADE)
    fecha = models.DateTimeField("Fecha sol desbloqueo:",auto_now=True)
    tabla = models.CharField("Tabla operacion:", max_length=30,null=True)
    autorizado_por = models.CharField("Autorizado por", max_length=30,null=True) #oficina y personal
    estadoAutorizacion=models.CharField("Estado Autorizacion",max_length=20) #pendiente, autorizado
    echa_aut = models.DateTimeField("Fecha Aut:",null=True)#autorizado
    fecha_op = models.DateTimeField("Fecha Ret:",null=True)#utilizacion
    activo = models.BooleanField(verbose_name="Estado Activo:",default=True)

    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Solicitudes de Desbloqueo ST Bancos"
        verbose_name = "Solicitud de Desbloqueo ST Bancos"

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

class TransferenciaBancoProcesado(models.Model):
    """docsrting for Service"""
    id = models.AutoField("ID", primary_key=True)
    fecha = models.DateTimeField("Fecha",auto_now=True)
    id_solicitud_transferencia = models.ForeignKey(SolicitudTransferenciaBancoa, verbose_name="ID Solicitud Transferencia Banco:", on_delete=models.CASCADE)
    id_personal=models.ForeignKey(Personal,verbose_name="ID Personal", on_delete=models.CASCADE)
    id_caja = models.ForeignKey(Cajas,verbose_name='Id:', on_delete=models.CASCADE)
    observaciones = models.CharField("Observaciones:", max_length=250, null=True)
    estado= models.BooleanField(verbose_name="Estado transaccion:",default=True)

    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Proceso de Transferencias Bancos"
        verbose_name = "Proceso de Transferencia Banco"

    def __str__(self):
        return str(self.id_solicitud_transferencia.pk)


class ExtornoTransferenciaBancos(models.Model):
    """docsrting"""
    id = models.AutoField("ID", primary_key=True)
    idCajaHaber = models.ForeignKey(TCajaHaber, verbose_name="ID Caja Haber:", on_delete=models.CASCADE)
    id_solicitud_transferencia = models.ForeignKey(SolicitudTransferenciaBancoa, verbose_name="ID Solicitud Transferencia:", on_delete=models.CASCADE)
    observaciones = models.CharField("Observaciones:", max_length=100, null=True)

    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Extornos de Transferencias Bancos"
        verbose_name = "Extorno de Transferencia Banco"

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

class DepositoCtaTransferenciaProcesado(models.Model):
    """ deposito a cuenta por concepto de transferencia procesado, este deposito no genera ingreso """
    id = models.AutoField("ID:", primary_key=True)
    fecha = models.DateTimeField("Fecha:",auto_now=True)
    id_procesado = models.ForeignKey(TransferenciaBancoProcesado,verbose_name="ID Procesado", on_delete=models.CASCADE)
    id_movimiento = models.ForeignKey(CtaCteMovimientos_main,verbose_name='Id Movimiento:', on_delete=models.CASCADE)
    id_caja = models.ForeignKey(Cajas,verbose_name='Id:', on_delete=models.CASCADE)
    id_personal = models.ForeignKey(Personal, verbose_name="ID Personal:", on_delete=models.CASCADE)#
    id_oficina = models.ForeignKey(Oficina,verbose_name='Id Oficina:', on_delete=models.CASCADE)#
    estado = models.CharField("Estado",max_length=20)
    estado_t = models.BooleanField(verbose_name="Estado transaccion:",default=True)

    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Depositos Trans Procesado Cta cte M"
        verbose_name = "Deposito Trans Procesado Cta cte M"
 
    def __str__(self):
        return str(self.id)

class RetiroCtaTransferenciaProcesado(models.Model):
    """ deposito a cuenta por concepto de transferencia procesado, este deposito no genera ingreso """
    id = models.AutoField("ID:", primary_key=True)
    fecha = models.DateTimeField("Fecha:",auto_now=True)
    id_procesado = models.ForeignKey(TransferenciaBancoProcesado,verbose_name="ID Procesado", on_delete=models.CASCADE)
    id_movimiento = models.ForeignKey(CtaCteMovimientos_main,verbose_name='Id Movimiento:', on_delete=models.CASCADE)
    id_caja = models.ForeignKey(Cajas,verbose_name='Id:', on_delete=models.CASCADE)
    id_personal = models.ForeignKey(Personal, verbose_name="ID Personal:", on_delete=models.CASCADE)#
    id_oficina = models.ForeignKey(Oficina,verbose_name='Id Oficina:', on_delete=models.CASCADE)#
    estado = models.CharField("Estado",max_length=20)
    estado_t = models.BooleanField(verbose_name="Estado transaccion:",default=True)

    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Retiros Trans Procesado Cta cte M"
        verbose_name = "Retiro Trans Procesado Cta cte M"
 
    def __str__(self):
        return str(self.id)


class RetiroTransferenciaCta(models.Model):
    """ retiro de cunta cte material y deposito por concepto de transferencia y comision """
    id = models.AutoField("ID:", primary_key=True)
    fecha = models.DateTimeField("Fecha:",auto_now=True)
    id_personal = models.ForeignKey(Personal,verbose_name="ID Personal", on_delete=models.CASCADE)
    id_oficina = models.ForeignKey(Oficina,verbose_name='Id:', on_delete=models.CASCADE)
    id_caja = models.ForeignKey(Cajas,verbose_name='Id:', on_delete=models.CASCADE)
    id_cliente = models.ForeignKey(Cliente, verbose_name="ID Cliente:", on_delete=models.CASCADE)#id id_cliente
    tabla_capita = models.CharField("Tabla capital:", max_length=50, null=True)
    id_capital=models.IntegerField("Id capital:",null= False, default=0)
    tabla_comi = models.CharField("Tabla comision:", max_length=50, null=True)
    id_comi=models.IntegerField("Id comision:",null= False, default=0)
    monto = models.DecimalField(max_digits=15,decimal_places=2,default=0)
    comision = models.DecimalField(max_digits=15,decimal_places=2,default=0)
    banco = models.CharField("Banco:", max_length=30, null=True)
    observaciones = models.CharField("Observaciones:", max_length=100, null=True)
    estado = models.CharField("Estado",max_length=20)
    #--------
    conceptoDetalle=models.CharField("Detalle:",max_length=250,null=True, blank=True)#descripcion dela operacion
    tabla_capita_mov = models.CharField("Tabla capital mov:", max_length=50, null=True, blank=True)
    id_capital_mov =models.IntegerField("Id capital mov:",null= False, default=0)
    tabla_comi_mov = models.CharField("Tabla comision mov:", max_length=50, null=True, blank=True)
    id_comi_mov = models.IntegerField("Id comision mov:",null= False, default=0)
    tipo_doc=models.CharField("Tipo Documento:",max_length=20, null=True, blank=True)
    nro_re=models.CharField("Nro. recibo:",max_length=20, null=True, blank=True)
    id_operacion = models.IntegerField("Id Operacion:",default=0) # id operacion agente, en caso de operaciones agente
    id_banco = models.IntegerField("Id Banco:",default=0)# permite registrar el banco en caso que
    comi_a_cuenta = models.CharField("Comision a cuenta:", max_length=2, null=True, blank=True) # 'si'
    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Retiros Trans Cta cte"
        verbose_name = "Retiro Trans Cta cte"

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

class CompraDolarSt(models.Model):
    id = models.AutoField("ID:", primary_key=True)
    idCajaDebe=models.ForeignKey(TCajaDebe,verbose_name="ID Caja Debe", on_delete=models.CASCADE)#id de ingreso (dolar)
    idCajaHaber = models.ForeignKey(TCajaHaber, verbose_name="ID Caja Haber:", on_delete=models.CASCADE)#id de egreso (soles)
    fecha = models.DateTimeField("Fecha:",auto_now=True)
    id_cliente = models.IntegerField(default=0,null=False)
    tipo_persona_cliente= models.CharField("Tipo Persona:", max_length=10,blank= True, null=True)
    dni_ruc_cliente = models.CharField("DNI:", max_length=11,blank= True, null=True)
    nombre_razon_cliente = models.CharField("Nombres:", max_length=100,blank= True, null=True)
    Apellido_paterno_cliente = models.CharField("Apellido Paterno:", max_length=200,blank= True, null=True)
    Apellido_materno_cliente = models.CharField("Apellido Materno:", max_length=200,blank= True, null=True)
    observaciones = models.CharField("Observaciones:", max_length=100, null=True)
    tipo_cambio_compra =  models.DecimalField(max_digits=15,decimal_places=2,default=0)
    monto_dolar_comprado = models.DecimalField(max_digits=15,decimal_places=2,default=0)
    monto_soles_pagado = models.DecimalField(max_digits=15,decimal_places=2,default=0)
    aux1=models.CharField("aux1:",max_length=30,null=True)
    aux2=models.CharField("aux2:",max_length=15,null=True)
    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Compra de Dolar ST"
        verbose_name = "Compras de Dolar ST"
    def __str__(self):
        return str(self.id)

class VentaDolarSt(models.Model):
    id = models.AutoField("ID:", primary_key=True)
    idCajaDebe=models.ForeignKey(TCajaDebe,verbose_name="ID Caja Debe", on_delete=models.CASCADE)#id de ingreso (soles)
    idCajaHaber = models.ForeignKey(TCajaHaber, verbose_name="ID Caja Haber:", on_delete=models.CASCADE)#id de egreso (dolares)
    fecha = models.DateTimeField("Fecha:",auto_now=True)
    id_cliente = models.IntegerField(default=0,null=False)
    tipo_persona_cliente= models.CharField("Tipo Persona:", max_length=10,blank= True, null=True)
    dni_ruc_cliente = models.CharField("DNI:", max_length=11,blank= True, null=True)
    nombre_razon_cliente = models.CharField("Nombres:", max_length=100,blank= True, null=True)
    Apellido_paterno_cliente = models.CharField("Apellido Paterno:", max_length=200,blank= True, null=True)
    Apellido_materno_cliente = models.CharField("Apellido Materno:", max_length=200,blank= True, null=True)
    observaciones = models.CharField("Observaciones:", max_length=100, null=True)
    tipo_cambio_venta = models.DecimalField(max_digits=15,decimal_places=2,default=0)
    monto_dolar_vendido = models.DecimalField(max_digits=15,decimal_places=2)
    monto_soles_cobrado = models.DecimalField(max_digits=15,decimal_places=2)
    aux1=models.CharField("aux1:",max_length=30,null=True)
    aux2=models.CharField("aux2:",max_length=15,null=True)
    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Venta de Dolar ST"
        verbose_name = "Ventas de Dolar ST"
    def __str__(self):
        return str(self.id)

# facturacion
class FacturacionOperacionV1(models.Model):
    id = models.AutoField("ID:", primary_key=True)
    tipo = models.CharField("Tipo:", max_length=1, null=False)#B, F
    serie = models.CharField("Serie:", max_length=4, null=False)#B001, F001
    correlativo = models.IntegerField("Plazo:",default=0)
    fecha= models.DateTimeField("Fecha:",auto_now=True)
    fecha_emision = models.DateTimeField("Fecha Emision:",null=True)
    fecha_envio = models.DateTimeField("Fecha Envio ok:",null=True) #envio correcto
    fecha_error = models.DateTimeField("Fecha Error:",null=True) #errores
    errores = models.CharField("Errores:", max_length=300,null=True)
    nro_doc = models.CharField("Nro Doc:", max_length=25,null=True)#dni o ruc
    razon = models.CharField("Razon:", max_length=250,null=True)
    codigo_pro = models.CharField("Codigo:", max_length=8,null=True)
    codigo_sunat = models.CharField("Codigo Sunat:", max_length=10,null=True)
    descripcion = models.CharField("Razon:", max_length=250,null=True)
    m_neto = models.DecimalField("Monto neto:",max_digits=15,decimal_places=4,default=0)
    m_igv = models.DecimalField("Monto IGV:",max_digits=15,decimal_places=4,default=0)
    m_total = models.DecimalField("Monto total:",max_digits=15,decimal_places=4,default=0)
    monto_letras = models.CharField("Monto letras:", max_length=250,null=True)
    idOperacion= models.CharField("Operacion:", max_length=15, null=True)
    tabla=models.CharField("Tabla:", max_length=100, null=True)
    estado= models.BooleanField(verbose_name="Estado transaccion:",default=True)
    estado_sunat = models.CharField("Estado Sunat:",max_length=20,null=False)#activo,enviado,rechazado
    fecha_tz_letras = models.CharField("Fecha TZ:",max_length=25,null=True)#2022-05-14T00:06:20-05:00
    cdr_id = models.CharField("cdr id:",max_length=20,null=True)
    cdr_code = models.CharField("cdr code:",max_length=20,null=True)
    cdr_description = models.CharField("cdr id:",max_length=250,null=True)
    invoice_hash= models.CharField("hash:",max_length=50,null=True)
    id_caja = models.IntegerField("ID Caja:",default=0)
    id_empresa = models.IntegerField("ID Empresa:",default=0)
    moneda = models.CharField("moneda:", max_length=3, null=True)#PEN ,USD
    class Meta:
        ordering = ["id"]
        verbose_name_plural = "Facturaciones operacion"
        verbose_name = "Facturacion Operacion"

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