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 __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')
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
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)
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
def dias_entre_fechas(self): contrato = Contrato() dia_final = self.hasta(anio, mes, dia)
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)
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
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 "
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