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()
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
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()