示例#1
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 ..."
示例#2
0
 def __init__(self, idit = 0):
     self.id = idit
     self.alta_dia = self.dato_it('dayofmonth(fecha_alta)')
     self.alta_mes = self.dato_it('month(fecha_alta)')
     self.alta_anio = self.dato_it('year(fecha_alta)')
     self.baja_dia = self.dato_it('dayofmonth(fecha_baja)')
     self.baja_mes = self.dato_it('month(fecha_baja)')
     self.baja_anio = self.dato_it('year(fecha_baja)')
     self.baja_fecha = datetime.date(self.baja_anio, self.baja_mes, self.baja_dia)
     self.basecot_mes_anterior = self.dato_it('basecot_mesant')
     self.contrato_id = self.dato_it('idemp_contrato')
     self.dias_cotizados_mes_anterior = self.dato_it('diascot_mesant')
     self.es_cont_comun = si_no(self.dato_it('convert(es_baja_contcomun, unsigned)'))
     self.es_enfermedad_prof = si_no(self.dato_it('convert(es_baja_enfprof,unsigned)'))
     self.basecot_diaria_it = round(self.basecot_mes_anterior / self.dias_cotizados_mes_anterior, 2)
     try:
         self.alta_fecha = datetime.date(self.alta_anio, self.alta_mes, self.alta_dia)
     except:
         self.alta_fecha = None
     self.contrato = Contrato(self.contrato_id)
     self.it_id = self.dato_it('idtb_it')
示例#3
0
 def __init__(self,
              idempresa,
              mes,
              anio,
              idcontrato=0,
              esnomina=True,
              esfiniquito=False,
              esnominapextra=False):
     '''
     Constructor
     '''
     self.empresa_id = idempresa
     self.esnomina = esnomina
     self.esnominapextra = esnominapextra
     self.esfiniquito = esfiniquito
     self.mes = mes
     self.anio = anio
     self.contrato_id = idcontrato
     try:
         self.contrato = Contrato(self.contrato_id)
     except:
         pass
示例#4
0
    def __init__(self, nomina=0):
        self.id = nomina
        self.base_ppextra = self.dato_nomina('base_ppextra')
        self.base_irpf = self.dato_nomina('base_irpf')
        self.base_cc = self.dato_nomina('base_cc')
        self.cif = self.dato_nomina("cif")
        self.contrato_id = self.dato_nomina('idemp_contratos')
        self.contrato = Contrato(self.contrato_id)
        try:
            self.dirtrabajador = self.contrato.trabajador.direccion_completa
            self.cptrabajador = self.contrato.trabajador.cod_postal
            self.pobtrabajador = poblacion(self.cptrabajador)
            self.provtrabajador = provincia(self.cptrabajador)
            self.motivoextincion = self.contrato.motivoextincion
        except:
            pass
        self.cta_cot_id = self.dato_nomina('idcta_cot')
        try:
            self.cta_cot = Cod_cotizacion(self.cta_cot_id)
            self.dirempresa = self.cta_cot.centro_trabajo.dircompleta
            self.cpempresa = self.cta_cot.centro_trabajo.dir_codpostal
            self.pobempresa = poblacion(self.cpempresa)
            self.provempresa = provincia(self.cpempresa)

        except:
            print 'No se activa la cta_cot'
            self.cta_cot = 0
        self.descripcion = self.dato_nomina('descripcion')
        self.empresa_id = self.dato_nomina('idempresa')
        self.es_finiquito = si_no(self.dato_nomina('es_finiquito'))
        self.es_nominapextra = si_no(self.dato_nomina('es_nominapextra'))
        self.epigrafe_id = self.dato_nomina('idtb_epigrafe')
        self.fecha = self.dato_nomina('fecha')
        self.fecha_dia = self.dato_nomina('dayofmonth(fecha)')
        self.grupo_cotizacion_id = self.dato_nomina('idgrupos_cotizacion')
        self.imp_pextra = self.dato_nomina('imp_pextra')
        self.imp_remumes = self.dato_nomina('imp_remumes')
        self.nif = self.dato_nomina('dni')
        self.naf = self.dato_nomina('naf')
        self.nombre_trabajador = self.dato_nomina('nombre')
        self.nombreempresa = SqlEmpresa(self.empresa_id).razon_social
        self.periodo = self.dato_nomina('periodo')
        self.puesto = self.dato_nomina('categoria')
        self.fecha_anio = self.dato_nomina('year(fecha)')
        self.fecha_mes = self.dato_nomina('month(fecha)')
        self.dia_nomina = self.dato_nomina('dayofmonth(fecha)')
        try:
            self.fecha_datetime = datetime.date(self.fecha_anio, self.fecha_mes, self.dia_nomina)
            locale.setlocale(locale.LC_ALL, 'es_ES.UTF-8')
            self.fecha_formlargo = self.fecha_datetime.strftime('%d de %B de %Y')
            self.periodos = self.contrato.periodo_nomina(self.fecha_anio, self.fecha_mes)
        except ValueError:
            print ('No hay nomina activa, no se crea fecha_datetime y tampoco hay periodo de tiempo')
            self.fecha_datetime = 0

        self.numero_nominas_mes = self.contrato.contratos_activos_mes(self.empresa_id, self.fecha_anio, self.fecha_mes)
        try:
            self.cabecera = Cabecera(self.empresa_id, self.fecha_mes, self.fecha_anio,
                                     self.contrato.trabajador.id)
        except AttributeError:
            print('Si no hay nómina, no hay contrato y tampoco trabajador. Se pierde la cabecera')
        self.total_devengos = self.dato_nomina('imp_totdev')
        self.total_deducciones = self.dato_nomina('tot_deducir')
        self.liquido = self.dato_nomina('liquido')
        self.liquido_letras = to_word(self.liquido)
示例#5
0
class SqlNominas:
    """

    Conjunto de procesos que iteraccionan con la base de datos MySQL
    """
    def __init__(self, nomina=0):
        self.id = nomina
        self.base_ppextra = self.dato_nomina('base_ppextra')
        self.base_irpf = self.dato_nomina('base_irpf')
        self.base_cc = self.dato_nomina('base_cc')
        self.cif = self.dato_nomina("cif")
        self.contrato_id = self.dato_nomina('idemp_contratos')
        self.contrato = Contrato(self.contrato_id)
        try:
            self.dirtrabajador = self.contrato.trabajador.direccion_completa
            self.cptrabajador = self.contrato.trabajador.cod_postal
            self.pobtrabajador = poblacion(self.cptrabajador)
            self.provtrabajador = provincia(self.cptrabajador)
            self.motivoextincion = self.contrato.motivoextincion
        except:
            pass
        self.cta_cot_id = self.dato_nomina('idcta_cot')
        try:
            self.cta_cot = Cod_cotizacion(self.cta_cot_id)
            self.dirempresa = self.cta_cot.centro_trabajo.dircompleta
            self.cpempresa = self.cta_cot.centro_trabajo.dir_codpostal
            self.pobempresa = poblacion(self.cpempresa)
            self.provempresa = provincia(self.cpempresa)

        except:
            print 'No se activa la cta_cot'
            self.cta_cot = 0
        self.descripcion = self.dato_nomina('descripcion')
        self.empresa_id = self.dato_nomina('idempresa')
        self.es_finiquito = si_no(self.dato_nomina('es_finiquito'))
        self.es_nominapextra = si_no(self.dato_nomina('es_nominapextra'))
        self.epigrafe_id = self.dato_nomina('idtb_epigrafe')
        self.fecha = self.dato_nomina('fecha')
        self.fecha_dia = self.dato_nomina('dayofmonth(fecha)')
        self.grupo_cotizacion_id = self.dato_nomina('idgrupos_cotizacion')
        self.imp_pextra = self.dato_nomina('imp_pextra')
        self.imp_remumes = self.dato_nomina('imp_remumes')
        self.nif = self.dato_nomina('dni')
        self.naf = self.dato_nomina('naf')
        self.nombre_trabajador = self.dato_nomina('nombre')
        self.nombreempresa = SqlEmpresa(self.empresa_id).razon_social
        self.periodo = self.dato_nomina('periodo')
        self.puesto = self.dato_nomina('categoria')
        self.fecha_anio = self.dato_nomina('year(fecha)')
        self.fecha_mes = self.dato_nomina('month(fecha)')
        self.dia_nomina = self.dato_nomina('dayofmonth(fecha)')
        try:
            self.fecha_datetime = datetime.date(self.fecha_anio, self.fecha_mes, self.dia_nomina)
            locale.setlocale(locale.LC_ALL, 'es_ES.UTF-8')
            self.fecha_formlargo = self.fecha_datetime.strftime('%d de %B de %Y')
            self.periodos = self.contrato.periodo_nomina(self.fecha_anio, self.fecha_mes)
        except ValueError:
            print ('No hay nomina activa, no se crea fecha_datetime y tampoco hay periodo de tiempo')
            self.fecha_datetime = 0

        self.numero_nominas_mes = self.contrato.contratos_activos_mes(self.empresa_id, self.fecha_anio, self.fecha_mes)
        try:
            self.cabecera = Cabecera(self.empresa_id, self.fecha_mes, self.fecha_anio,
                                     self.contrato.trabajador.id)
        except AttributeError:
            print('Si no hay nómina, no hay contrato y tampoco trabajador. Se pierde la cabecera')
        self.total_devengos = self.dato_nomina('imp_totdev')
        self.total_deducciones = self.dato_nomina('tot_deducir')
        self.liquido = self.dato_nomina('liquido')
        self.liquido_letras = to_word(self.liquido)

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

    def actualiza_liquido(self, nomina):
        sql = ("select emp_contratos.neto from emp_contratos "
               "inner join nominas "
               "on nominas.idemp_contratos = emp_contratos.idemp_contratos "
               "where nominas.idnomina = %s;")
        liquido = select_sql((sql, (nomina)))[0]
        sql = ("update nominas "
               "set liquido = %s "
               "where nominas.idnomina = %s")
        select_sql((sql, (liquido, nomina)))
        return liquido

    def actualiza_fecha(self):
        self.fecha = self.periodos[1].strftime('%Y-%m-%d')
        print self.fecha
        sql = ('Update nominas '
               'set fecha = ' + "'" + unicode(self.fecha) +
               "' " +
               'where idnomina = ' + unicode(self.id) +
               ' ')
        select_sql(sql)

    def actualiza_ppextra(self):
        valor = self.devengo_ppextra()
        sql = ('Update '
               '    nominas '
               'Set '
               '    base_ppextra = ' + unicode(valor) +
               ' '
               'Where '
               '    idnomina = ' + unicode(self.id) +
               ' ')
        select_sql(sql)
        self.base_ppextra = self.dato_nomina('base_ppextra')

    def anios_cotizados_acumulados(self):
        f1 = self.contrato.inicio_fecha
        f2 = self.contrato.periodo_nomina(self.fecha_anio, self.fecha_mes)[1]
        x = f2.year - f1.year
        f1 = datetime.date(f2.year, f1.month, f1.day)
        y = (f2 - f1).days
        x = float(x) + 1 / float(self.cta_cot.calendario.diastotales) * float(y)
        return round(x, 2)

    def borrar_nomina(self):
        sql = ("Delete "
               "    nominas, nomina_devengos "
               "From "
               "    nominas "
               "        inner join "
               "            nomina_devengos "
               "            on nominas.idnomina = nomina_devengos.idnomina "
               "Where "
               "    nominas.idnomina = " + unicode(self.id) + " ")
        select_sql(sql)

    def dato_nomina(self, campo):
        try:
            dato = sql_basica(campo, 'nominas', 'idnomina', self.id)
        except:
            dato = ""
        if dato is None or dato == '\x00':
            dato = ""
        if isinstance(dato, datetime.date):
            dato = dato.strftime('%d/%m/%Y')
        return dato

    def devengo_indemnizacion(self):
        """

        :return:
        """
        listadevengos = self.lista_devengos_nomina()
        print listadevengos
        valor = 0
        for x in listadevengos:
            devengo = Nomina_Devengo(x[0])
            if devengo.cotiza_segsocial:
                valor = devengo.devengado + valor
        valor += float(self.base_ppextra)
        return valor

    def devengo_ppextra(self):
        # Para calcular el prorrateo de pagas extras en la cotización se tiene en cuenta si están prorrateadas o no.
        # Si no lo están, no aparecen en nómina y hay que tomarlas de los devengos de la empresa
        # para hacer el cálculo.
        # En el caso de que sea finiquito o nómina de pagas extras, no se hace el prorrateo, ya que
        # está incluido en las nóminas anteriores.
        valor = 0
        if self.lista_pagas_extras():
            listapextra = self.lista_pagas_extras()
            for x in listapextra:
                pextra = Nomina_Devengo(x[0])
                print '    ....**** Devengo pextra', pextra.concepto
                if pextra.es_para_pextra and (not self.es_finiquito and not self.es_nominapextra):
                    valor += pextra.devengado
        if self.lista_devengos_nomina():
            listapextra = self.lista_devengos_nomina()
            for x in listapextra:
                pextra = Nomina_Devengo(x[0])
                print '    ....**** Devengo pextra 2', pextra.concepto, pextra.paga_extra()
                if pextra.es_para_pextra:
                    valor += pextra.paga_extra() * pextra.coef_pextra * self.cta_cot.convenio_datos.num_pextra()
        print '    .... Valor ppextra', valor
        # Sólo en el caso de que valor sea 0 y se trate de una nómina normal hay que incluir el prorrateo
        # de pagas extras proveniente de los devengos de la empresa.
        if not valor:
            if (not self.es_finiquito and not self.es_nominapextra):
                listapextra = self.contrato.listapagasextras()
                for x in listapextra:
                    devengo = Contrato_Devengo(x[0])
                    valor += (devengo.importe / float(self.cta_cot.calendario.diastotales))
                    valor = valor * (devengo.coef_pextra )
                valor = valor * self.dias_cotizados()
        print '    .... Valor 2 pextra', valor
        return valor

    def devengo_vacaciones(self):
        """
        Nos devuelve el valor del devengo por vacaciones si se entrara en este mes en fin de contrato
        :return:
        """
        listadevengos = self.lista_devengos_nomina()
        valor = 0
        for x in listadevengos:
            devengo = Nomina_Devengo(x[0])
            if devengo.es_pagavacaciones:
                valor = valor + devengo.devengado
        return valor

    def devengos_nomina(self, contrato):
        """
        Nos devuelve todos los devengos que se encuentran en una nomina
        """
        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 "
               "FROM "
               "    emp_devengos "
               "WHERE "
               "    idemp_contrato = %s "
               "ORDER by "
               "    idemp_contrato, orden")
        return select_sql((sql, (contrato)), 1)

    def dias_no_it(self):
        self.dia_nomina

    def dias_cotizados(self):
        self.contrato(self.contrato_id)
        f1 = self.contrato.periodo_nomina(self.fecha_anio, self.fecha_mes)[0]
        f2 = self.contrato.periodo_nomina(self.fecha_anio, self.fecha_mes)[1]
        x = 0
        calmes = calendar.Calendar().monthdays2calendar(self.fecha_anio, self.fecha_mes)
        for c in calmes:
            for g in c:
                if f1.day <= g[0] <= f2.day:
                    x += 1
        return x

    def dias_cotizados_acumulados(self):
        self.contrato(self.contrato_id)
        f1 = datetime.date(self.fecha_anio, 1, 1)
        if self.contrato.inicio_fecha > f1:
            f1 = self.contrato.inicio_fecha
        f2 = self.contrato.periodo_nomina(self.fecha_anio, self.fecha_mes)[1]
        x = (f2 - f1).days + 1
        return x

    def dias_efectivos_tpo_completo(self):
        desdedia = int(self.contrato.periodo_nomina(self.fecha_anio, self.fecha_mes)[0].day)
        hastadia = int(self.contrato.periodo_nomina(self.fecha_anio, self.fecha_mes)[1].day)
        cal = self.cta_cot.calendario
        cal.desde(self.fecha_anio, self.fecha_mes, desdedia)
        cal.hasta(self.fecha_anio, self.fecha_mes, hastadia)
        cal.nolaboral()
        if self.cta_cot.convenio_datos.es_sab_laboral:
            dato = cal.diastotales - cal.totaldomingos - cal.totalfestivos
        else:
            dato = cal.totalefectivos
        return dato

    def dias_efectivos_tpo_parcial(self):
        sql = ("select "
               "    count(*) "
               "from "
               "    emp_tpo_parcial "
               "        left join "
               "            nominas "
               "            on emp_tpo_parcial.idemp_contrato = nominas.idemp_contratos "
               "where "
               "    month(emp_tpo_parcial.fecha) = %s "
               "    and year(emp_tpo_parcial.fecha) = %s "
               "    and nominas.idnomina = %s "
               "    and horas > 0")
        dias = select_sql((sql, (self.fecha_mes, self.fecha_anio, self.id)))[0]

        if dias == 0:
            desdedia = int(self.contrato.periodo_nomina(self.fecha_anio, self.fecha_mes)[0].day)
            hastadia = int(self.contrato.periodo_nomina(self.fecha_anio, self.fecha_mes)[1].day)
            cal = self.cta_cot.calendario
            try:
                sql = ("select (lunes>0) * " +
                       str(cal.diasemana_delmes(self.fecha_anio, self.fecha_mes, desdedia, hastadia, 0)) +
                       " + (martes >0) * " +
                       str(cal.diasemana_delmes(self.fecha_anio, self.fecha_mes, desdedia, hastadia, 1)) +
                       " + (miercoles>0) * " +
                       str(cal.diasemana_delmes(self.fecha_anio, self.fecha_mes, desdedia, hastadia, 2)) +
                       " + (jueves>0) * " +
                       str(cal.diasemana_delmes(self.fecha_anio, self.fecha_mes, desdedia, hastadia, 3)) +
                       " + (viernes>0) * " +
                       str(cal.diasemana_delmes(self.fecha_anio, self.fecha_mes, desdedia, hastadia, 4)) +
                       " + (sabado>0) * " +
                       str(cal.diasemana_delmes(self.fecha_anio, self.fecha_mes, desdedia, hastadia, 5)) +
                       " + (domingo>0) * " +
                       str(cal.diasemana_delmes(self.fecha_anio, self.fecha_mes, desdedia, hastadia, 6)) +
                       " "
                       "from emp_tpo_parcial "
                       "left join nominas "
                       "on emp_tpo_parcial.idemp_contrato = nominas.idemp_contratos "
                       "where nominas.idnomina = %s ")
                dias = select_sql((sql, (self.id)))[0]
            except:
                dias = 0
        print "    Dias_Efectivos tiempo parcial", dias
        return dias

    def horas_cotizadas(self):
        """
        Devuelve las horas cotizadas en una nomina
        """
        horas = 0
        if self.contrato.contrato.es_tiempo_parcial is True:
            sql = ("Select sum(horas) from emp_tpo_parcial a "
                   "left join nominas b "
                   "on b.idemp_contratos = a.idemp_contrato "
                   "Where month(a.fecha) = %s and year(a.fecha) = %s "
                   "and b.idnomina = %s;")
            horas = select_sql((sql, (self.fecha_mes, self.fecha_anio, self.id)))[0]
            if horas is None:
                desdedia = int(self.contrato.periodo_nomina(self.fecha_anio, self.fecha_mes)[0].day)
                hastadia = int(self.contrato.periodo_nomina(self.fecha_anio, self.fecha_mes)[1].day)
                cal = self.cta_cot.calendario
                sql = ("select "
                       "lunes * " +
                       str(cal.diasemana_delmes(self.fecha_anio, self.fecha_mes, desdedia, hastadia, 0)) +
                       " + martes * " +
                       str(cal.diasemana_delmes(self.fecha_anio, self.fecha_mes, desdedia, hastadia, 1)) +
                       " + miercoles * " +
                       str(cal.diasemana_delmes(self.fecha_anio, self.fecha_mes, desdedia, hastadia, 2)) +
                       " + jueves * " +
                       str(cal.diasemana_delmes(self.fecha_anio, self.fecha_mes, desdedia, hastadia, 3)) +
                       " + viernes * " +
                       str(cal.diasemana_delmes(self.fecha_anio, self.fecha_mes, desdedia, hastadia, 4)) +
                       " + sabado * " +
                       str(cal.diasemana_delmes(self.fecha_anio, self.fecha_mes, desdedia, hastadia, 5)) +
                       " + domingo * " +
                       str(cal.diasemana_delmes(self.fecha_anio, self.fecha_mes, desdedia, hastadia, 6)) +
                       " "
                       "from emp_tpo_parcial "
                       "left join nominas "
                       "on emp_tpo_parcial.idemp_contrato = nominas.idemp_contratos "
                       "where nominas.idnomina = %s ")
                horas = select_sql((sql, (self.id)))[0]
        return horas

    def iddevengo_nomina(self, iddevengo):
        """

        Devuelve un devengo concreto de una nomina concreta

            SqlNominas().iddevengo_nomina(iddevengo)
        """
        sql = ("select "
               "    concepto, imp_cuantia, imp_precio, "
               "    nominas.nombre, nominas.empresa, month(nominas.fecha), "
               "    year(nominas.fecha) "
               "from "
               "    nomina_devengos "
               "        left join "
               "            nominas "
               "            on nominas.idnomina = nomina_devengos.idnomina "
               "        left join "
               "            emp_contratos "
               "            on nominas.idemp_contratos = emp_contratos.idemp_contratos "
               "        left join "
               "            Trabajadores "
               "            on emp_contratos.idTrabajadores = Trabajadores.idTrabajadores "
               "where "
               "    idnomina_devengo = %s")
        dato = select_sql((sql, (iddevengo)))
        return dato

    def idnom_mes(self, empresa, mes, anio, esuna):
        """

        Nos da la id de las nominas de un mes de un anio de una empresa

            SqlNominas().idnom_mes(numero_empresa, mes, anio, es_una_sola_nomina)

        Los valores para esuna son:

            esuna = 0 cuando son mas de una nomina a listar
            esuna = numero_nomina cuando solo es una nomina a listar

        En este ultimo caso hay que apoyarse en

            SqlNominas().nomina_trabajador_mes

        Devuelve el valor de idnomina
        """
        if esuna == 0:
            sql = ("SELECT idnomina "
                   "from nominas "
                   "where idempresa = %s and month(fecha) = %s "
                   "and year(fecha) = %s "
                   "and (es_finiquito is null or es_finiquito = 0);")
            dato = select_sql((sql, (empresa, mes, anio)), 1)
        else:
            dato = ((esuna,),)
        return dato

    def lista_deducciones_nomina(self):
        """
        Devuelve una tupla con los idenomina_devengo no devengos de una nomina
        """
        sql = ("Select "
               "    idnomina_devengo "
               "From "
               "    nomina_devengos "
               "Where "
               "    not esdevengo "
               "    and idnomina = " + unicode(self.id) + " ")
        return select_sql(sql, 1)

    def dic_devengos_formulario(self):
        sql = ('Select '
               '    idnomina_devengo, idform_concepto '
               'From '
               '    nomina_devengos '
               'Where '
               '    idnomina = ' + unicode(self.id))
        lista = select_sql(sql, 1)
        indice = {}
        for x in lista:
            indice[x[0]] = x[1]
        return indice

    def lista_devengos_nomina(self):
        """
        Devuelve una tupla con los idnomina_devengo de una nomina excluidas las pagas extras
        """
        sql = ("Select "
               "    idnomina_devengo "
               "From "
               "    nomina_devengos "
               "Where "
               "    esdevengo "
               "    and (idemp_pextra is null or idemp_pextra = 0) "
               "    and idnomina = " + unicode(self.id) +
               " "
               "order by "
               "    orden ")
        return select_sql(sql, 1)

    def lista_pagas_extras(self):
        """
        Devuelve una tupla con los idnomina_devengo de una nomina que sean pagas extras
        """
        sql = ("Select "
               "    idnomina_devengo "
               "From "
               "    nomina_devengos "
               "Where "
               "    idemp_pextra > 0 "
               "    and idnomina = " + unicode(self.id) + "")
        return select_sql(sql, 1)

    def listaempresas(self):
        sql = ("Select "
               "    idempresa, "
               "    concat_ws(' ',nombre, apellido1, apellido2) as nombre "
               "From "
               "    empresa "
               "Order by "
               "    nombre")
        dato = select_sql(sql, 1)
        return dato

    def nomina_a_tiempo_parcial(self):
        sql = ("SELECT "
               "    tb_contratos_tipo.jornadaparcial "
               "From "
               "    nominas "
               "        left join "
               "            emp_contratos "
               "            on nominas.idemp_contratos = emp_contratos.idemp_contratos "
               "        left join "
               "            tb_contratos_tipo "
               "            on emp_contratos.idcontratos_tipo = tb_contratos_tipo.idcontratos_tipo "
               "Where "
               "    tb_contratos_tipo.jornadaparcial "
               "    and nominas.idnomina =  %s")
        dato = select_sql((sql, (self.id)))
        if dato is None:
            dato = False
        dato = si_no(dato)
        return dato

    def nomina_trabajador_mes(self, trabajador, mes, anio, esnomina=True, esfiniquito=False, esnominapextra=False):
        """

        Devuelve el numero de nomina del trabajador de un mes y anio dados

            SqlNominas().nomina_trabajador_mes(numero_trabajador, mes, anio)
        """
        sql = ("SELECT "
               "    idnomina "
               "FROM "
               "    nominas "
               "        Left Join emp_contratos "
               "        on nominas.idemp_contratos = emp_contratos.idemp_contratos "
               "WHERE "
               "    idtrabajadores = %s "
               "    and month(fecha) = %s "
               "    and year(fecha) = %s ")
        if esnomina:
            sql = (sql + "    and (es_finiquito is null or es_finiquito = 0) ")
        elif esfiniquito:
            sql = (sql + "    and es_finiquito ")
        dato = select_sql((sql, (trabajador, mes, anio)))
        return dato[0]

    def nominas_empresa_mes(self, empresa, mes, anio, esnomina=True, esfiniquito=False, esnominapextra=False):
        """
        Listado de las nóminas de una empresa en un mes y anio dados
        """
        sql = ("SELECT idnomina "
               "FROM nominas "
               "WHERE idempresa = %s "
               "and month(fecha) = %s "
               "and year(fecha) = %s ")
        if esfiniquito:
            sql += "and es_finiquito "
        elif esnominapextra:
            sql += "and es_nominapextra "
        elif esnomina:
            sql += "and not es_finiquito and not es_nominapextra "
        sql += "ORDER BY idnomina"
        dato = select_sql((sql, (empresa, mes, anio)), 1)
        return dato

    def tipo_irpf(self, nomina):
        sql = """SELECT sum(imp_precio) as importe
                 FROM nomina_devengos
                 WHERE esirpf and idnomina = %s;"""
        dato = select_sql((sql, (nomina)))[0]
        return dato

    def tipo_segsoc(self, nomina):
        sql = """SELECT sum(imp_precio) as importe
                 FROM nomina_devengos
                 WHERE not esdevengo and not esirpf and idnomina = %s;"""
        dato = select_sql((sql, (nomina)))[0]
        return dato

    def trabajador_empresa(self, trabajador, mes, anio):
        sql = ("SELECT "
               "    nominas.idempresa "
               "FROM "
               "    nominas "
               "        left join "
               "            emp_contratos "
               "            on nominas.idemp_contratos = emp_contratos.idemp_contratos "
               "WHERE "
               "    emp_contratos.idtrabajadores = %s "
               "    and month(fecha) = %s "
               "    and year(fecha) = %s "
               "group by "
               "    nominas.idempresa;")
        dato = select_sql((sql, (trabajador, mes, anio)))[0]
        return dato

    def trabajadores(self, empresa, mes, anio, esnomina=True, esfiniquito=False, esnominapextra=False):
        sql = (""
               "SELECT "
               "    CONCAT_WS(' ',Trabajadores.nombre,Trabajadores.apellido1, "
               "    Trabajadores.apellido2) as nombre, "
               "    Trabajadores.idTrabajadores "
               "FROM "
               "    Nominas.emp_contratos "
               "        left join "
               "            Trabajadores "
               "            On Trabajadores.idTrabajadores = emp_contratos.idtrabajadores "
               "        left join "
               "            empresa "
               "            On empresa.idempresa = emp_contratos.idempresa "
               "        left join "
               "            emp_ctacot "
               "            On emp_ctacot.idctacot = emp_contratos.idemp_ctacot "
               "WHERE "
               "    emp_contratos.idempresa = %s "
               "    and emp_contratos.conversion is Null "
               "    and emp_contratos.prorroga is Null "
               "    and ("
               "        (month(fecha_ini) <= %s and year(fecha_ini)<= %s) "
               "        or (month(fecha_ini)>%s and year(fecha_ini)<%s) "
               "        ) ")
        dato = 0
        if esnomina:
            sql = (sql +
                   "    and (fecha_fin is null "
                   "        or (month(fecha_fin) >= %s and year(fecha_fin)>= %s) "
                   "        or (month(fecha_fin) <= %s and year(fecha_fin)> %s) "
                   "        ) ")
            dato = select_sql((sql, (empresa, mes, anio, mes, anio, mes,
                                 anio, mes, anio)), 1)
        if esfiniquito:
            sql = (sql +
                   "    and (month(fecha_fin) = %s and year(fecha_fin)= %s) ")
            dato = select_sql((sql, (empresa, mes, anio, mes, anio, mes,
                                 anio)), 1)
        return dato

    def trimestre_irpf(self, empresa, trim, anio):
        sql = ("SELECT idempresa, empresa, count(*), ((month(fecha)-1) div 3)+1 as trim, "
               "year(fecha), sum(imp_cuantia), sum(imp_deduccion), "
               "esirpf, esespecie "
               "FROM nomina_devengos "
               "LEFT JOIN nominas "
               "ON nominas.idnomina=nomina_devengos.idnomina"
               "WHERE ((month(fecha)-1) div 3) + 1 = %s and year(fecha) = %s "
               "and idempresa = %s "
               "group by idempresa, ((month(fecha)-1) div 3)+1, esespecie ")
        dato = select_sql((sql, (trim, anio, empresa)), 1)
        return dato

    def ver_devengos(self, trabajador, mes, anio):
        sql = ("select "
               "    nomina_devengos.idnomina_devengo, "
               "    nomina_devengos.concepto, "
               "    nomina_devengos.imp_cuantia, "
               "    nomina_devengos.imp_precio, "
               "    nomina_devengos.imp_devengo, "
               "    nomina_devengos.imp_deduccion "
               "from "
               "    nomina_devengos "
               "        left join "
               "            nominas "
               "            on nominas.idnomina = nomina_devengos.idnomina "
               "        left join "
               "            emp_contratos "
               "            on nominas.idemp_contratos = emp_contratos.idemp_contratos "
               "where "
               "    emp_contratos.idtrabajadores = %s "
               "    and month(nominas.fecha) = %s "
               "    and year(nominas.fecha) = %s "
               "    and esdevengo "
               "order by "
               "    orden")
        dato = select_sql((sql, (trabajador, mes, anio)), 1)
        return dato

    def ver_nomina(self, trabajador, mes, anio):
        sql = ("Select "
               "    empresa, cta_cot, antig, nombre, base_cc, base_irpf, "
               "    tot_dias, imp_totdev, tot_deducir  "
               "from "
               "    nominas "
               "        left join "
               "            nomina_devengos "
               "            on nominas.idnomina = nomina_devengos.idnomina "
               "        left join "
               "            emp_contratos "
               "            on nominas.idemp_contratos = emp_contratos.idemp_contratos "
               "where "
               "    emp_contratos.idtrabajadores = %s "
               "    and month(nominas.fecha) = %s "
               "    and year(nominas.fecha) = %s "
               "group by "
               "    empresa")
        dato = select_sql((sql, (trabajador, mes, anio)))
        return dato
示例#6
0
 def dias_entre_fechas(self):
     contrato = Contrato()
     dia_final = self.hasta(anio, mes, dia)
示例#7
0
    def __init__(self, nomina=0):
        self.id = nomina
        self.base_ppextra = self.dato_nomina('base_ppextra')
        self.base_irpf = self.dato_nomina('base_irpf')
        self.base_cc = self.dato_nomina('base_cc')
        self.cif = self.dato_nomina("cif")
        self.contrato_id = self.dato_nomina('idemp_contratos')
        self.contrato = Contrato(self.contrato_id)
        try:
            self.dirtrabajador = self.contrato.trabajador.direccion_completa
            self.cptrabajador = self.contrato.trabajador.cod_postal
            self.pobtrabajador = poblacion(self.cptrabajador)
            self.provtrabajador = provincia(self.cptrabajador)
            self.motivoextincion = self.contrato.motivoextincion
        except:
            pass
        self.cta_cot_id = self.dato_nomina('idcta_cot')
        try:
            self.cta_cot = Cod_cotizacion(self.cta_cot_id)
            self.dirempresa = self.cta_cot.centro_trabajo.dircompleta
            self.cpempresa = self.cta_cot.centro_trabajo.dir_codpostal
            self.pobempresa = poblacion(self.cpempresa)
            self.provempresa = provincia(self.cpempresa)

        except:
            print 'No se activa la cta_cot'
            self.cta_cot = 0
        self.descripcion = self.dato_nomina('descripcion')
        self.empresa_id = self.dato_nomina('idempresa')
        self.es_finiquito = si_no(self.dato_nomina('es_finiquito'))
        self.es_nominapextra = si_no(self.dato_nomina('es_nominapextra'))
        self.epigrafe_id = self.dato_nomina('idtb_epigrafe')
        self.fecha = self.dato_nomina('fecha')
        self.fecha_dia = self.dato_nomina('dayofmonth(fecha)')
        self.grupo_cotizacion_id = self.dato_nomina('idgrupos_cotizacion')
        self.imp_pextra = self.dato_nomina('imp_pextra')
        self.imp_remumes = self.dato_nomina('imp_remumes')
        self.nif = self.dato_nomina('dni')
        self.naf = self.dato_nomina('naf')
        self.nombre_trabajador = self.dato_nomina('nombre')
        self.nombreempresa = SqlEmpresa(self.empresa_id).razon_social
        self.periodo = self.dato_nomina('periodo')
        self.puesto = self.dato_nomina('categoria')
        self.fecha_anio = self.dato_nomina('year(fecha)')
        self.fecha_mes = self.dato_nomina('month(fecha)')
        self.dia_nomina = self.dato_nomina('dayofmonth(fecha)')
        try:
            self.fecha_datetime = datetime.date(self.fecha_anio,
                                                self.fecha_mes,
                                                self.dia_nomina)
            locale.setlocale(locale.LC_ALL, 'es_ES.UTF-8')
            self.fecha_formlargo = self.fecha_datetime.strftime(
                '%d de %B de %Y')
            self.periodos = self.contrato.periodo_nomina(
                self.fecha_anio, self.fecha_mes)
        except ValueError:
            print(
                'No hay nomina activa, no se crea fecha_datetime y tampoco hay periodo de tiempo'
            )
            self.fecha_datetime = 0

        self.numero_nominas_mes = self.contrato.contratos_activos_mes(
            self.empresa_id, self.fecha_anio, self.fecha_mes)
        try:
            self.cabecera = Cabecera(self.empresa_id, self.fecha_mes,
                                     self.fecha_anio,
                                     self.contrato.trabajador.id)
        except AttributeError:
            print(
                'Si no hay nómina, no hay contrato y tampoco trabajador. Se pierde la cabecera'
            )
        self.total_devengos = self.dato_nomina('imp_totdev')
        self.total_deducciones = self.dato_nomina('tot_deducir')
        self.liquido = self.dato_nomina('liquido')
        self.liquido_letras = to_word(self.liquido)
示例#8
0
class SqlNominas:
    """

    Conjunto de procesos que iteraccionan con la base de datos MySQL
    """
    def __init__(self, nomina=0):
        self.id = nomina
        self.base_ppextra = self.dato_nomina('base_ppextra')
        self.base_irpf = self.dato_nomina('base_irpf')
        self.base_cc = self.dato_nomina('base_cc')
        self.cif = self.dato_nomina("cif")
        self.contrato_id = self.dato_nomina('idemp_contratos')
        self.contrato = Contrato(self.contrato_id)
        try:
            self.dirtrabajador = self.contrato.trabajador.direccion_completa
            self.cptrabajador = self.contrato.trabajador.cod_postal
            self.pobtrabajador = poblacion(self.cptrabajador)
            self.provtrabajador = provincia(self.cptrabajador)
            self.motivoextincion = self.contrato.motivoextincion
        except:
            pass
        self.cta_cot_id = self.dato_nomina('idcta_cot')
        try:
            self.cta_cot = Cod_cotizacion(self.cta_cot_id)
            self.dirempresa = self.cta_cot.centro_trabajo.dircompleta
            self.cpempresa = self.cta_cot.centro_trabajo.dir_codpostal
            self.pobempresa = poblacion(self.cpempresa)
            self.provempresa = provincia(self.cpempresa)

        except:
            print 'No se activa la cta_cot'
            self.cta_cot = 0
        self.descripcion = self.dato_nomina('descripcion')
        self.empresa_id = self.dato_nomina('idempresa')
        self.es_finiquito = si_no(self.dato_nomina('es_finiquito'))
        self.es_nominapextra = si_no(self.dato_nomina('es_nominapextra'))
        self.epigrafe_id = self.dato_nomina('idtb_epigrafe')
        self.fecha = self.dato_nomina('fecha')
        self.fecha_dia = self.dato_nomina('dayofmonth(fecha)')
        self.grupo_cotizacion_id = self.dato_nomina('idgrupos_cotizacion')
        self.imp_pextra = self.dato_nomina('imp_pextra')
        self.imp_remumes = self.dato_nomina('imp_remumes')
        self.nif = self.dato_nomina('dni')
        self.naf = self.dato_nomina('naf')
        self.nombre_trabajador = self.dato_nomina('nombre')
        self.nombreempresa = SqlEmpresa(self.empresa_id).razon_social
        self.periodo = self.dato_nomina('periodo')
        self.puesto = self.dato_nomina('categoria')
        self.fecha_anio = self.dato_nomina('year(fecha)')
        self.fecha_mes = self.dato_nomina('month(fecha)')
        self.dia_nomina = self.dato_nomina('dayofmonth(fecha)')
        try:
            self.fecha_datetime = datetime.date(self.fecha_anio,
                                                self.fecha_mes,
                                                self.dia_nomina)
            locale.setlocale(locale.LC_ALL, 'es_ES.UTF-8')
            self.fecha_formlargo = self.fecha_datetime.strftime(
                '%d de %B de %Y')
            self.periodos = self.contrato.periodo_nomina(
                self.fecha_anio, self.fecha_mes)
        except ValueError:
            print(
                'No hay nomina activa, no se crea fecha_datetime y tampoco hay periodo de tiempo'
            )
            self.fecha_datetime = 0

        self.numero_nominas_mes = self.contrato.contratos_activos_mes(
            self.empresa_id, self.fecha_anio, self.fecha_mes)
        try:
            self.cabecera = Cabecera(self.empresa_id, self.fecha_mes,
                                     self.fecha_anio,
                                     self.contrato.trabajador.id)
        except AttributeError:
            print(
                'Si no hay nómina, no hay contrato y tampoco trabajador. Se pierde la cabecera'
            )
        self.total_devengos = self.dato_nomina('imp_totdev')
        self.total_deducciones = self.dato_nomina('tot_deducir')
        self.liquido = self.dato_nomina('liquido')
        self.liquido_letras = to_word(self.liquido)

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

    def actualiza_liquido(self, nomina):
        sql = ("select emp_contratos.neto from emp_contratos "
               "inner join nominas "
               "on nominas.idemp_contratos = emp_contratos.idemp_contratos "
               "where nominas.idnomina = %s;")
        liquido = select_sql((sql, (nomina)))[0]
        sql = ("update nominas "
               "set liquido = %s "
               "where nominas.idnomina = %s")
        select_sql((sql, (liquido, nomina)))
        return liquido

    def actualiza_fecha(self):
        self.fecha = self.periodos[1].strftime('%Y-%m-%d')
        print self.fecha
        sql = ('Update nominas '
               'set fecha = ' + "'" + unicode(self.fecha) + "' " +
               'where idnomina = ' + unicode(self.id) + ' ')
        select_sql(sql)

    def actualiza_ppextra(self):
        valor = self.devengo_ppextra()
        sql = ('Update '
               '    nominas '
               'Set '
               '    base_ppextra = ' + unicode(valor) + ' '
               'Where '
               '    idnomina = ' + unicode(self.id) + ' ')
        select_sql(sql)
        self.base_ppextra = self.dato_nomina('base_ppextra')

    def anios_cotizados_acumulados(self):
        f1 = self.contrato.inicio_fecha
        f2 = self.contrato.periodo_nomina(self.fecha_anio, self.fecha_mes)[1]
        x = f2.year - f1.year
        f1 = datetime.date(f2.year, f1.month, f1.day)
        y = (f2 - f1).days
        x = float(x) + 1 / float(
            self.cta_cot.calendario.diastotales) * float(y)
        return round(x, 2)

    def borrar_nomina(self):
        sql = ("Delete "
               "    nominas, nomina_devengos "
               "From "
               "    nominas "
               "        inner join "
               "            nomina_devengos "
               "            on nominas.idnomina = nomina_devengos.idnomina "
               "Where "
               "    nominas.idnomina = " + unicode(self.id) + " ")
        select_sql(sql)

    def dato_nomina(self, campo):
        try:
            dato = sql_basica(campo, 'nominas', 'idnomina', self.id)
        except:
            dato = ""
        if dato is None or dato == '\x00':
            dato = ""
        if isinstance(dato, datetime.date):
            dato = dato.strftime('%d/%m/%Y')
        return dato

    def devengo_indemnizacion(self):
        """

        :return:
        """
        listadevengos = self.lista_devengos_nomina()
        print listadevengos
        valor = 0
        for x in listadevengos:
            devengo = Nomina_Devengo(x[0])
            if devengo.cotiza_segsocial:
                valor = devengo.devengado + valor
        valor += float(self.base_ppextra)
        return valor

    def devengo_ppextra(self):
        # Para calcular el prorrateo de pagas extras en la cotización se tiene en cuenta si están prorrateadas o no.
        # Si no lo están, no aparecen en nómina y hay que tomarlas de los devengos de la empresa
        # para hacer el cálculo.
        # En el caso de que sea finiquito o nómina de pagas extras, no se hace el prorrateo, ya que
        # está incluido en las nóminas anteriores.
        valor = 0
        if self.lista_pagas_extras():
            listapextra = self.lista_pagas_extras()
            for x in listapextra:
                pextra = Nomina_Devengo(x[0])
                print '    ....**** Devengo pextra', pextra.concepto
                if pextra.es_para_pextra and (not self.es_finiquito
                                              and not self.es_nominapextra):
                    valor += pextra.devengado
        if self.lista_devengos_nomina():
            listapextra = self.lista_devengos_nomina()
            for x in listapextra:
                pextra = Nomina_Devengo(x[0])
                print '    ....**** Devengo pextra 2', pextra.concepto, pextra.paga_extra(
                )
                if pextra.es_para_pextra:
                    valor += pextra.paga_extra(
                    ) * pextra.coef_pextra * self.cta_cot.convenio_datos.num_pextra(
                    )
        print '    .... Valor ppextra', valor
        # Sólo en el caso de que valor sea 0 y se trate de una nómina normal hay que incluir el prorrateo
        # de pagas extras proveniente de los devengos de la empresa.
        if not valor:
            if (not self.es_finiquito and not self.es_nominapextra):
                listapextra = self.contrato.listapagasextras()
                for x in listapextra:
                    devengo = Contrato_Devengo(x[0])
                    valor += (devengo.importe /
                              float(self.cta_cot.calendario.diastotales))
                    valor = valor * (devengo.coef_pextra)
                valor = valor * self.dias_cotizados()
        print '    .... Valor 2 pextra', valor
        return valor

    def devengo_vacaciones(self):
        """
        Nos devuelve el valor del devengo por vacaciones si se entrara en este mes en fin de contrato
        :return:
        """
        listadevengos = self.lista_devengos_nomina()
        valor = 0
        for x in listadevengos:
            devengo = Nomina_Devengo(x[0])
            if devengo.es_pagavacaciones:
                valor = valor + devengo.devengado
        return valor

    def devengos_nomina(self, contrato):
        """
        Nos devuelve todos los devengos que se encuentran en una nomina
        """
        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 "
               "FROM "
               "    emp_devengos "
               "WHERE "
               "    idemp_contrato = %s "
               "ORDER by "
               "    idemp_contrato, orden")
        return select_sql((sql, (contrato)), 1)

    def dias_no_it(self):
        self.dia_nomina

    def dias_cotizados(self):
        self.contrato(self.contrato_id)
        f1 = self.contrato.periodo_nomina(self.fecha_anio, self.fecha_mes)[0]
        f2 = self.contrato.periodo_nomina(self.fecha_anio, self.fecha_mes)[1]
        x = 0
        calmes = calendar.Calendar().monthdays2calendar(
            self.fecha_anio, self.fecha_mes)
        for c in calmes:
            for g in c:
                if f1.day <= g[0] <= f2.day:
                    x += 1
        return x

    def dias_cotizados_acumulados(self):
        self.contrato(self.contrato_id)
        f1 = datetime.date(self.fecha_anio, 1, 1)
        if self.contrato.inicio_fecha > f1:
            f1 = self.contrato.inicio_fecha
        f2 = self.contrato.periodo_nomina(self.fecha_anio, self.fecha_mes)[1]
        x = (f2 - f1).days + 1
        return x

    def dias_efectivos_tpo_completo(self):
        desdedia = int(
            self.contrato.periodo_nomina(self.fecha_anio,
                                         self.fecha_mes)[0].day)
        hastadia = int(
            self.contrato.periodo_nomina(self.fecha_anio,
                                         self.fecha_mes)[1].day)
        cal = self.cta_cot.calendario
        cal.desde(self.fecha_anio, self.fecha_mes, desdedia)
        cal.hasta(self.fecha_anio, self.fecha_mes, hastadia)
        cal.nolaboral()
        if self.cta_cot.convenio_datos.es_sab_laboral:
            dato = cal.diastotales - cal.totaldomingos - cal.totalfestivos
        else:
            dato = cal.totalefectivos
        return dato

    def dias_efectivos_tpo_parcial(self):
        sql = (
            "select "
            "    count(*) "
            "from "
            "    emp_tpo_parcial "
            "        left join "
            "            nominas "
            "            on emp_tpo_parcial.idemp_contrato = nominas.idemp_contratos "
            "where "
            "    month(emp_tpo_parcial.fecha) = %s "
            "    and year(emp_tpo_parcial.fecha) = %s "
            "    and nominas.idnomina = %s "
            "    and horas > 0")
        dias = select_sql((sql, (self.fecha_mes, self.fecha_anio, self.id)))[0]

        if dias == 0:
            desdedia = int(
                self.contrato.periodo_nomina(self.fecha_anio,
                                             self.fecha_mes)[0].day)
            hastadia = int(
                self.contrato.periodo_nomina(self.fecha_anio,
                                             self.fecha_mes)[1].day)
            cal = self.cta_cot.calendario
            try:
                sql = (
                    "select (lunes>0) * " + str(
                        cal.diasemana_delmes(self.fecha_anio, self.fecha_mes,
                                             desdedia, hastadia, 0)) +
                    " + (martes >0) * " + str(
                        cal.diasemana_delmes(self.fecha_anio, self.fecha_mes,
                                             desdedia, hastadia, 1)) +
                    " + (miercoles>0) * " + str(
                        cal.diasemana_delmes(self.fecha_anio, self.fecha_mes,
                                             desdedia, hastadia, 2)) +
                    " + (jueves>0) * " + str(
                        cal.diasemana_delmes(self.fecha_anio, self.fecha_mes,
                                             desdedia, hastadia, 3)) +
                    " + (viernes>0) * " + str(
                        cal.diasemana_delmes(self.fecha_anio, self.fecha_mes,
                                             desdedia, hastadia, 4)) +
                    " + (sabado>0) * " + str(
                        cal.diasemana_delmes(self.fecha_anio, self.fecha_mes,
                                             desdedia, hastadia, 5)) +
                    " + (domingo>0) * " + str(
                        cal.diasemana_delmes(self.fecha_anio, self.fecha_mes,
                                             desdedia, hastadia, 6)) + " "
                    "from emp_tpo_parcial "
                    "left join nominas "
                    "on emp_tpo_parcial.idemp_contrato = nominas.idemp_contratos "
                    "where nominas.idnomina = %s ")
                dias = select_sql((sql, (self.id)))[0]
            except:
                dias = 0
        print "    Dias_Efectivos tiempo parcial", dias
        return dias

    def horas_cotizadas(self):
        """
        Devuelve las horas cotizadas en una nomina
        """
        horas = 0
        if self.contrato.contrato.es_tiempo_parcial is True:
            sql = ("Select sum(horas) from emp_tpo_parcial a "
                   "left join nominas b "
                   "on b.idemp_contratos = a.idemp_contrato "
                   "Where month(a.fecha) = %s and year(a.fecha) = %s "
                   "and b.idnomina = %s;")
            horas = select_sql(
                (sql, (self.fecha_mes, self.fecha_anio, self.id)))[0]
            if horas is None:
                desdedia = int(
                    self.contrato.periodo_nomina(self.fecha_anio,
                                                 self.fecha_mes)[0].day)
                hastadia = int(
                    self.contrato.periodo_nomina(self.fecha_anio,
                                                 self.fecha_mes)[1].day)
                cal = self.cta_cot.calendario
                sql = (
                    "select "
                    "lunes * " + str(
                        cal.diasemana_delmes(self.fecha_anio, self.fecha_mes,
                                             desdedia, hastadia, 0)) +
                    " + martes * " + str(
                        cal.diasemana_delmes(self.fecha_anio, self.fecha_mes,
                                             desdedia, hastadia, 1)) +
                    " + miercoles * " + str(
                        cal.diasemana_delmes(self.fecha_anio, self.fecha_mes,
                                             desdedia, hastadia, 2)) +
                    " + jueves * " + str(
                        cal.diasemana_delmes(self.fecha_anio, self.fecha_mes,
                                             desdedia, hastadia, 3)) +
                    " + viernes * " + str(
                        cal.diasemana_delmes(self.fecha_anio, self.fecha_mes,
                                             desdedia, hastadia, 4)) +
                    " + sabado * " + str(
                        cal.diasemana_delmes(self.fecha_anio, self.fecha_mes,
                                             desdedia, hastadia, 5)) +
                    " + domingo * " + str(
                        cal.diasemana_delmes(self.fecha_anio, self.fecha_mes,
                                             desdedia, hastadia, 6)) + " "
                    "from emp_tpo_parcial "
                    "left join nominas "
                    "on emp_tpo_parcial.idemp_contrato = nominas.idemp_contratos "
                    "where nominas.idnomina = %s ")
                horas = select_sql((sql, (self.id)))[0]
        return horas

    def iddevengo_nomina(self, iddevengo):
        """

        Devuelve un devengo concreto de una nomina concreta

            SqlNominas().iddevengo_nomina(iddevengo)
        """
        sql = (
            "select "
            "    concepto, imp_cuantia, imp_precio, "
            "    nominas.nombre, nominas.empresa, month(nominas.fecha), "
            "    year(nominas.fecha) "
            "from "
            "    nomina_devengos "
            "        left join "
            "            nominas "
            "            on nominas.idnomina = nomina_devengos.idnomina "
            "        left join "
            "            emp_contratos "
            "            on nominas.idemp_contratos = emp_contratos.idemp_contratos "
            "        left join "
            "            Trabajadores "
            "            on emp_contratos.idTrabajadores = Trabajadores.idTrabajadores "
            "where "
            "    idnomina_devengo = %s")
        dato = select_sql((sql, (iddevengo)))
        return dato

    def idnom_mes(self, empresa, mes, anio, esuna):
        """

        Nos da la id de las nominas de un mes de un anio de una empresa

            SqlNominas().idnom_mes(numero_empresa, mes, anio, es_una_sola_nomina)

        Los valores para esuna son:

            esuna = 0 cuando son mas de una nomina a listar
            esuna = numero_nomina cuando solo es una nomina a listar

        En este ultimo caso hay que apoyarse en

            SqlNominas().nomina_trabajador_mes

        Devuelve el valor de idnomina
        """
        if esuna == 0:
            sql = ("SELECT idnomina "
                   "from nominas "
                   "where idempresa = %s and month(fecha) = %s "
                   "and year(fecha) = %s "
                   "and (es_finiquito is null or es_finiquito = 0);")
            dato = select_sql((sql, (empresa, mes, anio)), 1)
        else:
            dato = ((esuna, ), )
        return dato

    def lista_deducciones_nomina(self):
        """
        Devuelve una tupla con los idenomina_devengo no devengos de una nomina
        """
        sql = ("Select "
               "    idnomina_devengo "
               "From "
               "    nomina_devengos "
               "Where "
               "    not esdevengo "
               "    and idnomina = " + unicode(self.id) + " ")
        return select_sql(sql, 1)

    def dic_devengos_formulario(self):
        sql = ('Select '
               '    idnomina_devengo, idform_concepto '
               'From '
               '    nomina_devengos '
               'Where '
               '    idnomina = ' + unicode(self.id))
        lista = select_sql(sql, 1)
        indice = {}
        for x in lista:
            indice[x[0]] = x[1]
        return indice

    def lista_devengos_nomina(self):
        """
        Devuelve una tupla con los idnomina_devengo de una nomina excluidas las pagas extras
        """
        sql = ("Select "
               "    idnomina_devengo "
               "From "
               "    nomina_devengos "
               "Where "
               "    esdevengo "
               "    and (idemp_pextra is null or idemp_pextra = 0) "
               "    and idnomina = " + unicode(self.id) + " "
               "order by "
               "    orden ")
        return select_sql(sql, 1)

    def lista_pagas_extras(self):
        """
        Devuelve una tupla con los idnomina_devengo de una nomina que sean pagas extras
        """
        sql = ("Select "
               "    idnomina_devengo "
               "From "
               "    nomina_devengos "
               "Where "
               "    idemp_pextra > 0 "
               "    and idnomina = " + unicode(self.id) + "")
        return select_sql(sql, 1)

    def listaempresas(self):
        sql = ("Select "
               "    idempresa, "
               "    concat_ws(' ',nombre, apellido1, apellido2) as nombre "
               "From "
               "    empresa "
               "Order by "
               "    nombre")
        dato = select_sql(sql, 1)
        return dato

    def nomina_a_tiempo_parcial(self):
        sql = (
            "SELECT "
            "    tb_contratos_tipo.jornadaparcial "
            "From "
            "    nominas "
            "        left join "
            "            emp_contratos "
            "            on nominas.idemp_contratos = emp_contratos.idemp_contratos "
            "        left join "
            "            tb_contratos_tipo "
            "            on emp_contratos.idcontratos_tipo = tb_contratos_tipo.idcontratos_tipo "
            "Where "
            "    tb_contratos_tipo.jornadaparcial "
            "    and nominas.idnomina =  %s")
        dato = select_sql((sql, (self.id)))
        if dato is None:
            dato = False
        dato = si_no(dato)
        return dato

    def nomina_trabajador_mes(self,
                              trabajador,
                              mes,
                              anio,
                              esnomina=True,
                              esfiniquito=False,
                              esnominapextra=False):
        """

        Devuelve el numero de nomina del trabajador de un mes y anio dados

            SqlNominas().nomina_trabajador_mes(numero_trabajador, mes, anio)
        """
        sql = (
            "SELECT "
            "    idnomina "
            "FROM "
            "    nominas "
            "        Left Join emp_contratos "
            "        on nominas.idemp_contratos = emp_contratos.idemp_contratos "
            "WHERE "
            "    idtrabajadores = %s "
            "    and month(fecha) = %s "
            "    and year(fecha) = %s ")
        if esnomina:
            sql = (sql + "    and (es_finiquito is null or es_finiquito = 0) ")
        elif esfiniquito:
            sql = (sql + "    and es_finiquito ")
        dato = select_sql((sql, (trabajador, mes, anio)))
        return dato[0]

    def nominas_empresa_mes(self,
                            empresa,
                            mes,
                            anio,
                            esnomina=True,
                            esfiniquito=False,
                            esnominapextra=False):
        """
        Listado de las nóminas de una empresa en un mes y anio dados
        """
        sql = ("SELECT idnomina "
               "FROM nominas "
               "WHERE idempresa = %s "
               "and month(fecha) = %s "
               "and year(fecha) = %s ")
        if esfiniquito:
            sql += "and es_finiquito "
        elif esnominapextra:
            sql += "and es_nominapextra "
        elif esnomina:
            sql += "and not es_finiquito and not es_nominapextra "
        sql += "ORDER BY idnomina"
        dato = select_sql((sql, (empresa, mes, anio)), 1)
        return dato

    def tipo_irpf(self, nomina):
        sql = """SELECT sum(imp_precio) as importe
                 FROM nomina_devengos
                 WHERE esirpf and idnomina = %s;"""
        dato = select_sql((sql, (nomina)))[0]
        return dato

    def tipo_segsoc(self, nomina):
        sql = """SELECT sum(imp_precio) as importe
                 FROM nomina_devengos
                 WHERE not esdevengo and not esirpf and idnomina = %s;"""
        dato = select_sql((sql, (nomina)))[0]
        return dato

    def trabajador_empresa(self, trabajador, mes, anio):
        sql = (
            "SELECT "
            "    nominas.idempresa "
            "FROM "
            "    nominas "
            "        left join "
            "            emp_contratos "
            "            on nominas.idemp_contratos = emp_contratos.idemp_contratos "
            "WHERE "
            "    emp_contratos.idtrabajadores = %s "
            "    and month(fecha) = %s "
            "    and year(fecha) = %s "
            "group by "
            "    nominas.idempresa;")
        dato = select_sql((sql, (trabajador, mes, anio)))[0]
        return dato

    def trabajadores(self,
                     empresa,
                     mes,
                     anio,
                     esnomina=True,
                     esfiniquito=False,
                     esnominapextra=False):
        sql = (
            ""
            "SELECT "
            "    CONCAT_WS(' ',Trabajadores.nombre,Trabajadores.apellido1, "
            "    Trabajadores.apellido2) as nombre, "
            "    Trabajadores.idTrabajadores "
            "FROM "
            "    Nominas.emp_contratos "
            "        left join "
            "            Trabajadores "
            "            On Trabajadores.idTrabajadores = emp_contratos.idtrabajadores "
            "        left join "
            "            empresa "
            "            On empresa.idempresa = emp_contratos.idempresa "
            "        left join "
            "            emp_ctacot "
            "            On emp_ctacot.idctacot = emp_contratos.idemp_ctacot "
            "WHERE "
            "    emp_contratos.idempresa = %s "
            "    and emp_contratos.conversion is Null "
            "    and emp_contratos.prorroga is Null "
            "    and ("
            "        (month(fecha_ini) <= %s and year(fecha_ini)<= %s) "
            "        or (month(fecha_ini)>%s and year(fecha_ini)<%s) "
            "        ) ")
        dato = 0
        if esnomina:
            sql = (
                sql + "    and (fecha_fin is null "
                "        or (month(fecha_fin) >= %s and year(fecha_fin)>= %s) "
                "        or (month(fecha_fin) <= %s and year(fecha_fin)> %s) "
                "        ) ")
            dato = select_sql(
                (sql, (empresa, mes, anio, mes, anio, mes, anio, mes, anio)),
                1)
        if esfiniquito:
            sql = (sql +
                   "    and (month(fecha_fin) = %s and year(fecha_fin)= %s) ")
            dato = select_sql(
                (sql, (empresa, mes, anio, mes, anio, mes, anio)), 1)
        return dato

    def trimestre_irpf(self, empresa, trim, anio):
        sql = (
            "SELECT idempresa, empresa, count(*), ((month(fecha)-1) div 3)+1 as trim, "
            "year(fecha), sum(imp_cuantia), sum(imp_deduccion), "
            "esirpf, esespecie "
            "FROM nomina_devengos "
            "LEFT JOIN nominas "
            "ON nominas.idnomina=nomina_devengos.idnomina"
            "WHERE ((month(fecha)-1) div 3) + 1 = %s and year(fecha) = %s "
            "and idempresa = %s "
            "group by idempresa, ((month(fecha)-1) div 3)+1, esespecie ")
        dato = select_sql((sql, (trim, anio, empresa)), 1)
        return dato

    def ver_devengos(self, trabajador, mes, anio):
        sql = (
            "select "
            "    nomina_devengos.idnomina_devengo, "
            "    nomina_devengos.concepto, "
            "    nomina_devengos.imp_cuantia, "
            "    nomina_devengos.imp_precio, "
            "    nomina_devengos.imp_devengo, "
            "    nomina_devengos.imp_deduccion "
            "from "
            "    nomina_devengos "
            "        left join "
            "            nominas "
            "            on nominas.idnomina = nomina_devengos.idnomina "
            "        left join "
            "            emp_contratos "
            "            on nominas.idemp_contratos = emp_contratos.idemp_contratos "
            "where "
            "    emp_contratos.idtrabajadores = %s "
            "    and month(nominas.fecha) = %s "
            "    and year(nominas.fecha) = %s "
            "    and esdevengo "
            "order by "
            "    orden")
        dato = select_sql((sql, (trabajador, mes, anio)), 1)
        return dato

    def ver_nomina(self, trabajador, mes, anio):
        sql = (
            "Select "
            "    empresa, cta_cot, antig, nombre, base_cc, base_irpf, "
            "    tot_dias, imp_totdev, tot_deducir  "
            "from "
            "    nominas "
            "        left join "
            "            nomina_devengos "
            "            on nominas.idnomina = nomina_devengos.idnomina "
            "        left join "
            "            emp_contratos "
            "            on nominas.idemp_contratos = emp_contratos.idemp_contratos "
            "where "
            "    emp_contratos.idtrabajadores = %s "
            "    and month(nominas.fecha) = %s "
            "    and year(nominas.fecha) = %s "
            "group by "
            "    empresa")
        dato = select_sql((sql, (trabajador, mes, anio)))
        return dato
示例#9
0
    def __init__(self, nomina):
        self.id = nomina
        self.bases = Bases(self.id)
        self.contrato = Contrato(self.bases.nomina.contrato_id)
        self.sql = ("Select "
                    "empresa, trabajador "
                    "From "
                    "tb_tiposcot A "
                    "inner join "
                    "tb_tiposcot_ejercicio B "
                    "on A.idtb_tiposcot = B.idtb_tipocot "
                    "Where "
                    "B.ejercicio = %s ")
        if self.contrato.contrato.es_indefinido:
            self.sql += "and A.es_dura_indefinida "
        elif self.contrato.contrato.es_temporal:
            self.sql += "and A.es_dura_determinada "
        elif self.contrato.contrato.es_tiempo_completo:
            self.sql += "and A.es_tpo_completo "
        elif self.contrato.contrato.es_tiempo_parcial:
            self.sql += "and A.es_tpo_parcial "
        self.tipo_ccomun_emp = self.tipos_cont_comun()[0]
        self.tipo_ccomun_trab = self.tipos_cont_comun()[1]
        self.tipo_desempleo_emp = self.tipos_desempleo()[0]
        self.tipo_desempleo_trab = self.tipos_desempleo()[1]
        self.tipo_fp_emp = self.tipos_formacion_prof()[0]
        self.tipo_fp_trab = self.tipos_formacion_prof()[1]
        self.tipo_fogasa_emp = self.tipos_fogasa()[0]
        self.tipo_fogasa_trab = self.tipos_fogasa()[1]

        self.base_cotizacion = self.bases.base_segsocial
        self.cont_comun_empresa = round(
            self.tipo_ccomun_emp * self.base_cotizacion / 100, 2)
        self.cont_comun_trabajador = round(
            self.tipo_ccomun_trab * self.base_cotizacion / 100, 2)
        self.desempleo_empresa = round(
            self.tipo_desempleo_emp * self.base_cotizacion / 100, 2)
        self.desempleo_trabajador = round(
            self.tipo_desempleo_trab * self.base_cotizacion / 100, 2)
        self.formacion_prof_emp = round(
            self.tipo_fp_emp * self.base_cotizacion / 100, 2)
        self.formacion_prof_trab = round(
            self.tipo_fp_trab * self.base_cotizacion / 100, 2)
        self.fogasa_emp = round(
            self.tipo_fogasa_emp * self.base_cotizacion / 100, 2)
        self.fogasa_trabajador = round(
            self.tipo_fogasa_trab * self.base_cotizacion / 100, 2)
        self.segsocial_empresa = (self.cont_comun_empresa +
                                  self.desempleo_empresa +
                                  self.formacion_prof_emp + self.fogasa_emp)
        self.total_aportacion = (
            self.cont_comun_trabajador + self.desempleo_trabajador +
            self.formacion_prof_trab)  #+ self.horasextras())
        #self.total_deduccion = (self.total_aportacion + self.irpf_dineraria() +
        #                        self.irpf_especie() + self.anticipos() +
        #                        self.valor_especie() + self.otras_deducciones())
        self.sql = ("Select "
                    "empresa, trabajador "
                    "From "
                    "tb_tiposcot A "
                    "inner join "
                    "tb_tiposcot_ejercicio B "
                    "on A.idtb_tiposcot = B.idtb_tipocot "
                    "Where "
                    "B.ejercicio = %s ")
        if self.contrato.contrato.es_indefinido:
            self.sql += "and A.es_dura_indefinida "
        elif self.contrato.contrato.es_temporal:
            self.sql += "and A.es_dura_determinada "
        elif self.contrato.contrato.es_tiempo_completo:
            self.sql += "and A.es_tpo_completo "
        elif self.contrato.contrato.es_tiempo_parcial:
            self.sql += "and A.es_tpo_parcial "
示例#10
0
    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