def get_funcionarios(self): try: from my_terceiro import Terceiro except: from terceiro import Terceiro return Terceiro().get_funcionarios()
def get_idade_terceiro(self, key): import dateutil value = 0 self.kargs = get_model_record(model=self, key=key) #print (self.kargs) from terceiro import Terceiro pessoa = Terceiro(where="id='{terceiro}'".format( terceiro=self.kargs['terceiro'])).get()[0] #print (pessoa) return dateutil.relativedelta.relativedelta( datetime.date.today(), pessoa['data_nascimento']).years
class Janelas(QMainWindow): def __init__(self): super(Janelas, self).__init__() loadUi('principal.ui', self) self.setWindowTitle('Principal') self.buttonSegundo.clicked.connect(self.segundo) self.buttonTerceiro.clicked.connect(self.terceiro) self.menuSair.triggered.connect(self.sair_sistema) self.actionSegundo.triggered.connect(self.segundo) self.actionTerceiro.triggered.connect(self.terceiro) def segundo(self): self.frmsegundo = QMainWindow() self.widget = Segundo() self.widget.show() def terceiro(self): self.frmterceiro = QMainWindow() self.widget = Terceiro() self.widget.show() def sair_sistema(self): exit()
def efectuar_pagamento(self, key, window_id): """Esta acção efectua o pagamento""" active = False record_id = key record = model.get(key=record_id)[0] record['user'] = session['user'] record['estado'] = 'Pago' from terceiro import Terceiro terceiro = Terceiro(where="nome='Clientes Gerais'").get()[0] cliente = terceiro['id'] conta_cliente = terceiro['a_receber'] #Verifica se tem caixa aberta, se não tiver abre #Faz o pagamento em caixa from caixa import Caixa from linha_caixa import LinhaCaixa from terminal import Terminal terminal = Terminal(where="""name='Distribuicao'""").get( ) # substituir esta bosta para get_terminal if len(terminal) > 0: terminal = terminal[0]['id'] caixa = Caixa( where= "estado = 'Aberta' AND terminal='{terminal}' AND data_inicial <= '{today}'" .format(terminal=terminal, today=record['data'])).get() if not caixa: caixa = Caixa(data_inicial=record['data'], hora_inicial=time.strftime('%H:%M:%S'), valor_inicial=0, valor_final=0, estado='Aberta', user=session['user'], vendedor=session['user'], terminal=terminal).put() else: caixa = caixa[0]['id'] from metodo_pagamento import MetodoPagamento metodos_pagamento = MetodoPagamento().get_options() first = True total_entregue = to_decimal('0') for metodo in metodos_pagamento: if bottle.request.forms.get(metodo[1]): method = to_decimal(str(bottle.request.forms.get(metodo[1]))) else: method = to_decimal('0') if method > to_decimal('0'): total_entregue += to_decimal( str(bottle.request.forms.get(metodo[1]))) if total_entregue >= to_decimal( str(bottle.request.forms.get('total_a_pagar'))): for metodo in metodos_pagamento: if first == True: default_metodo = metodo first = False if bottle.request.forms.get(metodo[1]): method = to_decimal( str(bottle.request.forms.get(metodo[1]))) else: method = to_decimal('0') if method > to_decimal('0'): linha_caixa = LinhaCaixa( caixa=caixa, descricao='Nossa Guia de Distribuição', documento='distribuicao', num_doc=record['numero'], valor_documento=to_decimal( str(bottle.request.forms.get('total_a_pagar'))), terceiro=cliente, metodo=metodo[0], entrada=bottle.request.forms.get(metodo[1]), saida=0, active=active, user=session['user']).put() troco = total_entregue - to_decimal( str(bottle.request.forms.get('total_a_pagar'))) if troco > to_decimal('0'): linha_caixa = LinhaCaixa( caixa=caixa, descricao='Nossa Guia de Distribuição', documento='distribuicao', num_doc=record['numero'], valor_documento=to_decimal( str(bottle.request.forms.get('total_a_pagar'))), terceiro=cliente, metodo=default_metodo[0], entrada=0, saida=troco, active=active, user=session['user']).put() else: troco = to_decimal('0') record['residual'] = to_decimal( str(bottle.request.forms.get( 'total_a_pagar'))) - total_entregue + troco #Faz o lançamento contabilistico se tiver factura como movimento activo, se não como movimento geral #Vê o metodo de pagamento e lança na conta adequada from diario import Diario diario = Diario(where="tipo='caixa'").get()[0]['id'] periodo = None from periodo import Periodo periodos = Periodo().get() for p in periodos: lista_datas = generate_dates(start_date=p['data_inicial'], end_date=p['data_final']) if str(format_date(record['data'])) in lista_datas: periodo = p['id'] if not periodo: return error_message( 'não existe periodo definido para a data em questão! \n') from movimento import Movimento from linha_movimento import LinhaMovimento movimento = Movimento( data=record['data'], numero=base_models.Sequence().get_sequence('movimento'), num_doc=record['numero'], descricao='Pagamento de Guia de Distribuição', diario=diario, documento='distribuicao', periodo=periodo, estado='Rascunho', user=session['user'], active=active).put() #print (record) Distribuicao(**record).put() for metodo in metodos_pagamento: if bottle.request.forms.get(metodo[1]): method = to_decimal( str(bottle.request.forms.get(metodo[1]))) else: method = to_decimal('0') if method > to_decimal('0'): conta_pagamento = MetodoPagamento().get( key=metodo[0])[0]['conta'] LinhaMovimento(movimento=movimento, descricao='Pagamento de Talão de Venda', conta=conta_pagamento, quant_debito=to_decimal('0'), debito=to_decimal( str(bottle.request.forms.get( metodo[1]))), quant_credito=to_decimal('0'), credito=to_decimal('0'), user=session['user']).put() LinhaMovimento( movimento=movimento, descricao='Pagamento de Guia de Distribuição', conta=conta_cliente, quant_debito=to_decimal('0'), debito=to_decimal('0'), quant_credito=to_decimal('0'), credito=to_decimal( str(bottle.request.forms.get(metodo[1]))), user=session['user']).put() return form_edit(key='None', window_id=self.window_id) else: return error_message( 'Segundo as Regras da Empresa não é possivel receber valores inferiores ao valor a Pagar, Torne a efectuar o pagamento por Favor!' ) #depois ver a possibilidade de ficar no mesmo sitio
def Confirmar( self, key, window_id): #não tinha self nem key eu acrescentei mas não testei # Gera movimento contabilistico (conta de mercadorias contra conta de gastos) # Gera movimento de Stock (sai de armazem por contrapartida de cliente) #print ('Hello!!!') if key in ['None', None]: m_action = model_action(obj=self) m_action.save(key=None, internal=True) record_id = key #print ('model_get begin!') record = model.get(key=record_id)[0] #print (record) record['user'] = session['user'] record['estado'] = 'Confirmado' record['numero'] = base_models.Sequence().get_sequence('distribuicao') from diario import Diario diario = Diario(where="tipo='stock'").get()[0]['id'] periodo = None from periodo import Periodo periodos = Periodo().get() for p in periodos: lista_datas = generate_dates(start_date=p['data_inicial'], end_date=p['data_final']) if str(format_date(record['data'])) in lista_datas: periodo = p['id'] if not periodo: return error_message( 'não existe periodo definido para o data em questão! \n') from armazem import Armazem armazem_cliente = Armazem(where="tipo='cliente'").get()[0]['id'] #Valida se o cliente é sujeito a iva from terceiro import Terceiro sujeito_iva = Terceiro( where="nome='Clientes Gerais'").get()[0]['sujeito_iva'] from movimento import Movimento movimento = Movimento( data=record['data'], numero=base_models.Sequence().get_sequence('movimento'), num_doc=record['numero'], descricao='Nossa Guia de distribuição', diario=diario, documento='distribuicao', periodo=periodo, estado='Confirmado', user=session['user']).put() from stock import Stock stock = Stock(data=record['data'], numero=base_models.Sequence().get_sequence('stock'), num_doc=record['numero'], descricao='Nossa Guia de Distribuição', documento='distribuicao', periodo=periodo, estado='Confirmado', user=session['user']).put() Distribuicao(**record).put() from linha_distribuicao import LinhaDistribuicao record_lines = LinhaDistribuicao( where="distribuicao = '{distribuicao}'".format( distribuicao=record['id'])).get() if record_lines: from linha_movimento import LinhaMovimento from linha_stock import LinhaStock from produto import Produto from familia_produto import FamiliaProduto for line in record_lines: # aqui depois considerar a contabilização do desconto # tambem depois considerar a verificação se o total está bem calculado e logs se o preço unitário for modificado quantidade = to_decimal(line['quant_out']) - to_decimal( line['quant_in']) product = Produto().get(key=line['produto'])[0] contas = Produto().get_accounts(line['produto']) conta_mercadorias = contas['conta_mercadorias'] conta_gastos = contas['conta_gastos'] if sujeito_iva: taxa_iva = product['iva'] else: taxa_iva = to_decimal('0') armazem_vendas = None familia = FamiliaProduto().get(key=product['familia']) if familia: familia = familia[0] if familia['armazem_vendas']: armazem_vendas = familia['armazem_vendas'] descricao = product['nome'] total_sem_iva = line['valor_total'] / (1 + taxa_iva) LinhaMovimento(movimento=movimento, descricao=descricao, conta=conta_gastos, quant_debito=quantidade, debito=line['valor_total'], quant_credito=to_decimal('0'), credito=to_decimal('0'), user=session['user']).put() LinhaMovimento(movimento=movimento, descricao=descricao, conta=conta_mercadorias, quant_debito=to_decimal('0'), debito=to_decimal('0'), quant_credito=quantidade, credito=line['valor_total'], user=session['user']).put() LinhaStock(stock=stock, descricao=descricao, produto=line['produto'], armazem=armazem_vendas, quant_saida=quantidade, quant_entrada=to_decimal('0'), user=session['user']).put() LinhaStock(stock=stock, descricao=descricao, produto=line['produto'], armazem=armazem_cliente, quant_saida=to_decimal('0'), quant_entrada=quantidade, user=session['user']).put() #print ('See You!!!') return form_edit(key=key, window_id=window_id) else: return error_message( 'Não pode confirmar guias de Distribuição sem linhas de Distribuição! \n' )
def get_funcionarios(self): return Terceiro().get_funcionarios()
def get_terceiros(self): return Terceiro().get_options()
def gerarRecibosSubsidios(self, key, funcionarios): self.kargs = get_model_record(model=self, key=key, force_db=True) este_periodo = "{ano}-{mes}".format(ano=self.kargs['ano'], mes=self.kargs['periodo']) funcionarios = [] if (self.kargs['para_todos'] == True & (self.kargs['periodo'] in ('13', '14', '15'))): funcionarios = Terceiro(where="funcionario=True").get( order_by='nome') elif self.kargs['periodo'] in ('13', '14', '15'): sql = """SELECT t.* FROM terceiro t WHERE (t.active = True OR t.active IS NULL) AND t.id IN ( SELECT fs.terceiro FROM funcionario_subsidio fs WHERE (fs.active = True OR fs.active IS NULL) AND fs.salario = '{idSal}' )""".format(idSal=key) funcionarios = run_sql(sql) for func in funcionarios: contrato = ContratoFuncionario(where="terceiro='{id}'".format( id=func['id'])).get() if contrato: contrato = contrato[0] content = { 'estado': 'Rascunho', 'user': self.kargs['user'], 'salario': self.kargs['id'], 'terceiro': func['id'], 'periodo': self.kargs['periodo'], 'ano': self.kargs['ano'] } idRecibo = ReciboSalario(**content).put() linhas = [] #adicionar o salario linhas.append({ 'nome': 'Salário', 'valor': contrato['salario_base'], 'tipo_rendimento': None, 'tipo_desconto': None }) #adicionar o IUR iur = to_decimal(0) if contrato['tipo'] in ('Permanente', 'Temporario'): #calcular a nova base tributavel (salario e rendiemento tributaveis) salario_bruto_iur = to_decimal( contrato['salario_base']) + to_decimal( self.get_total_rendimento_tributaveis( idFuncionario=func['id'])) iur = self.calcularIURfuncionario( salario=salario_bruto_iur) elif contrato['tipo'] == 'Pensionista': iur = self.calcularRetencaoPensionista( salario=contrato['salario_base']) else: iur = self.calcularIURprestadorServico( salario=contrato['salario_base']) linhas.append({ 'nome': 'IUR', 'valor': -iur, 'tipo_rendimento': None, 'tipo_desconto': None }) #adicionar o desconto inps if contrato['tipo'] in ('Permanente', 'Temporario'): salario_bruto_inps = to_decimal( contrato['salario_base']) + to_decimal( self.get_total_rendimento_Inps( idFuncionario=func['id'])) inps = self.calcularInpsFuncionario( salario=salario_bruto_inps) linhas.append({ 'nome': 'Segurança Social', 'valor': -inps, 'tipo_rendimento': None, 'tipo_desconto': None }) #adicionar os rendimentos rendimentos = RendimentoFuncionario( where="terceiro='{id}'".format(id=func['id'])).get() for line in rendimentos: tipo = TipoRendimento(where="id='{tr}'".format( tr=line['tipo_rendimento'])).get() if tipo: linhas.append({ 'nome': tipo[0]['nome'], 'valor': line['valor'], 'tipo_rendimento': tipo[0]['id'], 'tipo_desconto': None }) #adicionar os descontos print('\n\n\n\n##################1###################\n\n\n') descontos = DescontoFuncionario( where="terceiro='{idTer}'".format(idTer=func['id'])).get() for line in descontos: tipo = TipoDesconto(where="id='{tr}'".format( tr=line['tipo_desconto'])).get() if tipo: tipo = tipo[0] if tipo['taxa']: if tipo['base'] == 'salario base': valor = contrato['salario_base'] * line[ 'valor'] / 100 linhas.append({ 'nome': tipo['nome'], 'valor': -valor, 'tipo_rendimento': None, 'tipo_desconto': tipo['id'] }) else: valor = (contrato['salario_base'] + self.get_total_rendimento_tributaveis( idFuncionario=func['id']) ) * line['valor'] / 100 linhas.append({ 'nome': tipo['nome'], 'valor': -valor, 'tipo_rendimento': None, 'tipo_desconto': tipo['id'] }) else: linhas.append({ 'nome': tipo['nome'], 'valor': -line['valor'], 'tipo_rendimento': None, 'tipo_desconto': tipo['id'] }) #adicionar a outros descontos funcionario outrosDescontos = OutrosDescontosFuncionario( where="terceiro='{idTer}' AND salario='{idSal}'".format( idTer=func['id'], idSal=key)).get() for line in outrosDescontos: tipo = TipoDesconto(where="id='{tr}'".format( tr=line['tipo_desconto'])).get() if tipo: tipo = tipo[0] if tipo['taxa']: if tipo['base'] == 'salario base': valor = contrato['salario_base'] * line[ 'valor'] / 100 linhas.append({ 'nome': tipo['nome'], 'valor': -valor, 'tipo_rendimento': None, 'tipo_desconto': tipo['id'] }) else: valor = (contrato['salario_base'] + self.get_total_rendimento_tributaveis( idFuncionario=func['id']) ) * line['valor'] / 100 linhas.append({ 'nome': tipo['nome'], 'valor': -valor, 'tipo_rendimento': None, 'tipo_desconto': tipo['id'] }) else: linhas.append({ 'nome': tipo['nome'], 'valor': -line['valor'], 'tipo_rendimento': None, 'tipo_desconto': tipo['id'] }) for line in linhas: content = { 'user': self.kargs['user'], 'recibo_salario': idRecibo, 'nome': line['nome'], 'valor': line['valor'], 'tipo_rendimento': line['tipo_rendimento'], 'tipo_desconto': line['tipo_desconto'] } LinhaReciboSalario(**content).put() self.kargs['estado'] = 'Gerado' self.put()
def terceiro(self): self.frmterceiro = QMainWindow() self.widget = Terceiro() self.widget.show()
def segundo(self): self.frmsegundo = QMainWindow() self.widget = Segundo() self.widget.show()