예제 #1
0
 def __init__(self,
              mes,
              anio,
              empresa,
              trabajador=0,
              esnomina=True,
              esfiniquito=False,
              esnominapextra=False):
     """
     Constructor
     """
     self.mes = mes
     self.anio = anio
     self.dia = ultimodiames(mes, anio)
     self.fecha = str(self.anio) + "-" + str(self.mes) + "-" + str(self.dia)
     self.empresa = empresa
     self.es_finiquito = esfiniquito
     self.es_nomina = esnomina
     self.es_nominapextra = esnominapextra
     locale.setlocale(locale.LC_ALL, 'es_ES.UTF-8')
     self.estemes = time.strftime(
         "%B", time.strptime(str(self.mes) + ',' + str(self.anio), '%m,%Y'))
     self.trabajador_id = trabajador
     self.SqlNom = SqlNominas()
     self.cabecera = Cabecera(self.empresa, self.mes, self.anio,
                              self.trabajador_id)
     print "*********** ALTA NOMINA **************"
     print 'Nomina:', self.es_nomina, '         Finiquito:', self.es_finiquito
     self.nominas_empresa()
예제 #2
0
 def valorcelda(self, celda, nomina, c, idform_celda, *campo):
     # # Funcion que nos devuelve el contenido de la celda
     #  de la cabecera y del pie
     # celda es idform_concepto
     try:
         sql = ("select " + unicode(campo[0]) +
                " from nomina_devengos "
                " where idnomina = %s and idform_concepto = %s")
         reg = select_sql((sql, (nomina, celda)))[0]
     except:
         try:
             reg = SqlNominas(nomina).dato_nomina(campo[0])
             if not reg:
                 reg = SqlNominas(nomina).__dict__[campo[0]]
         except:
             pass
     dataform = FormCelda(idform_celda)
     c.setFillGray(0)
     c.setFont("Courier", 9)
     # Comprobamos que los datos de fecha y valor queden como string correcto
     if campo[0] == 'fecha':
         reg = SqlNominas(nomina).fecha_formlargo
     if isinstance(reg, float):
         reg = "{:,.2f}".format(reg)
     if reg is not None:
         dataform.dato_draw(c,reg)
예제 #3
0
 def __init__(self, trabajador, mes, anio, fornom, esnomina=True, esfiniquito=False, esnominapextra=False):
     self.trabajador = trabajador
     self.mes = mes
     self.anio = anio
     self.fornom = fornom
     self.gladefile = "Ventanas/nomina.glade"
     self.builder = Gtk.Builder()
     self.builder.add_from_file(self.gladefile)
     self.builder.connect_signals(self)
     self.bAceptar = self.builder.get_object("bAcepta")
     self.bBorrar = self.builder.get_object('bEliminar')
     self.bCancelar = self.builder.get_object("bCancela")
     self.bRecalcular = self.builder.get_object("bRecal")
     self.esnomina = esnomina
     self.esfiniquito = esfiniquito
     self.esnominapextra = esnominapextra
     self.lantiguedad = self.builder.get_object("lantiguedad")
     self.lidempresa = self.builder.get_object("lidempresa")
     self.lcif = self.builder.get_object("lcif")
     self.lcontrato = self.builder.get_object('lcontrato')
     self.ld = self.builder.get_object("ld")
     self.ldireccion = self.builder.get_object('ldireccion')
     self.lempresa = self.builder.get_object("lemp")
     self.lhoras = self.builder.get_object('lhoras')
     self.lidcontrato = self.builder.get_object('lidcontrato')
     self.lliquido = self.builder.get_object('lliquido')
     self.lncc = self.builder.get_object("lncc")
     self.lnif = self.builder.get_object("lnif")
     self.lnaf = self.builder.get_object("lnaf")
     self.lnumcontrato = self.builder.get_object('lnumcontrato')
     self.lidnomina = self.builder.get_object('lidnomina')
     self.lperiodo = self.builder.get_object("lper")
     self.lpuesto = self.builder.get_object('lpuesto')
     dev = SqlNominas(0)
     self.lanomina = dev.nomina_trabajador_mes(self.trabajador, self.mes,
                                          self.anio, self.esnomina, self.esfiniquito,
                                               self.esnominapextra)
     self.laempresa = dev.trabajador_empresa(self.trabajador, self.mes,
                                             self.anio)
     self.lppextra = self.builder.get_object('lppextra')
     self.lremuneracion = self.builder.get_object('lremuneracion')
     self.ltrabajador = self.builder.get_object("ltrab")
     self.lb_segsoc = self.builder.get_object("lb_segsoc")
     self.lb_irpf = self.builder.get_object("lb_irpf")
     self.rb_es_tpoparcial = self.builder.get_object("rbEs_tpoparcial")
     self.rb_es_tpocompleto = self.builder.get_object('rbEs_tpocompleto')
     self.rb_es_indefinido = self.builder.get_object('rbEs_indefinido')
     self.rb_es_temporal = self.builder.get_object('rbEs_temporal')
     self.box14 = self.builder.get_object("box14")
     self.vista = self.builder.get_object("vista")
     self.window3 = self.builder.get_object("window3")
     self.window3.show()
     if self.esnomina:
         self.nomina()
     elif self.esfiniquito:
         self.nomina()
예제 #4
0
 def __init__(self, nomina):
     self.idnomina = nomina
     self.datos = SqlNominas(self.idnomina)
     self.anio = self.datos.fecha_anio(self.idnomina)
     self.mes = self.datos.fecha_mes(self.idnomina)
     self.dia_inicial = self.datos.periodos(self.anio, self.mes,
                                            self.idnomina)[0]
     self.dia_final = self.datos.periodos(self.anio, self.mes,
                                          self.idnomina)[1]
     self.fecha = self.datos.periodos(self.anio, self.mes, self.idnomina)[1]
예제 #5
0
 def __init__(self, idnomina=0):
     '''
     Constructor
     '''
     self.id = idnomina
     self.nomina = SqlNominas(self.id)
     importe = 0
     for x in self.nomina.lista_devengos_nomina():
         self.devengo = Nomina_Devengo(x[0])
         importe = self.devengo.paga_extra() + importe
         print "paga extra", self.devengo.id, importe
예제 #6
0
 def imprimir(self):
     SqlNom = SqlNominas()
     self.formulario
     self.canvas = canvas.Canvas("nomina.pdf", pagesize=A4)
     impr_nomina(
         self.canvas,
         self.empresa().id, self.mes, self.anio, self.formulario,
         SqlNom.nomina_trabajador_mes(self.trabajador().id, self.mes,
                                      self.anio))
     self.canvas.save()
     print os.name
     os.system("/usr/bin/evince nomina.pdf")
예제 #7
0
 def __init__(self, nomina):
     self.id = nomina
     self.nomina = SqlNominas(self.id)
     self.grupo_cot_id = self.nomina.grupo_cotizacion_id
     self.anio = self.nomina.fecha_anio
     self.mes = self.nomina.fecha_mes
     self.contrato_id = self.nomina.contrato_id
     self.cta_cot_id = self.nomina.cta_cot_id
     self.coef_pextra = self.nomina.cta_cot.coef_pextra
     self.lista_devengos = self.nomina.lista_devengos_nomina()
     self.lista_pextra = self.nomina.lista_pagas_extras()
     self.calendario = Calendario(self.cta_cot_id, self.anio)
     self.bases_cotizacion()
예제 #8
0
 def imprimir(self):
     SqlNom = SqlNominas()
     self.formulario
     self.canvas = canvas.Canvas("nomina.pdf", pagesize=A4)
     impr_nomina(self.canvas,
                 self.empresa().id,
                 self.mes,
                 self.anio,
                 self.formulario,
                 SqlNom.nomina_trabajador_mes(self.trabajador().id, self.mes, self.anio)
                 )
     self.canvas.save()
     print os.name
     os.system("/usr/bin/evince nomina.pdf")
예제 #9
0
 def __init__(self, nomina):
     self.idnomina = nomina
     self.datos = SqlNominas(self.idnomina)
     self.anio = self.datos.fecha_anio(self.idnomina)
     self.mes = self.datos.fecha_mes(self.idnomina)
     self.dia_inicial = self.datos.periodos(self.anio, self.mes, self.idnomina)[0]
     self.dia_final = self.datos.periodos(self.anio, self.mes, self.idnomina)[1]
     self.fecha = self.datos.periodos(self.anio, self.mes, self.idnomina)[1]
예제 #10
0
 def __init__(self, empresa, mes, anio, esnomina=True, esfiniquito=False, esnominapextra=False):
     self.empresa = empresa
     self.dia = ultimodiames(mes, anio)
     self.mes = mes
     self.anio = anio
     self.nomina = SqlNominas(0)
     self.NomDev = Nomina_Devengo
     self.num_nominas = Contrato(0).contratos_activos_mes(self.empresa, self.anio, self.mes)
     self.fecha = str(self.anio) + "-" + str(self.mes) + "-" + str(self.dia)
     locale.setlocale(locale.LC_ALL, 'es_ES.UTF-8')
     self.estemes = time.strftime("%B", time.strptime(str(self.mes) + ',' + str(self.anio), '%m,%Y'))
     self.esnomina = esnomina
     self.esfiniquito = esfiniquito
     self.esnominapextra = esnominapextra
     self.borrarnominas = NomBorrar(self.empresa, self.mes, self.anio, 0, self.esnomina, self.esfiniquito,
                                    self.esnominapextra)
     print "Empieza el calculo ..."
예제 #11
0
 def on_change(self, entry, data=None):
     self.tabla.destroy()
     empresa = SqlNominas(0)
     trabajadores = empresa.trabajadores(valor_combobox(self.cbnum),
                                         valor_combobox(self.cbmes),
                                         self.anio.get_text(), self.esnomina,
                                         self.esfiniquito, self.esnominapextra)
     tabla = Gtk.Table(10, 1)
     t = 0
     while t < len(trabajadores):
         boton = Gtk.Button(trabajadores[t][0])
         boton.connect("clicked", self.clicked, trabajadores[t][1])
         boton.show()
         tabla.attach(boton, 0, 1, t, t + 1)
         t += 1
     self.tabla = tabla
     self.tabla.show()
     self.box9.add(self.tabla)
     self.box9.show()
예제 #12
0
 def actual_dietas(self, nomina):
     # --------- Calculo de las dietas dado un importe fijo neto
     SN = SqlNominas(nomina)
     neto = SN.contrato.liquido_a_cobrar
     if neto > 0:
         self.calc_dietas(nomina)
         print "Volvemos a actualizar"
         Actualizar(nomina)
     else:
         print "    No hay dietas ...."
예제 #13
0
 def on_change(self, entry, data=None):
     self.tabla.destroy()
     empresa = SqlNominas(0)
     trabajadores = empresa.trabajadores(valor_combobox(self.cbnum),
                                         valor_combobox(self.cbmes),
                                         self.anio.get_text(),
                                         self.esnomina, self.esfiniquito,
                                         self.esnominapextra)
     tabla = Gtk.Table(10, 1)
     t = 0
     while t < len(trabajadores):
         boton = Gtk.Button(trabajadores[t][0])
         boton.connect("clicked", self.clicked, trabajadores[t][1])
         boton.show()
         tabla.attach(boton, 0, 1, t, t + 1)
         t += 1
     self.tabla = tabla
     self.tabla.show()
     self.box9.add(self.tabla)
     self.box9.show()
예제 #14
0
 def __init__(self, idnomina = 0):
     '''
     Constructor
     '''
     self.id = idnomina
     self.nomina = SqlNominas(self.id)
     importe = 0
     for x in self.nomina.lista_devengos_nomina():
         self.devengo = Nomina_Devengo(x[0])
         importe = self.devengo.paga_extra()+importe
         print "paga extra",self.devengo.id,importe
예제 #15
0
    def bases_cotizacion(self):
        '''
        :return:
        '''
        self.base_irpf = 0
        self.base_remuneracion = 0
        self.base_irpf_especie = 0
        self.base_ppextra = 0
        self.base_irpf_segsoc = 0
        self.base_segsoc_sinirpf = 0
        self.base_irpf_sinsegsoc = 0
        self.no_cotizan = 0
        self.nomina.actualiza_ppextra()
        self.nomina = SqlNominas(self.id)
        self.base_ppextra = self.nomina.base_ppextra
        # Para calcular las bases de cotización distinguimos entre devengos y pagas extras
        # Comprobamos que los devengos cotizan a la seguridad social al igual que las pagas extras
        # Comprobamos que los devengos cotizan en el IRPF al igual que las pagas extras
        # Los prorrateos de pagas extras se calculan en SqlNominas.devengo_ppextra()
        for x in (self.lista_devengos + self.lista_pextra):
            devengo = Nomina_Devengo(x[0])
            print '    ....****>>>> Devengo/segsoc/irpf', devengo.concepto, devengo.cotiza_segsocial, devengo.cotiza_irpf
            if devengo.cotiza_segsocial:
                self.base_remuneracion = self.base_remuneracion + devengo.devengado
            if devengo.cotiza_irpf:
                if devengo.es_devengo_especie:
                    self.base_irpf_especie = self.base_irpf_especie + devengo.devengado
                else:
                    self.base_irpf = self.base_irpf + devengo.devengado
            if devengo.cotiza_irpf and devengo.cotiza_segsocial:
                self.base_irpf_segsoc = self.base_irpf_segsoc + devengo.devengado
            if not devengo.cotiza_irpf and devengo.cotiza_segsocial:
                self.base_segsoc_sinirpf = self.base_segsoc_sinirpf + devengo.devengado
            if devengo.cotiza_irpf and not devengo.cotiza_segsocial:
                self.base_irpf_sinsegsoc = self.base_irpf_sinsegsoc + devengo.devengado
            if not devengo.cotiza_irpf and not devengo.cotiza_segsocial:
                self.no_cotizan = self.no_cotizan + devengo.devengado

        self.base_segsocial = self.base_ppextra + self.base_remuneracion
예제 #16
0
 def __init__(self, nomina):
     self.id = nomina
     self.nomina = SqlNominas(self.id)
     self.grupo_cot_id = self.nomina.grupo_cotizacion_id
     self.anio = self.nomina.fecha_anio
     self.mes = self.nomina.fecha_mes
     self.contrato_id = self.nomina.contrato_id
     self.cta_cot_id = self.nomina.cta_cot_id
     self.coef_pextra = self.nomina.cta_cot.coef_pextra
     self.lista_devengos = self.nomina.lista_devengos_nomina()
     self.lista_pextra = self.nomina.lista_pagas_extras()
     self.calendario = Calendario(self.cta_cot_id, self.anio)
     self.bases_cotizacion()
예제 #17
0
 def __init__(self, nomina):
     """
     Gestiona el cálculo de la IT del trabajador respecto de una nomina dada
     """
     self.id = nomina
     self.SqlNom = SqlNominas(self.id)
     self.mes = self.SqlNom.fecha_mes
     self.anio = self.SqlNom.fecha_anio
     self.it = It_registro(self.buscar_it_nomina())
     self.it_fechas_mes = self.it.periodo_it(self.anio, self.mes)
     self.it_fecha_inicial = self.it_fechas_mes[0]
     self.it_fecha_final = self.it_fechas_mes[1]
     self.it_dias_mes = (self.it_fecha_final - self.it_fecha_final).days + 1
     self.it_fechas_acumulado_total = self.it.periodo_it(
         self.anio, self.mes, True)
     self.it_dias_acumulados = (self.it_fechas_acumulado_total[1] -
                                self.it_fechas_acumulado_total[0]).days + 1
     self.it_dias_pendientes = self.it_dias_acumulados
예제 #18
0
 def __init__(self, mes, anio, empresa, trabajador=0, esnomina=True, esfiniquito=False, esnominapextra=False):
     """
     Constructor
     """
     self.mes = mes
     self.anio = anio
     self.dia = ultimodiames(mes, anio)
     self.fecha = str(self.anio) + "-" + str(self.mes) + "-" + str(self.dia)
     self.empresa = empresa
     self.es_finiquito = esfiniquito
     self.es_nomina = esnomina
     self.es_nominapextra = esnominapextra
     locale.setlocale(locale.LC_ALL, 'es_ES.UTF-8')
     self.estemes = time.strftime("%B", time.strptime(str(self.mes) + ',' + str(self.anio), '%m,%Y'))
     self.trabajador_id = trabajador
     self.SqlNom = SqlNominas()
     self.cabecera = Cabecera(self.empresa, self.mes, self.anio, self.trabajador_id)
     print "*********** ALTA NOMINA **************"
     print 'Nomina:', self.es_nomina, '         Finiquito:', self.es_finiquito
     self.nominas_empresa()
예제 #19
0
    def bases_cotizacion(self):
        '''
        :return:
        '''
        self.base_irpf = 0
        self.base_remuneracion = 0
        self.base_irpf_especie = 0
        self.base_ppextra = 0
        self.base_irpf_segsoc = 0
        self.base_segsoc_sinirpf = 0
        self.base_irpf_sinsegsoc = 0
        self.no_cotizan = 0
        self.nomina.actualiza_ppextra()
        self.nomina = SqlNominas(self.id)
        self.base_ppextra = self.nomina.base_ppextra
        # Para calcular las bases de cotización distinguimos entre devengos y pagas extras
        # Comprobamos que los devengos cotizan a la seguridad social al igual que las pagas extras
        # Comprobamos que los devengos cotizan en el IRPF al igual que las pagas extras
        # Los prorrateos de pagas extras se calculan en SqlNominas.devengo_ppextra()
        for x in (self.lista_devengos + self.lista_pextra):
            devengo = Nomina_Devengo(x[0])
            print '    ....****>>>> Devengo/segsoc/irpf', devengo.concepto, devengo.cotiza_segsocial, devengo.cotiza_irpf
            if devengo.cotiza_segsocial:
                    self.base_remuneracion = self.base_remuneracion + devengo.devengado
            if devengo.cotiza_irpf:
                if devengo.es_devengo_especie:
                    self.base_irpf_especie = self.base_irpf_especie + devengo.devengado
                else:
                    self.base_irpf = self.base_irpf + devengo.devengado
            if devengo.cotiza_irpf and devengo.cotiza_segsocial:
                self.base_irpf_segsoc = self.base_irpf_segsoc + devengo.devengado
            if not devengo.cotiza_irpf and devengo.cotiza_segsocial:
                self.base_segsoc_sinirpf = self.base_segsoc_sinirpf + devengo.devengado
            if devengo.cotiza_irpf and not devengo.cotiza_segsocial:
                self.base_irpf_sinsegsoc = self.base_irpf_sinsegsoc + devengo.devengado
            if not devengo.cotiza_irpf and not devengo.cotiza_segsocial:
                self.no_cotizan = self.no_cotizan + devengo.devengado

        self.base_segsocial = self.base_ppextra + self.base_remuneracion
예제 #20
0
class nomina:
    def __init__(self, nomina):
        self.idnomina = nomina
        self.datos = SqlNominas(self.idnomina)
        self.anio = self.datos.fecha_anio(self.idnomina)
        self.mes = self.datos.fecha_mes(self.idnomina)
        self.dia_inicial = self.datos.periodos(self.anio, self.mes,
                                               self.idnomina)[0]
        self.dia_final = self.datos.periodos(self.anio, self.mes,
                                             self.idnomina)[1]
        self.fecha = self.datos.periodos(self.anio, self.mes, self.idnomina)[1]

    def banco_trabajador(self):
        self.iban
        self.entidad
        self.oficina
        self.dc
        self.numero
        self.tlf

    def devengos(self):
        self.concepto
        self.cantidad
        self.importe
        self.total

    def deducciones(self):
        self.cont_comunes_porcentaje
        self.cont_comunes_importe
        self.form_profesional_porcentaje
        self.form_profesional_importe
        self.desempleo_porcentaje
        self.desempleo_importe
        self.irpfdinerarias_porcetaje
        self.irpfdinerarias_importe
        self.irpfespecie_porcentaje
        self.irpfespecie_importe
        self.anticipos

    def bases(self):
        self.rem_mensual
        self.pror_pagasextras
        self.cont_comunes
        self.form_profesional
        self.desempleo
        self.irpf

    def aportacion_empresa(self):
        self.cont_comunes_porcentaje
        self.cont_comunes_importe
        self.desempleo_porcentaje
        self.desempleo_importe
        self.form_profesional_porcentaje
        self.form_profesional_importe
        self.fogasa_porcentaje
        self.fogasa_importe

    def totalnomina(self):
        self.devengado
        self.deducible
        self.liquido

    def calcular(self):
        calc_nomina(self.empresa().id, self.mes, self.anio)

    def imprimir(self):
        SqlNom = SqlNominas()
        self.formulario
        self.canvas = canvas.Canvas("nomina.pdf", pagesize=A4)
        impr_nomina(
            self.canvas,
            self.empresa().id, self.mes, self.anio, self.formulario,
            SqlNom.nomina_trabajador_mes(self.trabajador().id, self.mes,
                                         self.anio))
        self.canvas.save()
        print os.name
        os.system("/usr/bin/evince nomina.pdf")

    def salida_pantalla(self):
        vernomina(self.trabajador.id, self.mes, self.anio, self.formulario)
예제 #21
0
class Alta:
    """
    classdocs
    """
    def __init__(self, mes, anio, empresa, trabajador=0, esnomina=True, esfiniquito=False, esnominapextra=False):
        """
        Constructor
        """
        self.mes = mes
        self.anio = anio
        self.dia = ultimodiames(mes, anio)
        self.fecha = str(self.anio) + "-" + str(self.mes) + "-" + str(self.dia)
        self.empresa = empresa
        self.es_finiquito = esfiniquito
        self.es_nomina = esnomina
        self.es_nominapextra = esnominapextra
        locale.setlocale(locale.LC_ALL, 'es_ES.UTF-8')
        self.estemes = time.strftime("%B", time.strptime(str(self.mes) + ',' + str(self.anio), '%m,%Y'))
        self.trabajador_id = trabajador
        self.SqlNom = SqlNominas()
        self.cabecera = Cabecera(self.empresa, self.mes, self.anio, self.trabajador_id)
        print "*********** ALTA NOMINA **************"
        print 'Nomina:', self.es_nomina, '         Finiquito:', self.es_finiquito
        self.nominas_empresa()

    def nominas_empresa(self):
        """
        1. Insertamos las cabeceras de las nominas sin calculos
           basados en los contratos de la empresa ACTUALIZADOS
        """
        print "insertamos los nuevos registros ...."
        f = self.cabecera.nomina(self.es_nomina, self.es_finiquito, self.es_nominapextra)
        sql = "Select max(idnomina) as maxid from nominas"
        j = select_sql(sql)[0]

        if not j:
            j = 0
        for filas in f:
            j += 1  # numero de nomina o idnomina
            print "Insertamos las cabeceras de la nomina ************************", j
            sql = ('INSERT INTO nominas '
                   '(`idnomina`, `idempresa`, `idemp_contratos`, '
                   '`idgrupos_cotizacion`, `idtb_epigrafe`, `antig`, '
                   '`descripcion`, `liquido`, `naf`, `tarifa`, `epigrafe`, '
                   '`matricula`, `nombre`, `categoria`, `dni`, `empresa`, '
                   '`dir`, `cta_cot`, `cif`, fecha, idcta_cot, es_finiquito) '
                   'VALUES '
                   '(%s ,%s, %s, %s, %s, %s, %s, %s, %s, %s, '
                   '%s ,%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)')
            select_sql((sql,
                        (j, filas[0], filas[1], filas[2], filas[3],
                         str(filas[4]), ("Nominas de " + self.estemes +
                                         " de " + str(self.anio)), filas[5], filas[6], filas[7],
                         filas[8], filas[9], filas[10], filas[11], filas[12],
                         filas[13], filas[14], filas[15], filas[16],
                         self.fecha, filas[18], self.es_finiquito)))
            # Comprobamos si el contrato es de jornada parcial
            self.SqlNom(j)
            z = self.SqlNom.nomina_a_tiempo_parcial()

            # ## Insertamos los devengos de nominas
            print "Insertamos los devengos de nominas ***************************", j, self.SqlNom.contrato.trabajador.nombre
            """
        2. Insertamos los devengos de las nominas a las nóminas a calcular
            """
            sql = ('SELECT '
                   'idemp_devengo, orden, concepto, importe, irpf, cont_com, '
                   'desempleo, fp, fgs, it, ims, ppextra, mensual, diario, '
                   'horas, idemp_pextra, dias_efectivos, dias_naturales, '
                   'esdevengo, esirpf, esdieta, esespecie, esporcentaje, '
                   'esmanual, coef_pextra, fraccionhoras, idform_concepto, '
                   'esvacaciones, pagavacaciones, es_complemento_it_cc, '
                   'es_complemento_it_ef, es_indemnizacion '
                   'FROM '
                   'emp_devengos '
                   'WHERE '
                   'idemp_contrato = %s ')
            sql1 = sql + ('and '
                          '(esdevengo '
                          'and not es_indemnizacion '
                          'and not esvacaciones '
                          'and not es_complemento_it_cc '
                          'and not es_complemento_it_ef '
                          'and (not idemp_pextra or idemp_pextra is null)) ')

            sql1 += 'ORDER by idemp_contrato, orden '
            h = select_sql((sql1, (filas[1])), 1)
            k = select_sql("Select max(idnomina_devengo) + 1 "
                           "from nomina_devengos")[0]
            orden = 0
            sql2 = ("INSERT INTO nomina_devengos "
                    "(`idnomina_devengo`, `idnomina`, `idemp_devengo`, "
                    "`orden`, `concepto`, `importe`, `irpf`, `cont_com`, "
                    "`desempleo`,`fp`, `fgs`, `it`, `ims`, `ppextra`, "
                    "`mensual`, `diario`, `horas`, `idemp_pextra`, "
                    "`dias_efectivos`, `dias_naturales`, `esdevengo`, "
                    "esirpf, esdieta, esespecie, esporcentaje, esmanual, "
                    "coef_pextra, fraccionhoras, idform_concepto, "
                    "esvacaciones, pagavacaciones, es_complemento_it_cc, "
                    "es_complemento_it_ef, es_indemnizacion) "
                    "VALUES "
                    "(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, "
                    "%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, "
                    "%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, "
                    "%s, %s, %s, %s)")
            print "*********************** Devengos "
            if self.es_nomina:
                for col in h:
                    print '    ',col[2], col[3]
                    orden += 1
                    if not k:
                        k = 1
                    else:
                        k += 1

                    campos = (k, j, col[0], orden, col[2], col[3],
                              col[4], col[5], col[6], col[7], col[8],
                              col[9], col[10], col[11], col[12],
                              col[13], z, col[15], col[16],
                              col[17], col[18], col[19], col[20],
                              col[21], col[22], col[23], col[24],
                              col[25], col[26], col[27], col[28],
                              col[29], col[30], col[31])
                    select_sql((sql2, campos))
            """
        3. Insertamos las pagas extras si están prorrateadas de las nóminas a calcular o es finiquito o es nomina
            """
            contrato = Contrato(filas[1])
            if (contrato.con_prorrata_pextra or (
                        not contrato.con_prorrata_pextra and self.es_finiquito) or self.es_nominapextra):
                print "*********************** Prorrateo pagas extras / Finiquito "
                sql1 = sql + ("and "
                              "(esdevengo "
                              "and not es_indemnizacion "
                              "and not esvacaciones "
                              "and not es_complemento_it_cc "
                              "and not es_complemento_it_ef "
                              "and  idemp_pextra) "
                              "ORDER by "
                              "orden")
                h = select_sql((sql1, (filas[1])), 1)
                k = select_sql("Select max(idnomina_devengo) "
                               "from nomina_devengos")[0]
                for col in h:
                    print '    ',col[2], col[3]
                    orden += 1
                    if not k:
                        k = 1
                    else:
                        k += 1
                    campos = (k, j, col[0], orden, col[2], col[3],
                              col[4], col[5], col[6], col[7], col[8],
                              col[9], col[10], col[11], col[12],
                              col[13], z, col[15], col[16],
                              col[17], col[18], col[19], col[20],
                              col[21], col[22], col[23], col[24],
                              col[25], col[26], col[27], col[28],
                              col[29], col[30], col[31])
                    select_sql((sql2, campos))
            """
        4. Insertamos los devengos si hay baja por enfermedad
            """
            # Comprobamos si hay baja por IT
            base = Bases(j)
            print "*********************** Bases"
            try:
                base.it_nomina.it_dias_mes
                print "*********************** IT "
                sql1 = sql + ("and es_complemento_it_cc "
                              "ORDER by "
                              "idemp_contrato, orden")
                h = select_sql((sql1, (filas[1])), 1)
                k = select_sql("Select max(idnomina_devengo) "
                               "from nomina_devengos")[0]
                for col in h:
                    print '    ',col[2], col[3]
                    orden += 1
                    if not k:
                        k = 1
                    else:
                        k += 1
                    campos = (k, j, col[0], orden, col[2], col[3],
                              col[4], col[5], col[6], col[7], col[8],
                              col[9], col[10], col[11], col[12],
                              col[13], z, col[15], col[16],
                              col[17], col[18], col[19], col[20],
                              col[21], col[22], col[23], col[24],
                              col[25], col[26], col[27], col[28],
                              col[29], col[30], col[31])
                    select_sql((sql2, campos))
            except:
                pass
            '''
            5. Insertamos la indemnización si es un finiquito
            '''
            print "*********************** Indemnizacion Finiquito"
            if self.es_finiquito:
                sql1 = sql + (" and (es_indemnizacion "
                              " or esvacaciones) "
                              " ORDER by "
                              " idemp_contrato, orden ")
                h = select_sql((sql1, (filas[1])), 1)
                k = select_sql("Select max(idnomina_devengo) "
                               "from nomina_devengos")[0]
                for col in h:
                    print '    ', col[2], col[3]
                    orden += 1
                    if not k:
                        k = 1
                    else:
                        k += 1
                    campos = (k, j, col[0], orden, col[2], col[3],
                              col[4], col[5], col[6], col[7], col[8],
                              col[9], col[10], col[11], col[12],
                              col[13], z, col[15], col[16],
                              col[17], col[18], col[19], col[20],
                              col[21], col[22], col[23], col[24],
                              col[25], col[26], col[27], col[28],
                              col[29], col[30], col[31])
                    select_sql((sql2, campos))
            """
            6. Insertamos las deducciones
            """

            sql1 = sql + ("and not esdevengo "
                          "ORDER by "
                          "idemp_contrato, orden")
            h = select_sql((sql1, (filas[1])), 1)
            k = select_sql("Select max(idnomina_devengo) + 1 "
                           "from nomina_devengos")[0]
            print "*********************** Deducciones "

            for col in h:
                print '    ', col[2], col[3]
                orden += 1
                if not k:
                    k = 1
                else:
                    k += 1
                campos = (k, j, col[0], orden, col[2], col[3],
                          col[4], col[5], col[6], col[7], col[8],
                          col[9], col[10], col[11], col[12],
                          col[13], z, col[15], col[16],
                          col[17], col[18], col[19], col[20],
                          col[21], col[22], col[23], col[24],
                          col[25], col[26], col[27], col[28],
                          col[29], col[30], col[31])
                select_sql((sql2, campos))
        # self.actualizar = Actualizar(j)
        return
예제 #22
0
 def on_bEliminar_clicked(self, button, data=None):
     SqlNominas(self.lanomina).borrar_nomina()
     self.nomina()
예제 #23
0
 def nomina(self):
     self.lista = Gtk.ListStore(long, str, str, str, str, str)
     render0 = Gtk.CellRendererText()
     render0.set_property("xalign", 1.0)
     render0.set_property("visible", False)
     render1 = Gtk.CellRendererText()
     render1.set_property("xalign", 0)
     render2 = Gtk.CellRendererText()
     render2.set_property("xalign", 1.0)
     render2.set_property("editable", True)
     render2.connect('edited', self.col2_edited_cb, self.lista)
     render3 = Gtk.CellRendererText()
     render3.set_property("xalign", 1.0)
     render3.set_property("editable", True)
     render3.connect('edited', self.col3_edited_cb, self.lista)
     render4 = Gtk.CellRendererText()
     render4.set_property("xalign", 1.0)
     render5 = Gtk.CellRendererText()
     render5.set_property("xalign", 1.0)
     SqlNom = SqlNominas(self.lanomina)
     #devengos = SqlNom.ver_devengos(self.trabajador, self.mes, self.anio)
     # self.tabla = Gtk.Table(len(devengos[0]),len(devengos))
     lista_devengos = SqlNom.lista_devengos_nomina(
     ) + SqlNom.lista_pagas_extras()
     for k in lista_devengos:
         contenido = []
         devengo = Nomina_Devengo(k[0])
         #for l in k:
         # entrada = Gtk.Label(devengos[t][p])
         # self.tabla.attach(entrada,p,p+1,t,t+1)
         # entrada.show()
         # print "Dev",devengos[t][p],t, p
         #if isinstance(devengo.precio, float):
         #        l = "{0:,.2f}".format(l)
         decimales = '{0:,.2f}'
         contenido.append(devengo.id)
         contenido.append(devengo.concepto)
         contenido.append(decimales.format(devengo.cuantia))
         contenido.append(decimales.format(devengo.precio))
         contenido.append(decimales.format(devengo.devengado))
         contenido.append(decimales.format(devengo.deducido))
         self.lista.append(contenido)
     self.vista.set_model(self.lista)
     col1 = Gtk.TreeViewColumn("Num.", render0, text=0)
     col2 = Gtk.TreeViewColumn("Concepto", render1, text=1)
     col3 = Gtk.TreeViewColumn("Cant.", render2, text=2)
     col4 = Gtk.TreeViewColumn("Precio", render3, text=3)
     col5 = Gtk.TreeViewColumn("Devengo", render4, text=4)
     col6 = Gtk.TreeViewColumn("Deduccion", render5, text=5)
     self.vista.append_column(col1)
     self.vista.append_column(col2)
     self.vista.append_column(col3)
     self.vista.append_column(col4)
     self.vista.append_column(col5)
     self.vista.append_column(col6)
     self.vista.set_search_column(0)
     cabecera = SqlNom.ver_nomina(self.trabajador, self.mes, self.anio)
     self.lcif.set_text(SqlNom.cif)
     self.lcontrato.set_text(SqlNom.contrato.contrato.descripcion)
     ldir = SqlNom.cta_cot.centro_trabajo.dir_calle + ', ' + SqlNom.cta_cot.centro_trabajo.dir_numero
     self.ldireccion.set_text(ldir)
     self.lhoras.set_text(unicode(SqlNom.horas_cotizadas()))
     self.lidcontrato.set_text(unicode(SqlNom.contrato.codigo))
     self.lidnomina.set_text(unicode(SqlNom.id))
     self.lnaf.set_text(SqlNom.naf)
     self.lnif.set_text(SqlNom.nif)
     self.lncc.set_text(SqlNom.cta_cot.cuenta_cotizacion)
     self.lnumcontrato.set_text(unicode(SqlNom.contrato.idcontrato))
     self.lperiodo.set_text("Del " + SqlNom.periodo)
     try:
         self.lppextra.set_text("{:,.2f}".format(SqlNom.base_ppextra))
         self.lremuneracion.set_text("{:,.2f}".format(SqlNom.imp_remumes))
     except:
         pass
     self.lpuesto.set_text(SqlNom.puesto)
     self.lempresa.set_text(SqlNom.nombreempresa)
     self.ld.set_text(unicode(SqlNom.dias_cotizados()))
     self.lantiguedad.set_text(str(cabecera[2]))
     if SqlNom.contrato.contrato.es_tiempo_parcial:
         self.rb_es_tpoparcial.set_active(True)
     elif SqlNom.contrato.contrato.es_tiempo_completo:
         self.rb_es_tpocompleto.set_active(True)
     if SqlNom.contrato.contrato.es_indefinido:
         self.rb_es_indefinido.set_active(True)
     elif SqlNom.contrato.contrato.es_temporal:
         self.rb_es_temporal.set_active(True)
     self.ltrabajador.set_text(SqlNom.nombre_trabajador)
     self.lb_irpf.set_text("{:,.2f}".format(SqlNom.base_irpf))
     self.lliquido.set_text('{:,.2f}'.format(SqlNom.liquido))
     self.lb_segsoc.set_text("{:,.2f}".format(SqlNom.base_cc))
     self.vista.show()
     seleccion = self.vista.get_selection().get_selected()
     # self.tabla.show()
     # self.box14.add(self.tabla)
     self.box14.show()
예제 #24
0
 def __init__(self,
              trabajador,
              mes,
              anio,
              fornom,
              esnomina=True,
              esfiniquito=False,
              esnominapextra=False):
     self.trabajador = trabajador
     self.mes = mes
     self.anio = anio
     self.fornom = fornom
     self.gladefile = "Ventanas/nomina.glade"
     self.builder = Gtk.Builder()
     self.builder.add_from_file(self.gladefile)
     self.builder.connect_signals(self)
     self.bAceptar = self.builder.get_object("bAcepta")
     self.bBorrar = self.builder.get_object('bEliminar')
     self.bCancelar = self.builder.get_object("bCancela")
     self.bRecalcular = self.builder.get_object("bRecal")
     self.esnomina = esnomina
     self.esfiniquito = esfiniquito
     self.esnominapextra = esnominapextra
     self.lantiguedad = self.builder.get_object("lantiguedad")
     self.lidempresa = self.builder.get_object("lidempresa")
     self.lcif = self.builder.get_object("lcif")
     self.lcontrato = self.builder.get_object('lcontrato')
     self.ld = self.builder.get_object("ld")
     self.ldireccion = self.builder.get_object('ldireccion')
     self.lempresa = self.builder.get_object("lemp")
     self.lhoras = self.builder.get_object('lhoras')
     self.lidcontrato = self.builder.get_object('lidcontrato')
     self.lliquido = self.builder.get_object('lliquido')
     self.lncc = self.builder.get_object("lncc")
     self.lnif = self.builder.get_object("lnif")
     self.lnaf = self.builder.get_object("lnaf")
     self.lnumcontrato = self.builder.get_object('lnumcontrato')
     self.lidnomina = self.builder.get_object('lidnomina')
     self.lperiodo = self.builder.get_object("lper")
     self.lpuesto = self.builder.get_object('lpuesto')
     dev = SqlNominas(0)
     self.lanomina = dev.nomina_trabajador_mes(self.trabajador, self.mes,
                                               self.anio, self.esnomina,
                                               self.esfiniquito,
                                               self.esnominapextra)
     self.laempresa = dev.trabajador_empresa(self.trabajador, self.mes,
                                             self.anio)
     self.lppextra = self.builder.get_object('lppextra')
     self.lremuneracion = self.builder.get_object('lremuneracion')
     self.ltrabajador = self.builder.get_object("ltrab")
     self.lb_segsoc = self.builder.get_object("lb_segsoc")
     self.lb_irpf = self.builder.get_object("lb_irpf")
     self.rb_es_tpoparcial = self.builder.get_object("rbEs_tpoparcial")
     self.rb_es_tpocompleto = self.builder.get_object('rbEs_tpocompleto')
     self.rb_es_indefinido = self.builder.get_object('rbEs_indefinido')
     self.rb_es_temporal = self.builder.get_object('rbEs_temporal')
     self.box14 = self.builder.get_object("box14")
     self.vista = self.builder.get_object("vista")
     self.window3 = self.builder.get_object("window3")
     self.window3.show()
     if self.esnomina:
         self.nomina()
     elif self.esfiniquito:
         self.nomina()
예제 #25
0
class Bases:
    '''
    :return:
    '''
    def __init__(self, nomina):
        self.id = nomina
        self.nomina = SqlNominas(self.id)
        self.grupo_cot_id = self.nomina.grupo_cotizacion_id
        self.anio = self.nomina.fecha_anio
        self.mes = self.nomina.fecha_mes
        self.contrato_id = self.nomina.contrato_id
        self.cta_cot_id = self.nomina.cta_cot_id
        self.coef_pextra = self.nomina.cta_cot.coef_pextra
        self.lista_devengos = self.nomina.lista_devengos_nomina()
        self.lista_pextra = self.nomina.lista_pagas_extras()
        self.calendario = Calendario(self.cta_cot_id, self.anio)
        self.bases_cotizacion()

    def __call__(self, nomina):
        self.__init__(nomina)

    def bases_cotizacion(self):
        '''
        :return:
        '''
        self.base_irpf = 0
        self.base_remuneracion = 0
        self.base_irpf_especie = 0
        self.base_ppextra = 0
        self.base_irpf_segsoc = 0
        self.base_segsoc_sinirpf = 0
        self.base_irpf_sinsegsoc = 0
        self.no_cotizan = 0
        self.nomina.actualiza_ppextra()
        self.nomina = SqlNominas(self.id)
        self.base_ppextra = self.nomina.base_ppextra
        # Para calcular las bases de cotización distinguimos entre devengos y pagas extras
        # Comprobamos que los devengos cotizan a la seguridad social al igual que las pagas extras
        # Comprobamos que los devengos cotizan en el IRPF al igual que las pagas extras
        # Los prorrateos de pagas extras se calculan en SqlNominas.devengo_ppextra()
        for x in (self.lista_devengos + self.lista_pextra):
            devengo = Nomina_Devengo(x[0])
            print '    ....****>>>> Devengo/segsoc/irpf', devengo.concepto, devengo.cotiza_segsocial, devengo.cotiza_irpf
            if devengo.cotiza_segsocial:
                self.base_remuneracion = self.base_remuneracion + devengo.devengado
            if devengo.cotiza_irpf:
                if devengo.es_devengo_especie:
                    self.base_irpf_especie = self.base_irpf_especie + devengo.devengado
                else:
                    self.base_irpf = self.base_irpf + devengo.devengado
            if devengo.cotiza_irpf and devengo.cotiza_segsocial:
                self.base_irpf_segsoc = self.base_irpf_segsoc + devengo.devengado
            if not devengo.cotiza_irpf and devengo.cotiza_segsocial:
                self.base_segsoc_sinirpf = self.base_segsoc_sinirpf + devengo.devengado
            if devengo.cotiza_irpf and not devengo.cotiza_segsocial:
                self.base_irpf_sinsegsoc = self.base_irpf_sinsegsoc + devengo.devengado
            if not devengo.cotiza_irpf and not devengo.cotiza_segsocial:
                self.no_cotizan = self.no_cotizan + devengo.devengado

        self.base_segsocial = self.base_ppextra + self.base_remuneracion

    def base_it(self):
        base_it_tot = 0
        try:
            self.it_nomina = It_nomina(self.id)
            self.dias_pendientes = self.it_nomina.it_dias_pendientes
            dias_acumulados = self.it_nomina.it_dias_acumulados
            dias_aplicados = dias_acumulados - self.dias_pendientes
            base_it_dia = self.it_nomina.it.basecot_diaria_it
            if self.it_nomina.it.es_cont_comun:
                sql = ("Select "
                       "desdedia, hastadia, porcentaje "
                       "From "
                       "tb_it "
                       "Where "
                       "es_contcomun "
                       "order by desdedia ")
                dato = select_sql(sql, 1)
                for j in dato:
                    if j[0] >= dias_aplicados and self.dias_pendientes > 0:
                        if (j[1] - j[0] + 1) >= self.dias_pendientes:
                            base_it_tot += base_it_dia * j[
                                2] * self.dias_pendientes
                            dias_aplicados = dias_aplicados + self.dias_pendientes
                            self.dias_pendientes = self.dias_pendientes - self.dias_pendientes
                        else:
                            base_it_tot += base_it_dia * j[2] * (j[1] - j[0] +
                                                                 1)
                            dias_aplicados = dias_aplicados + j[1] - j[0] + 1
                            self.dias_pendientes -= dias_aplicados
            if self.it_registro.es_enfermedad_prof:
                pass
        except:
            pass
        return base_it_tot

    def no_cotizan(self):
        """
        Devengos que no cotizan ni en seguridad social ni en irpf
        """
        sql = ("SELECT "
               "sum(imp_devengo) as importe "
               "FROM "
               "nomina_devengos "
               "WHERE "
               "esdevengo "
               "and (not cont_com "
               "AND not irpf) "
               "and idnomina = %s;")
        dato = select_sql((sql, (self.id)))[0]
        if dato is None:
            dato = 0
        return dato

    def control_base_min_max(self):
        sql = ("Select "
               "B.idtb_grupocot_base "
               "From "
               "tb_grupos_cotizacion A "
               "inner join "
               "tb_gruposcot_bases B"
               "on A.idgrupos_cotizacion = B.idtb_grupo_cotizacion "
               "Where "
               "A.idgrupos_cotizacion = %s "
               "and B.ejercicio = %s ")
        dato = select_sql((sql, (self.grupo_cot_id, self.anio)))[0]
        self.grupo_cot_bases = Grupo_cotizacion_bases(dato)
예제 #26
0
    def calc_dietas(self, nomina):
        """
         Se tienen en cuenta:
       1. Bases que cotizan en seg.social e irpf (incluidas las pagas extras)
       2. Bases que solo cotizan en seg. social o irpf
       3. Bases que no cotizan ni en seg.social ni en irpf
       4. Bases para las pagas extras
       5. Tipos de cotizacion
        """
        bd = Basedatos()
        cursor = bd.conectar()
        # -----------   1. Bases que cotizan en seg.social e irpf
        costes = CostesSegSocial(nomina)
        self.b_segsoc_irpf = costes.bases.base_irpf_segsoc
        print "    Base segsoc, irpf", self.b_segsoc_irpf
        if not self.b_segsoc_irpf:
            self.b_segsoc_irpf = 0

        # ------------  2a. Bases que cotizan solo en seg.social
        self.b_segsoc = costes.bases.base_segsoc_sinirpf
        print "    Base segsoc", self.b_segsoc
        if not self.b_segsoc:
            self.b_segsoc = 0

        # ------------   2b. Bases que cotizan solo en irpf
        self.b_irpf = costes.bases.base_irpf_sinsegsoc
        print "    Base irpf", self.b_irpf
        if not self.b_irpf:
            self.b_irpf = 0

        # ------------   3. Bases que no cotizan ni en seg.social ni en irpf
        self.base = costes.bases.no_cotizan
        print "    Bases ", self.base
        if not self.base:
            self.base = 0

        # ------------  Tipos de cotizacion seg. social
        self.tipo_segsoc = costes.tipo_ccomun_trab
        self.tipo_segsoc = self.tipo_segsoc + costes.tipo_desempleo_trab
        self.tipo_segsoc = self.tipo_segsoc + costes.tipo_fp_trab
        self.tipo_segsoc /= 100
        print "    Tipo seg_social ", self.tipo_segsoc

        # -----------  Tipos de irpf
        self.tipo_irpf = self.nomina.tipo_irpf(nomina) / 100
        print "    Tipo irpf ", self.tipo_irpf

        # ----------  Calculo de dietas
        SN = SqlNominas(nomina)
        devengo = costes.bases.nomina.total_devengos
        print "    ********* Devengo", devengo
        neto = SN.contrato.liquido_a_cobrar
        print "    ********* Neto", neto
        basess = costes.base_cotizacion
        baseirpf = costes.bases.base_irpf
        """
        self.dietas = (self.neto - (self.b_segsoc_irpf *
                     (1 - self.tipo_segsoc - self.tipo_irpf)) -
                      (self.b_segsoc * (1 - self.tipo_segsoc)) +
                      (self.ppextra * self.tipo_segsoc) -
                      (self.b_irpf * (1 - self.tipo_irpf)) -
                      self.base)
        """
        self.dietas = (neto - devengo + basess * self.tipo_segsoc + baseirpf * self.tipo_irpf) / (
                        1 - self.tipo_segsoc - self.tipo_irpf)
        print "    Dietas", self.dietas
        sql = ("SELECT irpf, cont_com "
               "FROM nomina_devengos "
               "WHERE esdieta and idnomina = %s;")
        cursor.execute(sql, (nomina))
        self.coef_dieta = cursor.fetchone()
        if self.coef_dieta[0] == '\x00':
            self.tipo_irpf = 0
        if self.coef_dieta[1] == '\x00':
            self.tipo_segsoc = 0
        #self.dietas = self.dietas / (1 - self.tipo_segsoc - self.tipo_irpf)
        sql = ("UPDATE nomina_devengos "
               "SET imp_precio = %s, imp_devengo = %s, importe = %s "
               "WHERE idnomina=%s and esdieta ")
        cursor.execute(sql, (self.dietas, self.dietas, self.dietas, nomina))
        bd.desconectar()
        print "    Fin calculo dietas ... ", self.dietas
예제 #27
0
 def nomina(self):
     self.lista = Gtk.ListStore(long, str, str, str, str, str)
     render0 = Gtk.CellRendererText()
     render0.set_property("xalign", 1.0)
     render0.set_property("visible", False)
     render1 = Gtk.CellRendererText()
     render1.set_property("xalign", 0)
     render2 = Gtk.CellRendererText()
     render2.set_property("xalign", 1.0)
     render2.set_property("editable", True)
     render2.connect('edited', self.col2_edited_cb, self.lista)
     render3 = Gtk.CellRendererText()
     render3.set_property("xalign", 1.0)
     render3.set_property("editable", True)
     render3.connect('edited', self.col3_edited_cb, self.lista)
     render4 = Gtk.CellRendererText()
     render4.set_property("xalign", 1.0)
     render5 = Gtk.CellRendererText()
     render5.set_property("xalign", 1.0)
     SqlNom = SqlNominas(self.lanomina)
     #devengos = SqlNom.ver_devengos(self.trabajador, self.mes, self.anio)
     # self.tabla = Gtk.Table(len(devengos[0]),len(devengos))
     lista_devengos = SqlNom.lista_devengos_nomina() + SqlNom.lista_pagas_extras()
     for k in lista_devengos:
         contenido = []
         devengo = Nomina_Devengo(k[0])
         #for l in k:
             # entrada = Gtk.Label(devengos[t][p])
             # self.tabla.attach(entrada,p,p+1,t,t+1)
             # entrada.show()
             # print "Dev",devengos[t][p],t, p
         #if isinstance(devengo.precio, float):
         #        l = "{0:,.2f}".format(l)
         decimales = '{0:,.2f}'
         contenido.append(devengo.id)
         contenido.append(devengo.concepto)
         contenido.append(decimales.format(devengo.cuantia))
         contenido.append(decimales.format(devengo.precio))
         contenido.append(decimales.format(devengo.devengado))
         contenido.append(decimales.format(devengo.deducido))
         self.lista.append(contenido)
     self.vista.set_model(self.lista)
     col1 = Gtk.TreeViewColumn("Num.", render0, text=0)
     col2 = Gtk.TreeViewColumn("Concepto", render1, text=1)
     col3 = Gtk.TreeViewColumn("Cant.", render2, text=2)
     col4 = Gtk.TreeViewColumn("Precio", render3, text=3)
     col5 = Gtk.TreeViewColumn("Devengo", render4, text=4)
     col6 = Gtk.TreeViewColumn("Deduccion", render5, text=5)
     self.vista.append_column(col1)
     self.vista.append_column(col2)
     self.vista.append_column(col3)
     self.vista.append_column(col4)
     self.vista.append_column(col5)
     self.vista.append_column(col6)
     self.vista.set_search_column(0)
     cabecera = SqlNom.ver_nomina(self.trabajador, self.mes, self.anio)
     self.lcif.set_text(SqlNom.cif)
     self.lcontrato.set_text(SqlNom.contrato.contrato.descripcion)
     ldir = SqlNom.cta_cot.centro_trabajo.dir_calle + ', ' + SqlNom.cta_cot.centro_trabajo.dir_numero
     self.ldireccion.set_text(ldir)
     self.lhoras.set_text(unicode(SqlNom.horas_cotizadas()))
     self.lidcontrato.set_text(unicode(SqlNom.contrato.codigo))
     self.lidnomina.set_text(unicode(SqlNom.id))
     self.lnaf.set_text(SqlNom.naf)
     self.lnif.set_text(SqlNom.nif)
     self.lncc.set_text(SqlNom.cta_cot.cuenta_cotizacion)
     self.lnumcontrato.set_text(unicode(SqlNom.contrato.idcontrato))
     self.lperiodo.set_text("Del " + SqlNom.periodo)
     try:
         self.lppextra.set_text("{:,.2f}".format(SqlNom.base_ppextra))
         self.lremuneracion.set_text("{:,.2f}".format(SqlNom.imp_remumes))
     except:
         pass
     self.lpuesto.set_text(SqlNom.puesto)
     self.lempresa.set_text(SqlNom.nombreempresa)
     self.ld.set_text(unicode(SqlNom.dias_cotizados()))
     self.lantiguedad.set_text(str(cabecera[2]))
     if SqlNom.contrato.contrato.es_tiempo_parcial:
         self.rb_es_tpoparcial.set_active(True)
     elif SqlNom.contrato.contrato.es_tiempo_completo:
         self.rb_es_tpocompleto.set_active(True)
     if SqlNom.contrato.contrato.es_indefinido:
         self.rb_es_indefinido.set_active(True)
     elif SqlNom.contrato.contrato.es_temporal:
         self.rb_es_temporal.set_active(True)
     self.ltrabajador.set_text(SqlNom.nombre_trabajador)
     self.lb_irpf.set_text("{:,.2f}".format(SqlNom.base_irpf))
     self.lliquido.set_text('{:,.2f}'.format(SqlNom.liquido))
     self.lb_segsoc.set_text("{:,.2f}".format(SqlNom.base_cc))
     self.vista.show()
     seleccion = self.vista.get_selection().get_selected()
     # self.tabla.show()
     # self.box14.add(self.tabla)
     self.box14.show()
예제 #28
0
class nomina:
    def __init__(self, nomina):
        self.idnomina = nomina
        self.datos = SqlNominas(self.idnomina)
        self.anio = self.datos.fecha_anio(self.idnomina)
        self.mes = self.datos.fecha_mes(self.idnomina)
        self.dia_inicial = self.datos.periodos(self.anio, self.mes, self.idnomina)[0]
        self.dia_final = self.datos.periodos(self.anio, self.mes, self.idnomina)[1]
        self.fecha = self.datos.periodos(self.anio, self.mes, self.idnomina)[1]

    def banco_trabajador(self):
        self.iban
        self.entidad
        self.oficina
        self.dc
        self.numero
        self.tlf
    def devengos(self):
        self.concepto
        self.cantidad
        self.importe
        self.total
    def deducciones(self):
        self.cont_comunes_porcentaje
        self.cont_comunes_importe
        self.form_profesional_porcentaje
        self.form_profesional_importe
        self.desempleo_porcentaje
        self.desempleo_importe
        self.irpfdinerarias_porcetaje
        self.irpfdinerarias_importe
        self.irpfespecie_porcentaje
        self.irpfespecie_importe
        self.anticipos
    def bases(self):
        self.rem_mensual
        self.pror_pagasextras
        self.cont_comunes
        self.form_profesional
        self.desempleo
        self.irpf
    def aportacion_empresa(self):
        self.cont_comunes_porcentaje
        self.cont_comunes_importe
        self.desempleo_porcentaje
        self.desempleo_importe
        self.form_profesional_porcentaje
        self.form_profesional_importe
        self.fogasa_porcentaje
        self.fogasa_importe
    def totalnomina(self):
        self.devengado
        self.deducible
        self.liquido
    def calcular(self):
        calc_nomina(self.empresa().id, self.mes, self.anio)
    def imprimir(self):
        SqlNom = SqlNominas()
        self.formulario
        self.canvas = canvas.Canvas("nomina.pdf", pagesize=A4)
        impr_nomina(self.canvas,
                    self.empresa().id,
                    self.mes,
                    self.anio,
                    self.formulario,
                    SqlNom.nomina_trabajador_mes(self.trabajador().id, self.mes, self.anio)
                    )
        self.canvas.save()
        print os.name
        os.system("/usr/bin/evince nomina.pdf")
    def salida_pantalla(self):
        vernomina(self.trabajador.id, self.mes, self.anio, self.formulario)
예제 #29
0
class CalcNomina:
    """
    Proceso que calcula las nóminas de una empresa en un mes y en un anio
    concretos
    """

    def __init__(self, empresa, mes, anio, esnomina=True, esfiniquito=False, esnominapextra=False):
        self.empresa = empresa
        self.dia = ultimodiames(mes, anio)
        self.mes = mes
        self.anio = anio
        self.nomina = SqlNominas(0)
        self.NomDev = Nomina_Devengo
        self.num_nominas = Contrato(0).contratos_activos_mes(self.empresa, self.anio, self.mes)
        self.fecha = str(self.anio) + "-" + str(self.mes) + "-" + str(self.dia)
        locale.setlocale(locale.LC_ALL, 'es_ES.UTF-8')
        self.estemes = time.strftime("%B", time.strptime(str(self.mes) + ',' + str(self.anio), '%m,%Y'))
        self.esnomina = esnomina
        self.esfiniquito = esfiniquito
        self.esnominapextra = esnominapextra
        self.borrarnominas = NomBorrar(self.empresa, self.mes, self.anio, 0, self.esnomina, self.esfiniquito,
                                       self.esnominapextra)
        print "Empieza el calculo ..."

    def calcular(self):
        """
        El proceso de calcular raliza 3 tareas:
           1. Elimina los registros de la nómina a calcular si los hubiera
           2. Inserta los nuevos registros de la nómina a calcular tomando
              los datos de:
              a) los devengos de la empresa
              b) los dias de it de los trabajadores en la empresa
              c) pagas extras de la empresa
           3. Realiza el cálculo de todos los devengos y deducciones
        """
        self.borrarnominas.borrar_mes()
        self.alta_nomina = Alta(self.mes, self.anio, self.empresa, 0, self.esnomina, self.esfiniquito,
                                self.esnominapextra)
        self.recalcular()
        return

    def recalcular(self):
        try:
            nominas = self.nomina.nominas_empresa_mes(self.empresa, self.mes,
                                                      self.anio, self.esnomina, self.esfiniquito, self.esnominapextra)
            print "****************************  Recalculando  ******************"
            try:
                for j in nominas:
                    self.update_devengos(j[0])
            except:
                md = Gtk.MessageDialog(None, Gtk.DIALOG_DESTROY_WITH_PARENT,
                                       Gtk.MESSAGE_ERROR, Gtk.BUTTONS_CLOSE, "Error, no se pudo conectar")
                pass
        except:
            print "No se ha recalculado...."

    def actual_dietas(self, nomina):
        # --------- Calculo de las dietas dado un importe fijo neto
        SN = SqlNominas(nomina)
        neto = SN.contrato.liquido_a_cobrar
        if neto > 0:
            self.calc_dietas(nomina)
            print "Volvemos a actualizar"
            Actualizar(nomina)
        else:
            print "    No hay dietas ...."

    def calc_minimos_cotizacion(self, nomina, base_cot):
        # --------- Calculo de las bases minimas de cotizacion
        horas_cot = self.nomina.horas_cotizadas()
        dias_cot = self.nomina.dias_cotizados()
        if horas_cot:
            sql = ("SELECT tb_grupos_cotizacion.base_min_hora, nominas.base_cc "
                   "FROM Nominas.nominas "
                   "left join tb_grupos_cotizacion "
                   "on nominas.idgrupos_cotizacion = tb_grupos_cotizacion.idgrupos_cotizacion "
                   "where nominas.idnomina = %s;")
            base_min = select_sql((sql, (nomina)))[0]
            if base_cot / horas_cot < base_min:
                base_cot = base_min * horas_cot
        elif dias_cot:
            sql = ("SELECT tb_grupos_cotizacion.base_min_dia, nominas.base_cc "
                   "FROM Nominas.nominas "
                   "left join tb_grupos_cotizacion "
                   "on nominas.idgrupos_cotizacion = tb_grupos_cotizacion.idgrupos_cotizacion "
                   "where nominas.idnomina = %s;")
            base_min = select_sql((sql, (nomina)))[0]
            if base_cot / dias_cot < base_min:
                base_cot = base_min * dias_cot
        return base_cot

    def calc_liquido(self, nomina):
        # ------------ Calculo Total Liquido
        self.nomina(nomina)
        self.liquido = self.nomina.actualiza_liquido(nomina)
        if self.liquido == 0:
            sql = ("UPDATE nominas "
                   "SET liquido = imp_totdev - tot_deducir "
                   "WHERE idnomina = %s ")
            select_sql((sql, (nomina)))

    # Calculo nuevo de los devengos de las nominas
    def update_devengos(self, nomina):
        print "Actualizamos precios, cuantias y devengos ....", nomina
        self.actualizar = Actualizar(nomina)

        print "Calcula dietas ..."
        self.actual_dietas(nomina)

        print "Calcula liquido nomina ..."
        self.calc_liquido(nomina)

    def calc_dietas(self, nomina):
        """
         Se tienen en cuenta:
       1. Bases que cotizan en seg.social e irpf (incluidas las pagas extras)
       2. Bases que solo cotizan en seg. social o irpf
       3. Bases que no cotizan ni en seg.social ni en irpf
       4. Bases para las pagas extras
       5. Tipos de cotizacion
        """
        bd = Basedatos()
        cursor = bd.conectar()
        # -----------   1. Bases que cotizan en seg.social e irpf
        costes = CostesSegSocial(nomina)
        self.b_segsoc_irpf = costes.bases.base_irpf_segsoc
        print "    Base segsoc, irpf", self.b_segsoc_irpf
        if not self.b_segsoc_irpf:
            self.b_segsoc_irpf = 0

        # ------------  2a. Bases que cotizan solo en seg.social
        self.b_segsoc = costes.bases.base_segsoc_sinirpf
        print "    Base segsoc", self.b_segsoc
        if not self.b_segsoc:
            self.b_segsoc = 0

        # ------------   2b. Bases que cotizan solo en irpf
        self.b_irpf = costes.bases.base_irpf_sinsegsoc
        print "    Base irpf", self.b_irpf
        if not self.b_irpf:
            self.b_irpf = 0

        # ------------   3. Bases que no cotizan ni en seg.social ni en irpf
        self.base = costes.bases.no_cotizan
        print "    Bases ", self.base
        if not self.base:
            self.base = 0

        # ------------  Tipos de cotizacion seg. social
        self.tipo_segsoc = costes.tipo_ccomun_trab
        self.tipo_segsoc = self.tipo_segsoc + costes.tipo_desempleo_trab
        self.tipo_segsoc = self.tipo_segsoc + costes.tipo_fp_trab
        self.tipo_segsoc /= 100
        print "    Tipo seg_social ", self.tipo_segsoc

        # -----------  Tipos de irpf
        self.tipo_irpf = self.nomina.tipo_irpf(nomina) / 100
        print "    Tipo irpf ", self.tipo_irpf

        # ----------  Calculo de dietas
        SN = SqlNominas(nomina)
        devengo = costes.bases.nomina.total_devengos
        print "    ********* Devengo", devengo
        neto = SN.contrato.liquido_a_cobrar
        print "    ********* Neto", neto
        basess = costes.base_cotizacion
        baseirpf = costes.bases.base_irpf
        """
        self.dietas = (self.neto - (self.b_segsoc_irpf *
                     (1 - self.tipo_segsoc - self.tipo_irpf)) -
                      (self.b_segsoc * (1 - self.tipo_segsoc)) +
                      (self.ppextra * self.tipo_segsoc) -
                      (self.b_irpf * (1 - self.tipo_irpf)) -
                      self.base)
        """
        self.dietas = (neto - devengo + basess * self.tipo_segsoc + baseirpf * self.tipo_irpf) / (
                        1 - self.tipo_segsoc - self.tipo_irpf)
        print "    Dietas", self.dietas
        sql = ("SELECT irpf, cont_com "
               "FROM nomina_devengos "
               "WHERE esdieta and idnomina = %s;")
        cursor.execute(sql, (nomina))
        self.coef_dieta = cursor.fetchone()
        if self.coef_dieta[0] == '\x00':
            self.tipo_irpf = 0
        if self.coef_dieta[1] == '\x00':
            self.tipo_segsoc = 0
        #self.dietas = self.dietas / (1 - self.tipo_segsoc - self.tipo_irpf)
        sql = ("UPDATE nomina_devengos "
               "SET imp_precio = %s, imp_devengo = %s, importe = %s "
               "WHERE idnomina=%s and esdieta ")
        cursor.execute(sql, (self.dietas, self.dietas, self.dietas, nomina))
        bd.desconectar()
        print "    Fin calculo dietas ... ", self.dietas
예제 #30
0
    def datos(self, c, num_empresa, mes, anio, formnom, es_una_nomina):
        # introducimos los datos en el formato que imprime solo nominas y no finiquitos
        # para imprimir finiquito ha de seleccionar una a una la nomina
        nominas = SqlNominas(0).idnom_mes(self.num_empresa, self.mes, self.anio, es_una_nomina)
        y = 0
        for p in nominas:
            FormNomina(formnom).formnomina_listaid(c) # pintamos todas las cajas
            celdas = FormNomina(formnom).formnomina_listatablas()    # preparamos la impresion de los campos de las tablas
            z = 0
            for j in celdas:
                dataform = FormCelda(j[0])
                if dataform.formconcepto_id:  # si hay un concepto de formulario enlazado
                    sql = ("Select " + dataform.campo + ", ancho_dato, "
                           "    datoalineacion, idform_celda, orden, concepto, print_etiqueta "
                           "from "
                           "    form_nomina_celda A "
                           "        inner join "
                           "            nomina_devengos B "
                           "            on convert(A.dato, unsigned integer) = B.idform_concepto "
                           "where "
                           "    idform_concepto = %s "
                           "    and idnomina = %s "
                           "group by "
                           "    concepto ")
                    valores = select_sql((sql, (dataform.formconcepto_id, p[0])), 1)
                    if valores:
                        for h in valores:
                            if dataform.label_print:
                                self.concepto(dataform.formconcepto_id, p[0], h[4],
                                              dataform.dato_ancho, c, dataform.id, dataform.label_print)
                            self.valorcelda(dataform.formconcepto_id, p[0], c, dataform.id, dataform.campo)

                else:
                    sql = (
                           "Select " + dataform.campo + ", idnomina "
                           " from " + dataform.tabla +
                           " where idnomina = " + unicode(p[0])
                           )
                    valores = select_sql(sql, 1)
                    if valores:
                        for h in valores:
                            self.valorcelda(dataform.formconcepto_id, p[0], c, dataform.id, dataform.campo)
                try:
                    pass
                    #self.valorcelda(dataform.formconcepto_id, nominas[y][0], c, dataform.id, dataform.campo)
                except MySQLdb.Error, e:
                    print "Error",e
                    sql = ("Select " + dataform.campo + ", orden "
                            "from nomina_devengos "
                            "where idnomina = %s;")

                    try:
                        concept = select_sql((sql, (nominas[y][0])), 1)
                        w = 0
                        for k in concept:
                            print 'Paso por aqui'
                            self.concepto(dataform.formconcepto_id,
                                              nominas[y][0],
                                              w[1],
                                              dataform.dato_ancho,
                                              c, dataform.id,
                                              dataform.label_print)
                            w += 1
                    except MySQLdb.Error, e:
                        print "Error",e
                z += 1
예제 #31
0
class Alta:
    """
    classdocs
    """
    def __init__(self,
                 mes,
                 anio,
                 empresa,
                 trabajador=0,
                 esnomina=True,
                 esfiniquito=False,
                 esnominapextra=False):
        """
        Constructor
        """
        self.mes = mes
        self.anio = anio
        self.dia = ultimodiames(mes, anio)
        self.fecha = str(self.anio) + "-" + str(self.mes) + "-" + str(self.dia)
        self.empresa = empresa
        self.es_finiquito = esfiniquito
        self.es_nomina = esnomina
        self.es_nominapextra = esnominapextra
        locale.setlocale(locale.LC_ALL, 'es_ES.UTF-8')
        self.estemes = time.strftime(
            "%B", time.strptime(str(self.mes) + ',' + str(self.anio), '%m,%Y'))
        self.trabajador_id = trabajador
        self.SqlNom = SqlNominas()
        self.cabecera = Cabecera(self.empresa, self.mes, self.anio,
                                 self.trabajador_id)
        print "*********** ALTA NOMINA **************"
        print 'Nomina:', self.es_nomina, '         Finiquito:', self.es_finiquito
        self.nominas_empresa()

    def nominas_empresa(self):
        """
        1. Insertamos las cabeceras de las nominas sin calculos
           basados en los contratos de la empresa ACTUALIZADOS
        """
        print "insertamos los nuevos registros ...."
        f = self.cabecera.nomina(self.es_nomina, self.es_finiquito,
                                 self.es_nominapextra)
        sql = "Select max(idnomina) as maxid from nominas"
        j = select_sql(sql)[0]

        if not j:
            j = 0
        for filas in f:
            j += 1  # numero de nomina o idnomina
            print "Insertamos las cabeceras de la nomina ************************", j
            sql = ('INSERT INTO nominas '
                   '(`idnomina`, `idempresa`, `idemp_contratos`, '
                   '`idgrupos_cotizacion`, `idtb_epigrafe`, `antig`, '
                   '`descripcion`, `liquido`, `naf`, `tarifa`, `epigrafe`, '
                   '`matricula`, `nombre`, `categoria`, `dni`, `empresa`, '
                   '`dir`, `cta_cot`, `cif`, fecha, idcta_cot, es_finiquito) '
                   'VALUES '
                   '(%s ,%s, %s, %s, %s, %s, %s, %s, %s, %s, '
                   '%s ,%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)')
            select_sql(
                (sql,
                 (j, filas[0], filas[1], filas[2], filas[3], str(filas[4]),
                  ("Nominas de " + self.estemes + " de " + str(self.anio)),
                  filas[5], filas[6], filas[7], filas[8], filas[9], filas[10],
                  filas[11], filas[12], filas[13], filas[14], filas[15],
                  filas[16], self.fecha, filas[18], self.es_finiquito)))
            # Comprobamos si el contrato es de jornada parcial
            self.SqlNom(j)
            z = self.SqlNom.nomina_a_tiempo_parcial()

            # ## Insertamos los devengos de nominas
            print "Insertamos los devengos de nominas ***************************", j, self.SqlNom.contrato.trabajador.nombre
            """
        2. Insertamos los devengos de las nominas a las nóminas a calcular
            """
            sql = ('SELECT '
                   'idemp_devengo, orden, concepto, importe, irpf, cont_com, '
                   'desempleo, fp, fgs, it, ims, ppextra, mensual, diario, '
                   'horas, idemp_pextra, dias_efectivos, dias_naturales, '
                   'esdevengo, esirpf, esdieta, esespecie, esporcentaje, '
                   'esmanual, coef_pextra, fraccionhoras, idform_concepto, '
                   'esvacaciones, pagavacaciones, es_complemento_it_cc, '
                   'es_complemento_it_ef, es_indemnizacion '
                   'FROM '
                   'emp_devengos '
                   'WHERE '
                   'idemp_contrato = %s ')
            sql1 = sql + ('and '
                          '(esdevengo '
                          'and not es_indemnizacion '
                          'and not esvacaciones '
                          'and not es_complemento_it_cc '
                          'and not es_complemento_it_ef '
                          'and (not idemp_pextra or idemp_pextra is null)) ')

            sql1 += 'ORDER by idemp_contrato, orden '
            h = select_sql((sql1, (filas[1])), 1)
            k = select_sql("Select max(idnomina_devengo) + 1 "
                           "from nomina_devengos")[0]
            orden = 0
            sql2 = ("INSERT INTO nomina_devengos "
                    "(`idnomina_devengo`, `idnomina`, `idemp_devengo`, "
                    "`orden`, `concepto`, `importe`, `irpf`, `cont_com`, "
                    "`desempleo`,`fp`, `fgs`, `it`, `ims`, `ppextra`, "
                    "`mensual`, `diario`, `horas`, `idemp_pextra`, "
                    "`dias_efectivos`, `dias_naturales`, `esdevengo`, "
                    "esirpf, esdieta, esespecie, esporcentaje, esmanual, "
                    "coef_pextra, fraccionhoras, idform_concepto, "
                    "esvacaciones, pagavacaciones, es_complemento_it_cc, "
                    "es_complemento_it_ef, es_indemnizacion) "
                    "VALUES "
                    "(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, "
                    "%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, "
                    "%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, "
                    "%s, %s, %s, %s)")
            print "*********************** Devengos "
            if self.es_nomina:
                for col in h:
                    print '    ', col[2], col[3]
                    orden += 1
                    if not k:
                        k = 1
                    else:
                        k += 1

                    campos = (k, j, col[0], orden, col[2], col[3], col[4],
                              col[5], col[6], col[7], col[8], col[9], col[10],
                              col[11], col[12], col[13], z, col[15], col[16],
                              col[17], col[18], col[19], col[20], col[21],
                              col[22], col[23], col[24], col[25], col[26],
                              col[27], col[28], col[29], col[30], col[31])
                    select_sql((sql2, campos))
            """
        3. Insertamos las pagas extras si están prorrateadas de las nóminas a calcular o es finiquito o es nomina
            """
            contrato = Contrato(filas[1])
            if (contrato.con_prorrata_pextra
                    or (not contrato.con_prorrata_pextra and self.es_finiquito)
                    or self.es_nominapextra):
                print "*********************** Prorrateo pagas extras / Finiquito "
                sql1 = sql + ("and "
                              "(esdevengo "
                              "and not es_indemnizacion "
                              "and not esvacaciones "
                              "and not es_complemento_it_cc "
                              "and not es_complemento_it_ef "
                              "and  idemp_pextra) "
                              "ORDER by "
                              "orden")
                h = select_sql((sql1, (filas[1])), 1)
                k = select_sql("Select max(idnomina_devengo) "
                               "from nomina_devengos")[0]
                for col in h:
                    print '    ', col[2], col[3]
                    orden += 1
                    if not k:
                        k = 1
                    else:
                        k += 1
                    campos = (k, j, col[0], orden, col[2], col[3], col[4],
                              col[5], col[6], col[7], col[8], col[9], col[10],
                              col[11], col[12], col[13], z, col[15], col[16],
                              col[17], col[18], col[19], col[20], col[21],
                              col[22], col[23], col[24], col[25], col[26],
                              col[27], col[28], col[29], col[30], col[31])
                    select_sql((sql2, campos))
            """
        4. Insertamos los devengos si hay baja por enfermedad
            """
            # Comprobamos si hay baja por IT
            base = Bases(j)
            print "*********************** Bases"
            try:
                base.it_nomina.it_dias_mes
                print "*********************** IT "
                sql1 = sql + ("and es_complemento_it_cc "
                              "ORDER by "
                              "idemp_contrato, orden")
                h = select_sql((sql1, (filas[1])), 1)
                k = select_sql("Select max(idnomina_devengo) "
                               "from nomina_devengos")[0]
                for col in h:
                    print '    ', col[2], col[3]
                    orden += 1
                    if not k:
                        k = 1
                    else:
                        k += 1
                    campos = (k, j, col[0], orden, col[2], col[3], col[4],
                              col[5], col[6], col[7], col[8], col[9], col[10],
                              col[11], col[12], col[13], z, col[15], col[16],
                              col[17], col[18], col[19], col[20], col[21],
                              col[22], col[23], col[24], col[25], col[26],
                              col[27], col[28], col[29], col[30], col[31])
                    select_sql((sql2, campos))
            except:
                pass
            '''
            5. Insertamos la indemnización si es un finiquito
            '''
            print "*********************** Indemnizacion Finiquito"
            if self.es_finiquito:
                sql1 = sql + (" and (es_indemnizacion "
                              " or esvacaciones) "
                              " ORDER by "
                              " idemp_contrato, orden ")
                h = select_sql((sql1, (filas[1])), 1)
                k = select_sql("Select max(idnomina_devengo) "
                               "from nomina_devengos")[0]
                for col in h:
                    print '    ', col[2], col[3]
                    orden += 1
                    if not k:
                        k = 1
                    else:
                        k += 1
                    campos = (k, j, col[0], orden, col[2], col[3], col[4],
                              col[5], col[6], col[7], col[8], col[9], col[10],
                              col[11], col[12], col[13], z, col[15], col[16],
                              col[17], col[18], col[19], col[20], col[21],
                              col[22], col[23], col[24], col[25], col[26],
                              col[27], col[28], col[29], col[30], col[31])
                    select_sql((sql2, campos))
            """
            6. Insertamos las deducciones
            """

            sql1 = sql + ("and not esdevengo "
                          "ORDER by "
                          "idemp_contrato, orden")
            h = select_sql((sql1, (filas[1])), 1)
            k = select_sql("Select max(idnomina_devengo) + 1 "
                           "from nomina_devengos")[0]
            print "*********************** Deducciones "

            for col in h:
                print '    ', col[2], col[3]
                orden += 1
                if not k:
                    k = 1
                else:
                    k += 1
                campos = (k, j, col[0], orden, col[2], col[3], col[4], col[5],
                          col[6], col[7], col[8], col[9], col[10], col[11],
                          col[12], col[13], z, col[15], col[16], col[17],
                          col[18], col[19], col[20], col[21], col[22], col[23],
                          col[24], col[25], col[26], col[27], col[28], col[29],
                          col[30], col[31])
                select_sql((sql2, campos))
        # self.actualizar = Actualizar(j)
        return
예제 #32
0
class Bases:
    '''
    :return:
    '''
    def __init__(self, nomina):
        self.id = nomina
        self.nomina = SqlNominas(self.id)
        self.grupo_cot_id = self.nomina.grupo_cotizacion_id
        self.anio = self.nomina.fecha_anio
        self.mes = self.nomina.fecha_mes
        self.contrato_id = self.nomina.contrato_id
        self.cta_cot_id = self.nomina.cta_cot_id
        self.coef_pextra = self.nomina.cta_cot.coef_pextra
        self.lista_devengos = self.nomina.lista_devengos_nomina()
        self.lista_pextra = self.nomina.lista_pagas_extras()
        self.calendario = Calendario(self.cta_cot_id, self.anio)
        self.bases_cotizacion()

    def __call__(self, nomina):
        self.__init__(nomina)

    def bases_cotizacion(self):
        '''
        :return:
        '''
        self.base_irpf = 0
        self.base_remuneracion = 0
        self.base_irpf_especie = 0
        self.base_ppextra = 0
        self.base_irpf_segsoc = 0
        self.base_segsoc_sinirpf = 0
        self.base_irpf_sinsegsoc = 0
        self.no_cotizan = 0
        self.nomina.actualiza_ppextra()
        self.nomina = SqlNominas(self.id)
        self.base_ppextra = self.nomina.base_ppextra
        # Para calcular las bases de cotización distinguimos entre devengos y pagas extras
        # Comprobamos que los devengos cotizan a la seguridad social al igual que las pagas extras
        # Comprobamos que los devengos cotizan en el IRPF al igual que las pagas extras
        # Los prorrateos de pagas extras se calculan en SqlNominas.devengo_ppextra()
        for x in (self.lista_devengos + self.lista_pextra):
            devengo = Nomina_Devengo(x[0])
            print '    ....****>>>> Devengo/segsoc/irpf', devengo.concepto, devengo.cotiza_segsocial, devengo.cotiza_irpf
            if devengo.cotiza_segsocial:
                    self.base_remuneracion = self.base_remuneracion + devengo.devengado
            if devengo.cotiza_irpf:
                if devengo.es_devengo_especie:
                    self.base_irpf_especie = self.base_irpf_especie + devengo.devengado
                else:
                    self.base_irpf = self.base_irpf + devengo.devengado
            if devengo.cotiza_irpf and devengo.cotiza_segsocial:
                self.base_irpf_segsoc = self.base_irpf_segsoc + devengo.devengado
            if not devengo.cotiza_irpf and devengo.cotiza_segsocial:
                self.base_segsoc_sinirpf = self.base_segsoc_sinirpf + devengo.devengado
            if devengo.cotiza_irpf and not devengo.cotiza_segsocial:
                self.base_irpf_sinsegsoc = self.base_irpf_sinsegsoc + devengo.devengado
            if not devengo.cotiza_irpf and not devengo.cotiza_segsocial:
                self.no_cotizan = self.no_cotizan + devengo.devengado

        self.base_segsocial = self.base_ppextra + self.base_remuneracion


    def base_it(self):
        base_it_tot = 0
        try:
            self.it_nomina = It_nomina(self.id)
            self.dias_pendientes = self.it_nomina.it_dias_pendientes
            dias_acumulados = self.it_nomina.it_dias_acumulados
            dias_aplicados = dias_acumulados - self.dias_pendientes
            base_it_dia = self.it_nomina.it.basecot_diaria_it
            if self.it_nomina.it.es_cont_comun:
                sql = ( "Select "
                            "desdedia, hastadia, porcentaje "
                        "From "
                            "tb_it "
                        "Where "
                            "es_contcomun "
                            "order by desdedia ")
                dato = select_sql(sql,1)
                for j in dato:
                    if j[0] >= dias_aplicados and self.dias_pendientes >0:
                        if (j[1]-j[0]+1) >= self.dias_pendientes:
                            base_it_tot += base_it_dia * j[2] * self.dias_pendientes
                            dias_aplicados = dias_aplicados + self.dias_pendientes
                            self.dias_pendientes = self.dias_pendientes - self.dias_pendientes
                        else:
                            base_it_tot += base_it_dia * j[2] * (j[1] - j[0] + 1)
                            dias_aplicados = dias_aplicados + j[1]-j[0]+1
                            self.dias_pendientes -= dias_aplicados
            if self.it_registro.es_enfermedad_prof:
                pass
        except:
            pass
        return base_it_tot

    def no_cotizan(self):
        """
        Devengos que no cotizan ni en seguridad social ni en irpf
        """
        sql = ( "SELECT "
                    "sum(imp_devengo) as importe "
                "FROM "
                    "nomina_devengos "
                "WHERE "
                    "esdevengo "
                    "and (not cont_com "
                    "AND not irpf) "
                    "and idnomina = %s;")
        dato = select_sql((sql, (self.id)))[0]
        if dato is None:
            dato = 0
        return dato

    def control_base_min_max(self):
        sql = ( "Select "
                    "B.idtb_grupocot_base "
                "From "
                    "tb_grupos_cotizacion A "
                        "inner join "
                            "tb_gruposcot_bases B"
                            "on A.idgrupos_cotizacion = B.idtb_grupo_cotizacion "
                "Where "
                    "A.idgrupos_cotizacion = %s "
                    "and B.ejercicio = %s ")
        dato = select_sql((sql, (self.grupo_cot_id, self.anio)))[0]
        self.grupo_cot_bases = Grupo_cotizacion_bases(dato)