예제 #1
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()
예제 #2
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
예제 #3
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()